test/deploy_test.rb in eb_deployer-0.3.8 vs test/deploy_test.rb in eb_deployer-0.3.9
- old
+ new
@@ -6,453 +6,10 @@
@s3_driver = S3Stub.new
@cf_driver = CFStub.new
@sample_package = sample_file('app-package.war')
end
- def test_deployment_with_s3_package_specification
- File.open('mingle_package.yml', 'w') do |f|
- f.write("s3_bucket: test-bucket\n")
- f.write("s3_key: test-mingle.war")
- end
-
- deploy(:application => 'simple', :environment => "production",
- :package => 'mingle_package.yml', :version_label => 1)
- assert @eb_driver.application_exists?('simple')
- last_version = @eb_driver.application_versions('simple').last
- assert_equal({'s3_bucket' => 'test-bucket', 's3_key' => 'test-mingle.war'}, last_version[:source_bundle])
- ensure
- FileUtils.rm_rf('mingle_package.yml')
- end
-
- def test_first_deployment_create_eb_application
- assert !@eb_driver.application_exists?('simple')
- deploy(:application => 'simple', :environment => "production")
- assert @eb_driver.application_exists?('simple')
- end
-
- def test_set_option_settings_on_deployment
- redudant = [{:namespace => 'aws:autoscaling:launchconfiguration',
- :option_name => 'MinSize',
- :value => '2' }]
- deploy(:application => 'simple', :environment => "production",
- :option_settings => [redudant])
-
- assert_equal [redudant], @eb_driver.environment_settings('simple', 'production')
-
- end
-
- def test_destroy_should_clean_up_eb_application_and_env
- deploy(:application => 'simple', :environment => "production")
- destroy(:application => 'simple')
- assert !@eb_driver.application_exists?('simple')
- assert !@eb_driver.environment_exists?('simple', 'production')
- end
-
- def test_first_deployment_create_environment
- assert !@eb_driver.environment_exists?('simple', 'production')
- deploy(:application => 'simple', :environment => "production")
- assert @eb_driver.environment_exists?('simple', 'production')
- end
-
- def test_support_very_very_long_app_name
- deploy(:application => 'ver-very-simple-application', :environment => "production")
- assert @eb_driver.environment_exists?('ver-very-simple-application', 'production')
- end
-
- def test_should_raise_error_when_env_name_is_too_long
- assert_raises(RuntimeError) { deploy(:application => 'simple', :environment => "p" * 24) }
- end
-
- def test_update_environment_with_new_version_should_change_version_that_deployed
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 1)
- assert_equal '1', @eb_driver.environment_verion_label('simple', 'production')
-
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 2)
-
- assert_equal '2', @eb_driver.environment_verion_label('simple', 'production')
- end
-
- def test_version_prefix_should_be_prepended_to_version_label
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 1,
- :version_prefix => "prod-")
- assert_equal 'prod-1', @eb_driver.environment_verion_label('simple', 'production')
- end
-
- def test_should_keep_only_number_of_versions_specified
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 1)
-
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 2)
-
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 3,
- :keep_latest => 2)
-
- assert_equal '1', @eb_driver.versions_deleted('simple').first
- end
-
- def test_should_only_remove_versions_with_matching_prefix
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 1,
- :version_prefix => "prod1-",
- :keep_latest => 1)
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 2,
- :version_prefix => "prod1-",
- :keep_latest => 1)
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 1,
- :version_prefix => "prod2-",
- :keep_latest => 1)
-
- assert_equal 'prod1-1', @eb_driver.versions_deleted('simple').first
- assert_equal 1, @eb_driver.versions_deleted('simple').count
-
- app_versions = @eb_driver.application_versions('simple').map { |apv| apv[:version_label] }
- assert_equal ["prod1-2", "prod2-1"], app_versions
- end
-
- def test_default_cname_that_deployed_should_app_env_name
- deploy(:application => 'simple',
- :environment => "production",
- :version_label => 42)
- assert_equal "simple-production", @eb_driver.environment_cname_prefix('simple', 'production')
- end
-
- def test_cname_prefix_can_be_override
- deploy(:application => 'simple',
- :environment => "production",
- :cname_prefix => 'sports123',
- :version_label => 42)
- assert_equal "sports123", @eb_driver.environment_cname_prefix('simple', 'production')
- end
-
- def test_smoke_test_should_be_run_after_env_created_or_update
- host_for_smoke_test = nil
- deploy(:application => 'simple',
- :environment => "production",
- :cname_prefix => 'foobar',
- :smoke_test => lambda { |host| host_for_smoke_test = host },
- :version_label => 42)
- assert_equal 'foobar.elasticbeanstalk.com', host_for_smoke_test
-
- host_for_smoke_test = nil
- deploy(:application => 'simple',
- :environment => "production",
- :cname_prefix => 'foobar',
- :smoke_test => lambda { |host| host_for_smoke_test = host },
- :version_label => 43)
-
- assert_equal 'foobar.elasticbeanstalk.com', host_for_smoke_test
- end
-
- def test_blue_green_deployment_strategy_should_create_blue_env_on_first_deployment
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 42)
-
- assert @eb_driver.environment_exists?('simple', 'production-a')
- assert_equal 'simple-production', @eb_driver.environment_cname_prefix('simple', 'production-a')
- end
-
-
- def test_blue_green_deployment_should_create_green_env_if_blue_exists
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 42)
-
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 43)
-
- assert @eb_driver.environment_exists?('simple', 'production-a')
- assert @eb_driver.environment_exists?('simple', 'production-b')
- end
-
-
- def test_blue_green_deployment_should_swap_cname_to_make_active_most_recent_updated_env
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 42)
-
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 43)
-
- assert_match(/simple-production-inactive/, @eb_driver.environment_cname_prefix('simple', 'production-a'))
-
- assert_equal 'simple-production', @eb_driver.environment_cname_prefix('simple', 'production-b')
-
-
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 44)
-
- assert_match(/simple-production-inactive/, @eb_driver.environment_cname_prefix('simple', 'production-b'))
-
- assert_equal 'simple-production', @eb_driver.environment_cname_prefix('simple', 'production-a')
- end
-
-
- def test_blue_green_deploy_should_run_smoke_test_before_cname_switch
- smoked_host = []
- smoke_test = lambda { |host| smoked_host << host }
- [42, 43, 44].each do |version_label|
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :smoke_test => smoke_test,
- :version_label => version_label)
- end
-
- assert_equal ['simple-production.elasticbeanstalk.com',
- 'simple-production-inactive.elasticbeanstalk.com',
- 'simple-production-inactive.elasticbeanstalk.com'], smoked_host
- end
-
- def test_deploy_with_resources_declared_will_create_a_cf_stack_for_env
- cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template
- })
- assert @cf_driver.stack_exists?('simple-production')
- assert_equal({}, @cf_driver.stack_config('simple-production')[:parameters])
- assert_equal([], @cf_driver.stack_config('simple-production')[:capabilities])
- end
-
- def test_provision_resources_with_capacities
- cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template,
- :capabilities => ['CAPABILITY_IAM']
- })
- assert_equal ['CAPABILITY_IAM'], @cf_driver.stack_config('simple-production')[:capabilities]
- end
-
- def test_provision_resources_with_parameters
- cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template,
- :parameters => {'a' => 1}
- })
- assert_equal({'a' => 1 }, @cf_driver.stack_config('simple-production')[:parameters])
- end
-
- def test_skip_resource_update
- cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}}}))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template,
- :parameters => {'a' => 1 }
- })
- assert_equal(1, @cf_driver.stack_config('simple-production')[:parameters]['a'])
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template,
- :parameters => {'a' => 2 }
- })
- assert_equal(2, @cf_driver.stack_config('simple-production')[:parameters]['a'])
- deploy(:application => 'simple',
- :environment => "production",
- :skip_resource_stack_update => true,
- :resources => {
- :template => cf_template,
- :parameters => {'a' => 3 }
- })
- assert_equal(2, @cf_driver.stack_config('simple-production')[:parameters]['a'])
- end
-
- def test_should_still_query_output_to_set_eb_options_even_skip_resources_update_is_specified
- cf_template = temp_file(JSON.dump({'Resources' => {'R1' => {}},
- 'Outputs' => {'O1' => {}, 'O2' => {}}}))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template
- })
-
- deploy(:application => 'simple', :environment => "production",
- :skip_resource_stack_update => true,
- :resources => {
- :template => cf_template,
- :transforms => {
- 'O2' => lambda { |v| {:namespace => 'aws.foo', :option_name => 'o2', :value => "transformed " + v} }
- }
- })
-
- assert @eb_driver.environment_settings('simple', 'production').
- include?({:namespace => 'aws.foo', :option_name => 'o2', :value => 'transformed value of O2'})
- end
-
-
- def test_set_s3_bucket_name_on_deployment
- deploy(:application => 'simple',
- :environment => "production",
- :package_bucket => 'thoughtworks.simple')
-
- assert @s3_driver.bucket_exists?('thoughtworks.simple.packages')
- end
-
- def test_transforms_resource_provsion_output_to_elastic_beanstalk_settings
- cf_template = temp_file(JSON.dump({
- 'Resources' => {'R1' => {}},
- 'Outputs' => {'O1' => {}, 'O2' => {}}
- }))
- deploy(:application => 'simple', :environment => "production",
- :resources => {
- :template => cf_template,
- :transforms => {
- 'O1' => lambda { |v| {:namespace => 'aws.foo', :option_name => 'o1', :value => v} }
- }
- })
- assert @eb_driver.environment_settings('simple', 'production').
- include?({:namespace => 'aws.foo', :option_name => 'o1', :value => 'value of O1'})
- end
-
- def test_can_query_resource_stack_output_after_deploy
- cf_template = temp_file(JSON.dump({
- 'Resources' => {'R1' => {}},
- 'Outputs' => {'O1' => {}, 'O2' => {}}
- }))
- deploy(:application => 'simple',
- :environment => "production",
- :resources => { :template => cf_template })
- assert_equal 'value of O1', query_resource_output('O1',
- :application => 'simple',
- :environment => "production")
- assert_equal 'value of O2', query_resource_output('O2',
- :application => 'simple',
- :environment => "production")
-
- end
-
- def test_should_raise_error_if_query_resources_that_have_not_been_provisioned_yet
- assert_raises(EbDeployer::ResourceNotInReadyState) do
- query_resource_output('O1',
- :application => 'simple',
- :environment => "production")
- end
- end
-
- def test_should_terminate_old_environment_if_phoenix_mode_is_enabled
- deploy(:application => 'simple', :environment => "production", :phoenix_mode => true)
- assert @eb_driver.environment_exists?('simple', 'production')
- deploy(:application => 'simple', :environment => "production", :phoenix_mode => true)
- assert @eb_driver.environments_been_deleted('simple').include?('production')
- assert @eb_driver.environment_exists?('simple', 'production')
- end
-
- def test_blue_green_deployment_should_delete_and_recreate_inactive_env_if_phoenix_mode_is_enabled
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 42,
- :phoenix_mode => true)
-
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 43,
- :phoenix_mode => true)
-
- assert_equal [], @eb_driver.environments_been_deleted('simple')
-
- inactive_env = 'production-a'
- assert_match(/inactive/, @eb_driver.environment_cname_prefix('simple', inactive_env))
-
-
- deploy(:application => 'simple',
- :environment => "production",
- :strategy => 'blue-green',
- :version_label => 44,
- :phoenix_mode => true)
-
- assert_equal [inactive_env], @eb_driver.environments_been_deleted('simple')
-
- assert_equal 'simple-production', @eb_driver.environment_cname_prefix('simple', inactive_env)
- end
-
- def test_pass_pathname_as_package_file
- deploy(:package => Pathname.new(@sample_package),
- :application => 'simple',
- :environment => "production",
- :package_bucket => 'thoughtworks.simple')
-
- s3_objects = @s3_driver.objects('thoughtworks.simple.packages')
- assert_equal 1, s3_objects.size
- assert_equal @sample_package, s3_objects.values.first.to_s
- end
-
- def test_sets_default_tier_as_webserver
- deploy(:application => 'simple', :environment => "production")
- assert_equal EbDeployer.environment_tier('WebServer'), @eb_driver.environment_tier('simple', 'production')
- end
-
- def test_can_change_tier
- deploy(:application => 'simple', :environment => "production", :tier => 'Worker')
- assert_equal EbDeployer.environment_tier('Worker'), @eb_driver.environment_tier('simple', 'production')
- end
-
- def test_should_raise_error_when_tier_setting_is_not_recognized
- assert_raises(RuntimeError) do
- deploy(:application => 'simple', :environment => "production", :tier => 'Gum')
- end
- end
-
- def test_pass_s3_object_name_as_package_file
- package_name = 'test-bucket:test-mingle.war'
-
- deploy(:package => package_name,
- :application => 'simple',
- :environment => "production",
- :version_label => 1)
-
- assert @eb_driver.application_exists?('simple')
- last_version = @eb_driver.application_versions('simple').last
- assert_equal({'s3_bucket' => 'test-bucket', 's3_key' => 'test-mingle.war'}, last_version[:source_bundle])
- end
-
- # def test_deploy_with_components
- # deploy(:application => 'simple',
- # :environment => 'production',
- # :components => [{ :name => 'web' }])
-
- # assert @eb_driver.environment_exists?('simple', 'production-web')
- # end
-
- def test_should_clean_up_legacy_environment_on_deploy
- legacy_env_name = EbDeployer::EbEnvironment.legacy_ebenv_name("simple", "production")
- @eb_driver.create_application("simple")
- @eb_driver.create_environment("simple", legacy_env_name, 'solution-stack', 'simple-production', 'foo', 'web' ,{})
- deploy(:application => 'simple',
- :environment => 'production',
- :version_label => 1)
- assert @eb_driver.environment_exists?("simple", "production")
- assert !@eb_driver.environment_exists?("simple", legacy_env_name)
- end
-
- private
+ protected
def temp_file(content)
f = Tempfile.new("foo")
f.write(content)
f