chef-provisioning-opennebula 0.4.8 → 0.4.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -3
  3. data/lib/chef/provisioning/opennebula_driver/driver.rb +7 -1
  4. data/lib/chef/provisioning/opennebula_driver/version.rb +1 -1
  5. data/spec/config_sample.rb +19 -18
  6. data/spec/integration/one_driver_spec.rb +84 -0
  7. data/spec/integration/one_flow_spec.rb +340 -0
  8. data/spec/recipes/OneDriver/{instantiate_one_template_vnet.rb → allocate_one_vm.rb} +6 -4
  9. data/spec/recipes/OneDriver/attach_one_image.rb +2 -2
  10. data/spec/recipes/OneDriver/converge_one_vm.rb +17 -0
  11. data/spec/recipes/OneDriver/create_one_image.rb +1 -1
  12. data/spec/recipes/OneDriver/create_one_template.rb +18 -0
  13. data/spec/recipes/OneDriver/create_one_vnet.rb +2 -2
  14. data/spec/recipes/OneDriver/{delete/OpenNebula-test-vm.rb → delete_one_img.rb} +1 -1
  15. data/spec/recipes/OneDriver/{delete/OpenNebula-test-img.rb → delete_one_snap-img.rb} +1 -1
  16. data/spec/recipes/{OneFlowService/delete/test_role_action.rb → OneDriver/delete_one_template.rb} +1 -1
  17. data/spec/recipes/OneDriver/{delete/OpenNebula-test-vm-vnet.rb → delete_one_vm.rb} +1 -1
  18. data/spec/recipes/OneDriver/{delete/OpenNebula-test-vnet.rb → delete_one_vnet.rb} +1 -1
  19. data/spec/recipes/OneDriver/ready_one_vm.rb +17 -0
  20. data/spec/recipes/OneDriver/snapshot_one_image.rb +3 -3
  21. data/spec/recipes/OneDriver/update_one_template.rb +20 -0
  22. data/spec/recipes/{OneFlowTemplate/create_branch_from_one_id.rb → OneFlow/branch_json_template_by_id.rb} +6 -6
  23. data/spec/recipes/OneFlow/branch_json_template_by_name.rb +42 -0
  24. data/spec/recipes/{OneFlowTemplate/chmod_simple_from_hash.rb → OneFlow/chmod_file_template.rb} +1 -1
  25. data/spec/recipes/{OneFlowService/chmod_simple_by_name_2.rb → OneFlow/chmod_json_service_by_id.rb} +2 -2
  26. data/spec/recipes/{OneFlowService/instance_simple_by_name.rb → OneFlow/chmod_json_service_by_name.rb} +2 -2
  27. data/spec/recipes/{OneDriver/delete/OpenNebula-test-snap-img.rb → OneFlow/chmod_json_template.rb} +2 -2
  28. data/spec/recipes/OneFlow/create_file_template.rb +18 -0
  29. data/spec/recipes/{OneFlowTemplate/create_tpl_opts_from_hash.rb → OneFlow/create_file_template_with_opts.rb} +8 -11
  30. data/spec/recipes/OneFlow/create_http_template.rb +17 -0
  31. data/spec/recipes/{OneFlowService/instance_simple_by_id.rb → OneFlow/create_json_service_by_id.rb} +4 -2
  32. data/spec/recipes/{OneFlowService/chmod_simple_by_name.rb → OneFlow/create_json_service_by_name.rb} +2 -2
  33. data/spec/recipes/{OneFlowService/instance_tpl_opts.rb → OneFlow/create_json_service_with_opts.rb} +8 -6
  34. data/spec/recipes/{OneFlowTemplate/create_simple_from_hash.rb → OneFlow/create_json_template.rb} +4 -3
  35. data/spec/recipes/{OneFlowTemplate/create_tpl_opts_from_file.rb → OneFlow/create_json_template_with_opts.rb} +15 -7
  36. data/spec/recipes/{OneFlowService/instance_role_action.rb → OneFlow/create_role_action_service.rb} +8 -8
  37. data/spec/recipes/OneFlow/create_role_action_template.rb +89 -0
  38. data/spec/recipes/OneFlow/delete_branched_template_by_id.rb +17 -0
  39. data/spec/recipes/OneFlow/delete_branched_template_by_name.rb +17 -0
  40. data/spec/recipes/{OneDriver/delete/OpenNebula-test-tpl-strings.rb → OneFlow/delete_file_template.rb} +1 -1
  41. data/spec/recipes/OneFlow/delete_file_template_with_opts.rb +17 -0
  42. data/spec/recipes/{OneDriver/delete/OpenNebula-test-tpl-ints.rb → OneFlow/delete_http_template.rb} +1 -1
  43. data/spec/recipes/{OneDriver/delete/OpenNebula-test-tpl-mix.rb → OneFlow/delete_json_service_by_id.rb} +1 -1
  44. data/spec/recipes/OneFlow/delete_json_service_by_name.rb +17 -0
  45. data/spec/recipes/OneFlow/delete_json_service_with_opts.rb +17 -0
  46. data/spec/recipes/OneFlow/delete_json_template.rb +17 -0
  47. data/spec/recipes/OneFlow/delete_json_template_with_opts.rb +17 -0
  48. data/spec/recipes/OneFlow/delete_role_action_service.rb +17 -0
  49. data/spec/recipes/OneFlow/delete_role_action_template.rb +17 -0
  50. data/spec/recipes/{OneFlowService/action/boot.rb → OneFlow/service_action_boot.rb} +4 -3
  51. data/spec/recipes/OneFlow/service_action_delete.rb +18 -0
  52. data/spec/recipes/{OneFlowService/action/delete_recreate.rb → OneFlow/service_action_delete_recreate.rb} +2 -2
  53. data/spec/recipes/{OneFlowService/action/hold.rb → OneFlow/service_action_hold.rb} +4 -3
  54. data/spec/recipes/{OneFlowService/action/poweroff.rb → OneFlow/service_action_poweroff.rb} +2 -2
  55. data/spec/recipes/{OneFlowService/action/poweroff_hard.rb → OneFlow/service_action_poweroff_hard.rb} +2 -2
  56. data/spec/recipes/{OneFlowService/action/reboot.rb → OneFlow/service_action_reboot.rb} +2 -2
  57. data/spec/recipes/{OneFlowService/action/reboot_hard.rb → OneFlow/service_action_reboot_hard.rb} +2 -2
  58. data/spec/recipes/{OneFlowService/action/release.rb → OneFlow/service_action_release.rb} +4 -3
  59. data/spec/recipes/OneFlow/service_action_resume_poweroff.rb +18 -0
  60. data/spec/recipes/OneFlow/service_action_resume_poweroff_hard.rb +18 -0
  61. data/spec/recipes/{OneFlowService/action/resume.rb → OneFlow/service_action_resume_stop.rb} +2 -2
  62. data/spec/recipes/OneFlow/service_action_resume_suspend.rb +18 -0
  63. data/spec/recipes/OneFlow/service_action_resume_undeploy.rb +18 -0
  64. data/spec/recipes/OneFlow/service_action_resume_undeploy_hard.rb +18 -0
  65. data/spec/recipes/{OneFlowService/action/scale.rb → OneFlow/service_action_scale.rb} +2 -2
  66. data/spec/recipes/{OneFlowService/action/shutdown.rb → OneFlow/service_action_shutdown.rb} +2 -2
  67. data/spec/recipes/{OneFlowService/action/shutdown_hard.rb → OneFlow/service_action_shutdown_hard.rb} +2 -2
  68. data/spec/recipes/{OneFlowService/action/snapshot_create.rb → OneFlow/service_action_snapshot_create.rb} +2 -2
  69. data/spec/recipes/{OneFlowService/action/stop.rb → OneFlow/service_action_stop.rb} +2 -2
  70. data/spec/recipes/{OneFlowService/action/suspend.rb → OneFlow/service_action_suspend.rb} +2 -2
  71. data/spec/recipes/{OneFlowService/action/undeploy.rb → OneFlow/service_action_undeploy.rb} +2 -2
  72. data/spec/recipes/{OneFlowService/action/undeploy_hard.rb → OneFlow/service_action_undeploy_hard.rb} +2 -2
  73. data/spec/recipes/{OneFlowService/action/shutdown_service.rb → OneFlow/shutdown_role_action_service.rb} +1 -1
  74. data/spec/recipes/{OneFlowTemplate/update_simple_from_hash.rb → OneFlow/update_json_template.rb} +17 -14
  75. data/spec/recipes/common.rb +0 -2
  76. data/spec/spec_helper.rb +97 -42
  77. metadata +86 -89
  78. data/spec/integration/test_all_integration_spec.rb +0 -21
  79. data/spec/integration/test_one_driver.rb +0 -177
  80. data/spec/integration/test_one_flow.rb +0 -546
  81. data/spec/recipes/OneDriver/allocate_change_profile.rb +0 -23
  82. data/spec/recipes/OneDriver/create_one_template_ints.rb +0 -38
  83. data/spec/recipes/OneDriver/create_one_template_mix.rb +0 -51
  84. data/spec/recipes/OneDriver/create_one_template_strings.rb +0 -34
  85. data/spec/recipes/OneDriver/instantiate_one_template.rb +0 -21
  86. data/spec/recipes/OneFlowService/action/delete.rb +0 -18
  87. data/spec/recipes/OneFlowService/chmod_tpl_opts.rb +0 -31
  88. data/spec/recipes/OneFlowService/delete/test_instance_template_options.rb +0 -17
  89. data/spec/recipes/OneFlowService/delete/test_simple_instance.rb +0 -17
  90. data/spec/recipes/OneFlowService/delete/test_simple_instance_by_id.rb +0 -17
  91. data/spec/recipes/OneFlowTemplate/chmod_update_simple_from_file.rb +0 -19
  92. data/spec/recipes/OneFlowTemplate/create_branch_from_one_name.rb +0 -20
  93. data/spec/recipes/OneFlowTemplate/create_role_action_instance.rb +0 -99
  94. data/spec/recipes/OneFlowTemplate/create_simple_from_file.rb +0 -18
  95. data/spec/recipes/OneFlowTemplate/create_simple_from_web.rb +0 -17
  96. data/spec/recipes/OneFlowTemplate/create_simple_instance_tpl.rb +0 -22
  97. data/spec/recipes/OneFlowTemplate/delete/branch_from_one_id.rb +0 -17
  98. data/spec/recipes/OneFlowTemplate/delete/branch_from_one_name.rb +0 -17
  99. data/spec/recipes/OneFlowTemplate/delete/role_action_instance.rb +0 -17
  100. data/spec/recipes/OneFlowTemplate/delete/simple_from_file.rb +0 -17
  101. data/spec/recipes/OneFlowTemplate/delete/simple_from_hash.rb +0 -17
  102. data/spec/recipes/OneFlowTemplate/delete/simple_from_web.rb +0 -17
  103. data/spec/recipes/OneFlowTemplate/delete/simple_instance_tpl.rb +0 -17
  104. data/spec/recipes/OneFlowTemplate/delete/tpl_opts_from_file.rb +0 -17
  105. data/spec/recipes/OneFlowTemplate/delete/tpl_opts_from_hash.rb +0 -17
  106. data/spec/support/opennebula_support.rb +0 -129
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'reboot_hard'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_reboot_hard'
17
17
  action :reboot_hard
18
18
  end
@@ -12,8 +12,9 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'release'
17
- override_failsafe true
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_hold'
17
+ # The following setting will ignore the fact the feature is not fully tested and run it anyway
18
+ #override_failsafe true
18
19
  action :release
19
20
  end
@@ -0,0 +1,18 @@
1
+ # Copyright 2016, BlackBerry Limited
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_poweroff'
17
+ action :resume
18
+ end
@@ -0,0 +1,18 @@
1
+ # Copyright 2016, BlackBerry Limited
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_poweroff_hard'
17
+ action :resume
18
+ end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'suspend_resume'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_stop'
17
17
  action :resume
18
18
  end
@@ -0,0 +1,18 @@
1
+ # Copyright 2016, BlackBerry Limited
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_suspend'
17
+ action :resume
18
+ end
@@ -0,0 +1,18 @@
1
+ # Copyright 2016, BlackBerry Limited
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_undeploy'
17
+ action :resume
18
+ end
@@ -0,0 +1,18 @@
1
+ # Copyright 2016, BlackBerry Limited
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_undeploy_hard'
17
+ action :resume
18
+ end
@@ -12,8 +12,8 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'scale'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_scale'
17
17
  cardinality 2
18
18
  action :scale
19
19
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'shutdown'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_shutdown'
17
17
  action :shutdown
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'shutdown_hard'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_shutdown_hard'
17
17
  action :shutdown_hard
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'snapshot_create'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_snapshot_create'
17
17
  action :snapshot_create
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'stop'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_stop'
17
17
  action :stop
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'suspend_resume'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_suspend'
17
17
  action :suspend
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'undeploy'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_undeploy'
17
17
  action :undeploy
18
18
  end
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
16
- role 'undeploy_hard'
15
+ one_flow_service 'RSpec-role-action-service' do
16
+ role 'RSpec_undeploy_hard'
17
17
  action :undeploy_hard
18
18
  end
@@ -12,6 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_service 'test_role_action' do
15
+ one_flow_service 'RSpec-role-action-service' do
16
16
  action :shutdown
17
17
  end
@@ -12,42 +12,45 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- one_flow_template 'test_simple_from_hash' do
15
+ one_flow_template 'RSpec-flow-json-template' do
16
16
  template :deployment => 'none',
17
+ :ready_status_gate => false,
17
18
  :roles => [
18
19
  {
19
- :name => 'gary_ubuntu',
20
+ :name => 'RSpecTest',
21
+ :cooldown => 2,
20
22
  :min_vms => 1,
21
23
  :max_vms => 5,
22
24
  :scheduled_policies => [
23
25
  {
24
26
  :type => "PERCENTAGE_CHANGE",
27
+ :cooldown => 2,
25
28
  :recurrence => "0 1 1-10 * *",
26
- :adjust => 3,
27
- :min_adjust_step => 14
29
+ :adjust => 1,
30
+ :min_adjust_step => 5
28
31
  }
29
32
  ]
30
33
  },
31
34
  {
32
- :name => 'gary_ubuntu_2',
33
- :vm_template => 'OpenNebula-test-tpl-strings',
34
- :cooldown => 123,
35
+ :name => 'RSpecRetest',
36
+ :vm_template => 'RSpec-test-template',
37
+ :cooldown => 2,
35
38
  :min_vms => 1,
36
39
  :max_vms => 5,
37
40
  :elasticity_policies => [
38
41
  {
39
42
  :type => "CHANGE",
40
- :cooldown => 17,
41
- :period => 15,
42
- :adjust => 2,
43
- :period_number => 2,
43
+ :cooldown => 2,
44
+ :period => 2,
45
+ :adjust => 1,
46
+ :period_number => 1,
44
47
  :expression => "ATT == 20"
45
48
  },
46
49
  {
47
50
  :type => "CARDINALITY",
48
- :cooldown => 14,
49
- :period => 13,
50
- :adjust => 3,
51
+ :cooldown => 2,
52
+ :period => 2,
53
+ :adjust => 1,
51
54
  :period_number => 1,
52
55
  :expression => "ATT > 20"
53
56
  }
@@ -29,5 +29,3 @@ with_machine_options MACHINE_OPTIONS.merge(
29
29
  one_auth = Chef::Provisioning::OpenNebulaDriver.get_onelib(
30
30
  :driver_url => DRIVER_URL
31
31
  ).client.one_auth
32
-
33
- username = one_auth.split(':').first
data/spec/spec_helper.rb CHANGED
@@ -12,57 +12,112 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- require 'chef/dsl/recipe'
16
- require 'chef/mixin/shell_out'
17
- require 'chef/platform'
18
- require 'chef/provisioning'
19
15
  require 'chef/provisioning/opennebula_driver'
20
- require 'chef/run_context'
21
- require 'cheffish/rspec/matchers'
22
- require 'support/opennebula_support'
16
+ require 'open3'
17
+ require 'tempfile'
23
18
  require 'fileutils'
24
- require_relative 'config.rb'
19
+ require "#{File.dirname(__FILE__)}/config.rb"
25
20
 
26
- def idempotency_helper(context, recipe, expected = nil)
27
- context context do
28
- it { is_expected.to converge_test_recipe(:recipe => recipe, :expected => expected, :fail_if => '(up to date)') }
21
+ RSpec.configure do |config|
22
+ config.filter_run :runme
23
+ config.run_all_when_everything_filtered = true
24
+ config.add_setting :log_dir, :default => File.join(File.expand_path('..', File.dirname(__FILE__)), 'rspec-results')
25
+ config.before(:suite) do
26
+ # Cleanup nodes and log_dir from previous run
27
+ FileUtils.rm_rf(File.join(File.expand_path('..', File.dirname(__FILE__)), 'nodes'))
28
+ FileUtils.mkdir_p(config.log_dir) unless Dir.exist?(config.log_dir)
29
+ Dir.entries(config.log_dir).reject{|entry| entry =~ /^\.\.?$/}.each do |f|
30
+ FileUtils.rm_rf(File.join(config.log_dir, f))
31
+ end
32
+ cleanup
29
33
  end
30
- context "[SKIP] #{context}" do
31
- it { is_expected.to converge_test_recipe(:recipe => recipe, :expected => '(up to date)', :fail_if => nil) }
34
+ config.after(:suite) do
35
+ FileUtils.rm_rf(File.join(File.expand_path('..', File.dirname(__FILE__)), 'nodes'))
32
36
  end
33
37
  end
34
38
 
35
- def cleanup
36
- # OneDriver deletes are listed explicitly because they need to be run in a certain order.
37
- cleanup_list = %w(
38
- OneDriver/delete/OpenNebula-test-tpl-strings.rb
39
- OneDriver/delete/OpenNebula-test-tpl-ints.rb
40
- OneDriver/delete/OpenNebula-test-tpl-mix.rb
41
- OneDriver/delete/OpenNebula-test-vm.rb
42
- OneDriver/delete/OpenNebula-test-vm-vnet.rb
43
- OneDriver/delete/OpenNebula-test-vnet.rb
44
- OneDriver/delete/OpenNebula-test-img.rb
45
- OneDriver/delete/OpenNebula-test-snap-img.rb
46
- ).map { |f| "#{File.dirname(__FILE__)}/recipes/" + f }
47
- cleanup_list += Dir["#{File.dirname(__FILE__)}/recipes/OneFlowTemplate/delete/*.rb"] unless ONE_FLOW_URL.nil?
48
- cleanup_list += Dir["#{File.dirname(__FILE__)}/recipes/OneFlowService/delete/*.rb"] unless ONE_FLOW_URL.nil?
49
- err = get_error(chef_run(cleanup_list, false), 'Chef Client finished', nil)
50
- fail "\n\nTest suite cleanup failed\n#{err.first}\n\n" unless err.first.nil?
39
+ RSpec::Matchers.define :converge_with_result do |expected|
40
+ match do |recipe|
41
+ recipe_file = createRecipe([File.join('./spec/recipes/', recipe)])
42
+ @stdout, @stderr, status = Open3.capture3('chef-client', '-z', recipe_file, '--force-formatter')
43
+
44
+ # Save stdout, stderr and stacktrace to log_dir
45
+ saveLogs(recipe, @stdout, @stderr)
46
+
47
+ # Evaluate outcome by looking at STDOUT
48
+ if status.success?
49
+ @stdout.scan(Regexp.union(expected)).any? ? true : false
50
+ else
51
+ false
52
+ end
53
+ end
54
+
55
+ failure_message do |recipe|
56
+ "expecting #{recipe} return #{expected} - instead we received:\n\n#{@stdout}\n#{@stderr}"
57
+ end
58
+
59
+ failure_message_when_negated do |recipe|
60
+ "expecting #{recipe} NOT return #{expected} - instead we received:\n\n#{@stdout}\n#{@stderr}"
61
+ end
51
62
  end
52
63
 
53
- RSpec.configure do |config|
54
- config.run_all_when_everything_filtered = true
55
- config.filter_run :focus
56
- config.add_setting :log_dir, :default => "test-results/#{Time.now.strftime('%Y%m%d_%H%M%S')}"
57
- config.before(:suite) do
58
- FileUtils.rm_rf(config.log_dir)
59
- FileUtils.mkdir_p(config.log_dir)
60
- FileUtils.rm_rf('nodes')
61
- cleanup
64
+ private
65
+
66
+ # Create a temporary recipe file
67
+ # NB - file is removed after rspec terminates
68
+ def createRecipe(recipes_list)
69
+ recipes_list.unshift('./spec/recipes/common.rb')
70
+ file = Tempfile.new(['recipe-', '.rb'], '/tmp')
71
+ file << "require '#{File.dirname(__FILE__)}/config.rb'\n\n"
72
+ recipes_list.each do |r|
73
+ file << File.read(r) + "\n\n"
62
74
  end
63
- config.after(:suite) do
64
- FileUtils.rm_rf('nodes')
65
- cleanup
66
- FileUtils.rm_rf('/tmp/chef-provisioning-opennebula-rspec-recipe.rb')
75
+ file.close
76
+ file.path
77
+ end
78
+
79
+ # Save output streams and stacktrace to log files
80
+ # Log filenames are timestamped to make then unique
81
+ def saveLogs(recipe, stdout, stderr)
82
+ # Establish what filename to use for logging
83
+ FileUtils.mkdir_p(File.join(RSpec.configuration.log_dir, File.dirname(recipe)))
84
+ log_basename = File.join(RSpec.configuration.log_dir, File.dirname(recipe),
85
+ File.basename(recipe, File.extname(recipe)))
86
+ ts = Time.now.strftime('%H-%M-%S-%4N')
87
+
88
+ # Find out if we have a stacktrace in stdout
89
+ st = @stdout.scan(/FATAL: Stacktrace dumped to (.*?chef-stacktrace\.out)/)
90
+ stacktrace = st.any? && File.exist?(st.last.join) ? File.read(st.last.join) : ''
91
+
92
+ # Write the logs
93
+ File.open(log_basename + ".#{ts}" + '.stdout', 'w') { |f| f.puts(stdout); f.close} unless stdout.empty?
94
+ File.open(log_basename + ".#{ts}" + '.stderr', 'w') { |f| f.puts(stderr); f.close} unless stderr.empty?
95
+ File.open(log_basename + ".#{ts}" + '.stacktrace', 'w') { |f| f.puts(stacktrace); f.close} unless stacktrace.empty?
96
+ end
97
+
98
+ # Cleanup objects created in previous run
99
+ def cleanup
100
+ # List of recipes we're going to use for cleanup
101
+ cleanup_list = %w(
102
+ OneDriver/delete_one_snap-img.rb
103
+ OneDriver/delete_one_vm.rb
104
+ OneDriver/delete_one_template.rb
105
+ OneDriver/delete_one_img.rb
106
+ OneDriver/delete_one_vnet.rb
107
+ ).map { |f| File.join(File.dirname(__FILE__), "recipes", f) }
108
+ cleanup_list += Dir["#{File.dirname(__FILE__)}/recipes/OneFlow/delete_*.rb"] unless ONE_FLOW_URL.nil?
109
+
110
+ # Create temporary cleanup recipe and run it
111
+ recipe_file = createRecipe(cleanup_list)
112
+ @stdout, @stderr, status = Open3.capture3('chef-client', '-z', recipe_file, '--force-formatter')
113
+
114
+ # Save stdout, stderr and stacktrace to log_dir
115
+ saveLogs('cleanup.rb', @stdout, @stderr)
116
+
117
+ # Evaluate outcome by looking at STDOUT
118
+ if status.success?
119
+ raise "Cleanup attempt failed:\n\n#{@stdout}\n#{@stderr}" if @stdout.scan(/FATAL:/).any?
120
+ else
121
+ raise "Cleanup attempt failed:\n\n#{@stdout}\n#{@stderr}"
67
122
  end
68
123
  end