| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  | require 'workers/stack_bootstrap/chef_node_name_builder' | 
					
						
							|  |  |  | RSpec.describe ChefNodeNameBuilder do | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |   # test with real response to ensure it is processed correctly | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |   let(:server_info) do | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-20 17:39:02 +03:00
										 |  |  |       "name"=>"stack-achuchkalov-aws-test-1455976199-master01", | 
					
						
							|  |  |  |       "id"=>"i-fac32c7e", | 
					
						
							|  |  |  |       "key_name"=>"achuchkalov", | 
					
						
							|  |  |  |       "private_ip"=>"172.31.11.30", | 
					
						
							|  |  |  |       "public_ip"=>"52.90.250.51", | 
					
						
							|  |  |  |       "tags" => { | 
					
						
							|  |  |  |         "Name"=>"master01", | 
					
						
							|  |  |  |         "aws:cloudformation:logical-id"=>"EC2Instance1", | 
					
						
							|  |  |  |         "aws:cloudformation:stack-name"=>"stack-achuchkalov-aws-test-1455976199", | 
					
						
							|  |  |  |         "StackTemplate"=>"1inst", | 
					
						
							|  |  |  |         "aws:cloudformation:stack-id" => "arn:aws:cloudformation:us-east-1:736558555923:stack/stack-achuchkalov-aws-test-1455976199/d5f3ca60-d7d8-11e5-9ba1-50d5cd24fac6", | 
					
						
							|  |  |  |         "cid:deployEnv"=>"test", | 
					
						
							|  |  |  |         "cid:project"=>"aws", | 
					
						
							|  |  |  |         "cid:user"=>"root", | 
					
						
							|  |  |  |         "cid:priority"=>0
 | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |   let(:node_name_builder) { | 
					
						
							|  |  |  |     ChefNodeNameBuilder.new( | 
					
						
							|  |  |  |       provider_server_info: server_info, | 
					
						
							|  |  |  |       project_id: 'proj', | 
					
						
							|  |  |  |       env_id: 'dev' | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2016-02-20 17:39:02 +03:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |   let(:build_node_name) { node_name_builder.build_node_name!({}) } | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def set_mask(mask) | 
					
						
							|  |  |  |     server_info['tags']['cid:node-name-mask'] = mask | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe '#build_node_name' do | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |     it 'uses default mask (":project-:instancename-:env")' do | 
					
						
							| 
									
										
										
										
											2016-02-20 17:39:02 +03:00
										 |  |  |       expect(build_node_name).to eq 'proj-master01-dev' | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |     it 'substitutes :project, :env, :instanceid and :instancename' do | 
					
						
							|  |  |  |       set_mask(':project/:env/:instanceid/:instancename') | 
					
						
							| 
									
										
										
										
											2016-02-26 14:27:14 +03:00
										 |  |  |       expect(build_node_name).to eq 'proj/dev/i-fac32c7e/master01' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it 'substitutes :time' do | 
					
						
							|  |  |  |       set_mask(':project-:time') | 
					
						
							|  |  |  |       expect(build_node_name).to match /proj-\d+/ | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |     describe 'substitutes incrementers variables :increment-groupname: with numbers depending on @incrementers_values param' do | 
					
						
							|  |  |  |       it 'starts with 01 for empty hash' do | 
					
						
							|  |  |  |         set_mask('node-:increment-slave:') | 
					
						
							|  |  |  |         expect(node_name_builder.build_node_name!({})).to eq 'node-01' | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-02-26 14:27:14 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  |       it "continues with next values if hash isn't empty" do | 
					
						
							|  |  |  |         set_mask('node-:increment-slave:') | 
					
						
							|  |  |  |         expect(node_name_builder.build_node_name!({'slave' => nil})).to eq 'node-01' | 
					
						
							|  |  |  |         expect(node_name_builder.build_node_name!({'slave' => 1})).to eq 'node-02' | 
					
						
							|  |  |  |         expect(node_name_builder.build_node_name!({'slave' => 50})).to eq 'node-51' | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it 'could substitute different incrementers at once' do | 
					
						
							|  |  |  |         set_mask('node-:increment-slave:-:increment-master:') | 
					
						
							|  |  |  |         expect(node_name_builder.build_node_name!({'slave' => 1, 'master' => 3})).to eq 'node-02-04' | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-03-02 16:00:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-31 17:52:11 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |