/spec/lib/miq_automation_engine/service_methods/miq_ae_service_manageiq-providers-cloud_manager-provision_spec.rb

https://gitlab.com/aljesusg/manageiqtest · Ruby · 337 lines · 271 code · 66 blank · 0 comment · 18 complexity · 5ed98246ed8109f46cdbc2b33ca8857a MD5 · raw file

  1. module MiqAeServiceManageIQ_Providers_CloudManager_ProvisionSpec
  2. describe MiqAeMethodService::MiqAeServiceMiqProvision do
  3. %w(amazon openstack google azure).each do |t|
  4. context "for #{t}" do
  5. before do
  6. @provider = FactoryGirl.create("ems_#{t}_with_authentication")
  7. @cloud_image = FactoryGirl.create("template_#{t}", :ext_management_system => @provider)
  8. @options = {:src_vm_id => [@cloud_image.id, @cloud_image.name],
  9. :pass => 1}
  10. @user = FactoryGirl.create(:user, :name => 'Fred Flintstone', :userid => 'fred')
  11. @miq_provision = FactoryGirl.create("miq_provision_#{t}",
  12. :provision_type => 'template',
  13. :state => 'pending',
  14. :status => 'Ok',
  15. :options => @options,
  16. :userid => @user.userid)
  17. end
  18. let(:workflow_klass) { MiqProvisionWorkflow.class_for_platform(t) }
  19. let(:ae_svc_prov) { MiqAeMethodService::MiqAeServiceMiqProvision.find(@miq_provision.id) }
  20. context "#request_type" do
  21. %w(template clone_to_vm clone_to_template).each do |request_type|
  22. it "should set #{request_type} for #{t}" do
  23. @miq_provision.update_attributes(:request_type => request_type)
  24. expect(ae_svc_prov.provision_type).to eq(request_type)
  25. end
  26. end
  27. end
  28. context "#target_type" do
  29. it "clone_to_template" do
  30. @miq_provision.update_attributes(:provision_type => 'clone_to_template')
  31. expect(ae_svc_prov.target_type).to eq('template')
  32. end
  33. %w(template clone_to_vm).each do |provision_type|
  34. it "#{provision_type}" do
  35. @miq_provision.update_attributes(:provision_type => provision_type)
  36. expect(ae_svc_prov.target_type).to eq('vm')
  37. end
  38. end
  39. end
  40. context "#source_type" do
  41. it "works with a template" do
  42. @cloud_image.update_attributes(:template => true)
  43. expect(ae_svc_prov.source_type).to eq('template')
  44. end
  45. it "works with a vm" do
  46. @cloud_image.update_attributes(:template => false)
  47. expect(ae_svc_prov.source_type).to eq('vm')
  48. end
  49. end
  50. context "customization_templates" do
  51. it "workflow exposes allowed_customization_templates" do
  52. expect(workflow_klass.instance_methods).to include(:allowed_customization_templates)
  53. end
  54. context "with a customization_template" do
  55. before do
  56. @ct = FactoryGirl.create(:customization_template, :name => "Test Templates", :script => "script_text")
  57. ct_struct = [MiqHashStruct.new(:id => @ct.id,
  58. :name => @ct.name,
  59. :evm_object_class => @ct.class.base_class.name.to_sym)]
  60. allow_any_instance_of(workflow_klass).to receive(:allowed_customization_templates).and_return(ct_struct)
  61. end
  62. it "#eligible_customization_templates" do
  63. result = ae_svc_prov.eligible_customization_templates
  64. expect(result).to be_kind_of(Array)
  65. expect(result.first.class).to eq(MiqAeMethodService::MiqAeServiceCustomizationTemplate)
  66. end
  67. it "#set_customization_template" do
  68. ae_svc_prov.eligible_customization_templates.each { |ct| ae_svc_prov.set_customization_template(ct) }
  69. expect(@miq_provision.reload.options[:customization_template_id]).to eq([@ct.id, @ct.name])
  70. expect(@miq_provision.reload.options[:customization_template_script]).to eq(@ct.script)
  71. end
  72. end
  73. end
  74. if t != "azure"
  75. context "availability_zone" do
  76. it "workflow exposes allowed_availability_zones" do
  77. expect(workflow_klass.instance_methods).to include(:allowed_availability_zones)
  78. end
  79. context "with an availability_zone" do
  80. before do
  81. @ci = FactoryGirl.create("availability_zone_#{t}")
  82. allow_any_instance_of(workflow_klass).to receive(:allowed_availability_zones).and_return(@ci.id => @ci.name)
  83. end
  84. it "#eligible_availability_zones" do
  85. result = ae_svc_prov.eligible_availability_zones
  86. expect(result).to be_kind_of(Array)
  87. expect(result.first.class).to eq("MiqAeMethodService::MiqAeService#{@ci.class.name.gsub(/::/, '_')}".constantize)
  88. end
  89. it "#set_availability_zone" do
  90. ae_svc_prov.eligible_availability_zones.each { |rsc| ae_svc_prov.set_availability_zone(rsc) }
  91. expect(@miq_provision.reload.options[:placement_availability_zone]).to eq([@ci.id, @ci.name])
  92. end
  93. end
  94. end
  95. end
  96. context "instance_types" do
  97. it "workflow exposes allowed_instance_types" do
  98. expect(workflow_klass.instance_methods).to include(:allowed_instance_types)
  99. end
  100. context "with an instance_type" do
  101. before do
  102. @ci = FactoryGirl.create("flavor_#{t}")
  103. allow_any_instance_of(workflow_klass).to receive(:allowed_instance_types).and_return(@ci.id => @ci.name)
  104. end
  105. it "#eligible_instance_types" do
  106. result = ae_svc_prov.eligible_instance_types
  107. expect(result).to be_kind_of(Array)
  108. expect(result.first.class).to eq("MiqAeMethodService::MiqAeService#{@ci.class.name.gsub(/::/, '_')}".constantize)
  109. end
  110. it "#set_instance_type" do
  111. ae_svc_prov.eligible_instance_types.each { |rsc| ae_svc_prov.set_instance_type(rsc) }
  112. expect(@miq_provision.reload.options[:instance_type]).to eq([@ci.id, @ci.name])
  113. end
  114. end
  115. end
  116. if t != "google"
  117. context "security_groups" do
  118. it "workflow exposes allowed_security_groups" do
  119. expect(workflow_klass.instance_methods).to include(:allowed_security_groups)
  120. end
  121. context "with a security_group" do
  122. before do
  123. @ci = FactoryGirl.create("security_group_#{t}")
  124. allow_any_instance_of(workflow_klass).to receive(:allowed_security_groups).and_return(@ci.id => @ci.name)
  125. end
  126. it "#eligible_security_groups" do
  127. result = ae_svc_prov.eligible_security_groups
  128. expect(result).to be_kind_of(Array)
  129. expect(result.first.class).to eq("MiqAeMethodService::MiqAeService#{@ci.class.name.gsub(/::/, '_')}".constantize)
  130. end
  131. it "#set_security_group" do
  132. ae_svc_prov.eligible_security_groups.each { |rsc| ae_svc_prov.set_security_group(rsc) }
  133. expect(@miq_provision.reload.options[:security_groups]).to eq([@ci.id])
  134. end
  135. end
  136. end
  137. end
  138. context "cloud_networks" do
  139. it "workflow exposes allowed_cloud_networks" do
  140. expect(workflow_klass.instance_methods).to include(:allowed_cloud_networks)
  141. end
  142. context "with a cloud_network" do
  143. before do
  144. @ci = FactoryGirl.create(:cloud_network)
  145. allow_any_instance_of(workflow_klass).to receive(:allowed_cloud_networks).and_return(@ci.id => @ci.name)
  146. end
  147. it "#eligible_cloud_networks" do
  148. result = ae_svc_prov.eligible_cloud_networks
  149. expect(result).to be_kind_of(Array)
  150. expect(result.first.class).to eq(MiqAeMethodService::MiqAeServiceCloudNetwork)
  151. end
  152. it "#set_cloud_network" do
  153. ae_svc_prov.eligible_cloud_networks.each { |rsc| ae_svc_prov.set_cloud_network(rsc) }
  154. expect(@miq_provision.reload.options[:cloud_network]).to eq([@ci.id, @ci.name])
  155. end
  156. end
  157. end
  158. if t != "google"
  159. context "cloud_subnets" do
  160. it "workflow exposes allowed_cloud_subnets" do
  161. expect(workflow_klass.instance_methods).to include(:allowed_cloud_subnets)
  162. end
  163. context "with a cloud_subnet" do
  164. before do
  165. @ci = FactoryGirl.create(:cloud_subnet)
  166. allow_any_instance_of(workflow_klass).to receive(:allowed_cloud_subnets).and_return(@ci.id => @ci.name)
  167. end
  168. it "#eligible_cloud_subnets" do
  169. result = ae_svc_prov.eligible_cloud_subnets
  170. expect(result).to be_kind_of(Array)
  171. expect(result.first.class).to eq(MiqAeMethodService::MiqAeServiceCloudSubnet)
  172. end
  173. it "#set_cloud_subnet" do
  174. ae_svc_prov.eligible_cloud_subnets.each { |rsc| ae_svc_prov.set_cloud_subnet(rsc) }
  175. expect(@miq_provision.reload.options[:cloud_subnet]).to eq([@ci.id, @ci.name])
  176. end
  177. end
  178. end
  179. end
  180. if t != "google" && t != "azure"
  181. context "floating_ip_addresses" do
  182. it "workflow exposes allowed_floating_ip_addresses" do
  183. expect(workflow_klass.instance_methods).to include(:allowed_floating_ip_addresses)
  184. end
  185. context "with a floating_ip_address" do
  186. before do
  187. @ci = FactoryGirl.create("floating_ip_#{t}")
  188. allow_any_instance_of(workflow_klass).to receive(:allowed_floating_ip_addresses).and_return(@ci.id => @ci.address)
  189. end
  190. it "#eligible_floating_ip_addresses" do
  191. result = ae_svc_prov.eligible_floating_ip_addresses
  192. expect(result).to be_kind_of(Array)
  193. expect(result.first.class).to eq("MiqAeMethodService::MiqAeService#{@ci.class.name.gsub(/::/, '_')}".constantize)
  194. end
  195. it "#set_floating_ip_address" do
  196. ae_svc_prov.eligible_floating_ip_addresses.each { |rsc| ae_svc_prov.set_floating_ip_address(rsc) }
  197. expect(@miq_provision.reload.options[:floating_ip_address]).to eq([@ci.id, @ci.address])
  198. end
  199. end
  200. end
  201. end
  202. if t != "google" && t != "azure"
  203. context "guest_access_key_pairs" do
  204. it "workflow exposes allowed_guest_access_key_pairs" do
  205. expect(workflow_klass.instance_methods).to include(:allowed_guest_access_key_pairs)
  206. end
  207. context "with a key_pairs" do
  208. before do
  209. @ci = FactoryGirl.create("auth_key_pair_#{t}")
  210. allow_any_instance_of(workflow_klass).to receive(:allowed_guest_access_key_pairs).and_return(@ci.id => @ci.name)
  211. end
  212. it "#eligible_guest_access_key_pairs" do
  213. result = ae_svc_prov.eligible_guest_access_key_pairs
  214. expect(result).to be_kind_of(Array)
  215. expect(result.first.class).to eq("MiqAeMethodService::MiqAeService#{@ci.class.name.gsub(/::/, '_')}".constantize)
  216. end
  217. it "#set_guest_access_key_pairs" do
  218. ae_svc_prov.eligible_guest_access_key_pairs.each { |rsc| ae_svc_prov.set_guest_access_key_pair(rsc) }
  219. expect(@miq_provision.reload.options[:guest_access_key_pair]).to eq([@ci.id, @ci.name])
  220. end
  221. end
  222. end
  223. end
  224. if t == 'azure'
  225. context "resource_groups" do
  226. it "workflow exposes allowed_resource_groups" do
  227. expect(workflow_klass.instance_methods).to include(:allowed_resource_groups)
  228. end
  229. context "with a resource_group" do
  230. before do
  231. @rg = FactoryGirl.create("resource_group")
  232. allow_any_instance_of(workflow_klass).to receive(:allowed_resource_groups).and_return(@rg.id => @rg.name)
  233. end
  234. it "#eligible_resource_groups" do
  235. result = ae_svc_prov.eligible_resource_groups
  236. expect(result).to be_kind_of(Array)
  237. expect(result.first.class).to eq("MiqAeMethodService::MiqAeServiceResourceGroup".constantize)
  238. end
  239. it "#set_resource_group" do
  240. ae_svc_prov.eligible_resource_groups.each { |rg| ae_svc_prov.set_resource_group(rg) }
  241. expect(@miq_provision.reload.options[:resource_group]).to eq([@rg.id, @rg.name])
  242. end
  243. end
  244. end
  245. end
  246. if t == 'openstack'
  247. context "cloud_tenants" do
  248. it "workflow exposes allowed_cloud_tenants" do
  249. expect(workflow_klass.instance_methods).to include(:allowed_cloud_tenants)
  250. end
  251. context "with a cloud_tenant" do
  252. before do
  253. @ct = FactoryGirl.create("cloud_tenant")
  254. allow_any_instance_of(workflow_klass).to receive(:allowed_cloud_tenants).and_return(@ct.id => @ct.name)
  255. end
  256. it "#eligible_cloud_tenants" do
  257. result = ae_svc_prov.eligible_cloud_tenants
  258. expect(result).to be_kind_of(Array)
  259. expect(result.first.class).to eq("MiqAeMethodService::MiqAeServiceCloudTenant".constantize)
  260. end
  261. it "#set_cloud_tenant" do
  262. ae_svc_prov.eligible_cloud_tenants.each { |rsc| ae_svc_prov.set_cloud_tenant(rsc) }
  263. expect(@miq_provision.reload.options[:cloud_tenant]).to eq([@ct.id, @ct.name])
  264. end
  265. end
  266. end
  267. end
  268. end
  269. end
  270. end
  271. end