vagrant-openstack-illuin-provider 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rubocop.yml +40 -0
  4. data/CHANGELOG.md +282 -0
  5. data/Gemfile +18 -0
  6. data/RELEASE.md +15 -0
  7. data/Rakefile +25 -0
  8. data/Vagrantfile +20 -0
  9. data/dummy.box +0 -0
  10. data/example_box/README.md +13 -0
  11. data/example_box/metadata.json +3 -0
  12. data/functional_tests/Vagrantfile +58 -0
  13. data/functional_tests/keys/vagrant-openstack +27 -0
  14. data/functional_tests/keys/vagrant-openstack.pub +1 -0
  15. data/functional_tests/run_tests.sh +142 -0
  16. data/lib/vagrant-openstack-illuin-provider.rb +29 -0
  17. data/lib/vagrant-openstack-illuin-provider/action.rb +344 -0
  18. data/lib/vagrant-openstack-illuin-provider/action/abstract_action.rb +22 -0
  19. data/lib/vagrant-openstack-illuin-provider/action/connect_openstack.rb +60 -0
  20. data/lib/vagrant-openstack-illuin-provider/action/create_server.rb +187 -0
  21. data/lib/vagrant-openstack-illuin-provider/action/create_stack.rb +76 -0
  22. data/lib/vagrant-openstack-illuin-provider/action/delete_server.rb +53 -0
  23. data/lib/vagrant-openstack-illuin-provider/action/delete_stack.rb +73 -0
  24. data/lib/vagrant-openstack-illuin-provider/action/message.rb +19 -0
  25. data/lib/vagrant-openstack-illuin-provider/action/provision.rb +60 -0
  26. data/lib/vagrant-openstack-illuin-provider/action/read_ssh_info.rb +74 -0
  27. data/lib/vagrant-openstack-illuin-provider/action/read_state.rb +43 -0
  28. data/lib/vagrant-openstack-illuin-provider/action/resume.rb +24 -0
  29. data/lib/vagrant-openstack-illuin-provider/action/snapshot_cleanup.rb +32 -0
  30. data/lib/vagrant-openstack-illuin-provider/action/snapshot_delete.rb +32 -0
  31. data/lib/vagrant-openstack-illuin-provider/action/snapshot_list.rb +22 -0
  32. data/lib/vagrant-openstack-illuin-provider/action/snapshot_restore.rb +29 -0
  33. data/lib/vagrant-openstack-illuin-provider/action/snapshot_save.rb +51 -0
  34. data/lib/vagrant-openstack-illuin-provider/action/start_server.rb +24 -0
  35. data/lib/vagrant-openstack-illuin-provider/action/stop_server.rb +25 -0
  36. data/lib/vagrant-openstack-illuin-provider/action/suspend.rb +24 -0
  37. data/lib/vagrant-openstack-illuin-provider/action/sync_folders.rb +138 -0
  38. data/lib/vagrant-openstack-illuin-provider/action/wait_active.rb +33 -0
  39. data/lib/vagrant-openstack-illuin-provider/action/wait_stop.rb +33 -0
  40. data/lib/vagrant-openstack-illuin-provider/cap/snapshot_list.rb +15 -0
  41. data/lib/vagrant-openstack-illuin-provider/catalog/openstack_catalog.rb +90 -0
  42. data/lib/vagrant-openstack-illuin-provider/client/cinder.rb +39 -0
  43. data/lib/vagrant-openstack-illuin-provider/client/domain.rb +163 -0
  44. data/lib/vagrant-openstack-illuin-provider/client/glance.rb +65 -0
  45. data/lib/vagrant-openstack-illuin-provider/client/heat.rb +49 -0
  46. data/lib/vagrant-openstack-illuin-provider/client/http_utils.rb +116 -0
  47. data/lib/vagrant-openstack-illuin-provider/client/keystone.rb +128 -0
  48. data/lib/vagrant-openstack-illuin-provider/client/neutron.rb +48 -0
  49. data/lib/vagrant-openstack-illuin-provider/client/nova.rb +303 -0
  50. data/lib/vagrant-openstack-illuin-provider/client/openstack.rb +59 -0
  51. data/lib/vagrant-openstack-illuin-provider/client/request_logger.rb +23 -0
  52. data/lib/vagrant-openstack-illuin-provider/client/rest_utils.rb +28 -0
  53. data/lib/vagrant-openstack-illuin-provider/command/abstract_command.rb +51 -0
  54. data/lib/vagrant-openstack-illuin-provider/command/flavor_list.rb +24 -0
  55. data/lib/vagrant-openstack-illuin-provider/command/floatingip_list.rb +32 -0
  56. data/lib/vagrant-openstack-illuin-provider/command/image_list.rb +29 -0
  57. data/lib/vagrant-openstack-illuin-provider/command/main.rb +52 -0
  58. data/lib/vagrant-openstack-illuin-provider/command/network_list.rb +25 -0
  59. data/lib/vagrant-openstack-illuin-provider/command/openstack_command.rb +16 -0
  60. data/lib/vagrant-openstack-illuin-provider/command/reset.rb +20 -0
  61. data/lib/vagrant-openstack-illuin-provider/command/subnet_list.rb +22 -0
  62. data/lib/vagrant-openstack-illuin-provider/command/utils.rb +22 -0
  63. data/lib/vagrant-openstack-illuin-provider/command/volume_list.rb +25 -0
  64. data/lib/vagrant-openstack-illuin-provider/config.rb +505 -0
  65. data/lib/vagrant-openstack-illuin-provider/config/http.rb +39 -0
  66. data/lib/vagrant-openstack-illuin-provider/config_resolver.rb +334 -0
  67. data/lib/vagrant-openstack-illuin-provider/errors.rb +187 -0
  68. data/lib/vagrant-openstack-illuin-provider/logging.rb +39 -0
  69. data/lib/vagrant-openstack-illuin-provider/plugin.rb +58 -0
  70. data/lib/vagrant-openstack-illuin-provider/provider.rb +50 -0
  71. data/lib/vagrant-openstack-illuin-provider/utils.rb +81 -0
  72. data/lib/vagrant-openstack-illuin-provider/version.rb +15 -0
  73. data/lib/vagrant-openstack-illuin-provider/version_checker.rb +76 -0
  74. data/locales/en.yml +412 -0
  75. data/spec/vagrant-openstack-illuin-provider/action/connect_openstack_spec.rb +770 -0
  76. data/spec/vagrant-openstack-illuin-provider/action/create_server_spec.rb +260 -0
  77. data/spec/vagrant-openstack-illuin-provider/action/create_stack_spec.rb +99 -0
  78. data/spec/vagrant-openstack-illuin-provider/action/delete_server_spec.rb +89 -0
  79. data/spec/vagrant-openstack-illuin-provider/action/delete_stack_spec.rb +63 -0
  80. data/spec/vagrant-openstack-illuin-provider/action/message_spec.rb +33 -0
  81. data/spec/vagrant-openstack-illuin-provider/action/provision_spec.rb +97 -0
  82. data/spec/vagrant-openstack-illuin-provider/action/read_ssh_info_spec.rb +202 -0
  83. data/spec/vagrant-openstack-illuin-provider/action/read_state_spec.rb +81 -0
  84. data/spec/vagrant-openstack-illuin-provider/action/resume_server_spec.rb +49 -0
  85. data/spec/vagrant-openstack-illuin-provider/action/start_server_spec.rb +49 -0
  86. data/spec/vagrant-openstack-illuin-provider/action/stop_server_spec.rb +49 -0
  87. data/spec/vagrant-openstack-illuin-provider/action/suspend_server_spec.rb +49 -0
  88. data/spec/vagrant-openstack-illuin-provider/action/sync_folders_spec.rb +155 -0
  89. data/spec/vagrant-openstack-illuin-provider/action/wait_active_spec.rb +53 -0
  90. data/spec/vagrant-openstack-illuin-provider/action/wait_stop_spec.rb +53 -0
  91. data/spec/vagrant-openstack-illuin-provider/action_spec.rb +120 -0
  92. data/spec/vagrant-openstack-illuin-provider/client/cinder_spec.rb +129 -0
  93. data/spec/vagrant-openstack-illuin-provider/client/glance_spec.rb +145 -0
  94. data/spec/vagrant-openstack-illuin-provider/client/heat_spec.rb +130 -0
  95. data/spec/vagrant-openstack-illuin-provider/client/keystone_spec.rb +226 -0
  96. data/spec/vagrant-openstack-illuin-provider/client/neutron_spec.rb +173 -0
  97. data/spec/vagrant-openstack-illuin-provider/client/nova_spec.rb +760 -0
  98. data/spec/vagrant-openstack-illuin-provider/client/utils_spec.rb +176 -0
  99. data/spec/vagrant-openstack-illuin-provider/command/flavor_list_spec.rb +43 -0
  100. data/spec/vagrant-openstack-illuin-provider/command/floatingip_list_spec.rb +74 -0
  101. data/spec/vagrant-openstack-illuin-provider/command/image_list_spec.rb +95 -0
  102. data/spec/vagrant-openstack-illuin-provider/command/network_list_spec.rb +65 -0
  103. data/spec/vagrant-openstack-illuin-provider/command/reset_spec.rb +24 -0
  104. data/spec/vagrant-openstack-illuin-provider/command/subnet_list_spec.rb +45 -0
  105. data/spec/vagrant-openstack-illuin-provider/command/volume_list_spec.rb +40 -0
  106. data/spec/vagrant-openstack-illuin-provider/config_resolver_spec.rb +879 -0
  107. data/spec/vagrant-openstack-illuin-provider/config_spec.rb +416 -0
  108. data/spec/vagrant-openstack-illuin-provider/e2e_spec.rb.save +27 -0
  109. data/spec/vagrant-openstack-illuin-provider/provider_spec.rb +13 -0
  110. data/spec/vagrant-openstack-illuin-provider/spec_helper.rb +37 -0
  111. data/spec/vagrant-openstack-illuin-provider/utils_spec.rb +197 -0
  112. data/spec/vagrant-openstack-illuin-provider/version_checker_spec.rb +39 -0
  113. data/stackrc +25 -0
  114. data/vagrant-openstack-illuin-provider.gemspec +35 -0
  115. metadata +379 -0
@@ -0,0 +1,33 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Action::Message do
4
+ let(:ui) do
5
+ double('ui').tap do |ui|
6
+ ui.stub(:info).with(anything)
7
+ ui.stub(:error).with(anything)
8
+ end
9
+ end
10
+
11
+ let(:env) do
12
+ {}.tap do |env|
13
+ env[:ui] = ui
14
+ end
15
+ end
16
+
17
+ let(:app) do
18
+ double('app').tap do |app|
19
+ app.stub(:call).with(anything)
20
+ end
21
+ end
22
+
23
+ describe 'call' do
24
+ context 'when message is given' do
25
+ it 'print out the message' do
26
+ expect(ui).to receive(:info).with('Message to show')
27
+ expect(app).to receive(:call)
28
+ @action = Message.new(app, nil, 'Message to show')
29
+ @action.call(env)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,97 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ #
4
+ # Stubing all the interactions using the real
5
+ # provisioner classes is somehow complicated...
6
+ #
7
+ class FakeProvisioner
8
+ def provision
9
+ end
10
+ end
11
+
12
+ class FakeShellProvisioner < FakeProvisioner
13
+ attr_accessor :config
14
+
15
+ def initialize(config)
16
+ @config = config
17
+ end
18
+ end
19
+
20
+ describe VagrantPlugins::Openstack::Action::ProvisionWrapper do
21
+ let(:app) do
22
+ double
23
+ end
24
+
25
+ let(:internal_provision_wrapper) do
26
+ double
27
+ end
28
+
29
+ before :each do
30
+ # Stub lookup for provisioners and return a hash containing the test mock.
31
+ allow(Vagrant.plugin('2').manager).to receive(:provisioners).and_return(shell: FakeShellProvisioner)
32
+ @action = ProvisionWrapper.new(app, nil)
33
+ end
34
+
35
+ describe 'execute' do
36
+ it 'call InternalProvisionWrapper and conitnue the middleware chain' do
37
+ expect(internal_provision_wrapper).to receive(:call)
38
+ InternalProvisionWrapper.stub(:new) { internal_provision_wrapper }
39
+ app.stub(:call) {}
40
+ @action.execute nil
41
+ end
42
+ end
43
+ end
44
+
45
+ describe VagrantPlugins::Openstack::Action::InternalProvisionWrapper do
46
+ let(:env) do
47
+ {}
48
+ end
49
+
50
+ before :each do
51
+ # Stub lookup for provisioners and return a hash containing the test mock.
52
+ allow(Vagrant.plugin('2').manager).to receive(:provisioners).and_return(shell: FakeShellProvisioner)
53
+ @action = InternalProvisionWrapper.new(nil, env)
54
+ end
55
+
56
+ describe 'run_provisioner' do
57
+ context 'when running a shell provisioner' do
58
+ context 'without meta-arg' do
59
+ it 'does not change the provisioner config' do
60
+ env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
61
+ c.args = %w(arg1 arg2)
62
+ end)
63
+
64
+ expect(env[:provisioner]).to receive(:provision)
65
+ expect(@action).to receive(:handle_shell_meta_args)
66
+
67
+ @action.run_provisioner(env)
68
+ expect(env[:provisioner].config.args).to eq(%w(arg1 arg2))
69
+ end
70
+ end
71
+
72
+ context 'with @@ssh_ip@@ meta-arg' do
73
+ it 'replace the meta-args in the provisioner config' do
74
+ env[:provisioner] = FakeShellProvisioner.new(OpenStruct.new.tap do |c|
75
+ c.args = ['arg1', '@@ssh_ip@@', 'arg3']
76
+ end)
77
+
78
+ VagrantPlugins::Openstack::Action.stub(:get_ssh_info).and_return host: '192.168.0.1'
79
+ expect(env[:provisioner]).to receive(:provision)
80
+
81
+ @action.run_provisioner(env)
82
+ expect(env[:provisioner].config.args).to eq(%w(arg1 192.168.0.1 arg3))
83
+ end
84
+ end
85
+ end
86
+
87
+ context 'when running a provisioner other that the shell provisioner' do
88
+ it 'does not call handle_shell_meta_args' do
89
+ env[:provisioner] = FakeProvisioner.new
90
+ expect(@action).should_not_receive(:handle_shell_meta_args)
91
+ expect(env[:provisioner]).to receive(:provision)
92
+
93
+ @action.run_provisioner(env)
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,202 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ include VagrantPlugins::Openstack::Action
4
+ include VagrantPlugins::Openstack::HttpUtils
5
+ include VagrantPlugins::Openstack::Domain
6
+
7
+ describe VagrantPlugins::Openstack::Action::ReadSSHInfo do
8
+ let(:config) do
9
+ double('config').tap do |config|
10
+ config.stub(:openstack_auth_url) { 'http://keystoneAuthV2' }
11
+ config.stub(:openstack_compute_url) { nil }
12
+ config.stub(:openstack_network_url) { nil }
13
+ config.stub(:tenant_name) { 'testTenant' }
14
+ config.stub(:username) { 'username' }
15
+ config.stub(:password) { 'password' }
16
+ config.stub(:ssh_username) { 'test_username' }
17
+ config.stub(:floating_ip) { nil }
18
+ config.stub(:floating_ip_pool) { nil }
19
+ config.stub(:keypair_name) { nil }
20
+ config.stub(:public_key_path) { nil }
21
+ config.stub(:ssh_disabled) { false }
22
+ config.stub(:ip_version) { nil }
23
+ end
24
+ end
25
+
26
+ let(:nova) do
27
+ double('nova').tap do |nova|
28
+ nova.stub(:get_server_details).with(env, '1234') do
29
+ {
30
+ 'addresses' => {
31
+ 'net' => [
32
+ {
33
+ 'addr' => '80.80.80.80',
34
+ 'OS-EXT-IPS:type' => 'floating'
35
+ }
36
+ ]
37
+ }
38
+ }
39
+ end
40
+ end
41
+ end
42
+
43
+ let(:ssh_config) do
44
+ double('ssh_config').tap do |config|
45
+ config.stub(:username) { 'sshuser' }
46
+ config.stub(:port) { nil }
47
+ config.stub(:insert_key) { true }
48
+ end
49
+ end
50
+
51
+ let(:machine_config) do
52
+ double('machine_config').tap do |config|
53
+ config.stub(:ssh) { ssh_config }
54
+ end
55
+ end
56
+
57
+ let(:env) do
58
+ {}.tap do |env|
59
+ env[:ui] = double('ui')
60
+ env[:ui].stub(:info).with(anything)
61
+ env[:machine] = double('machine')
62
+ env[:machine].stub(:provider_config) { config }
63
+ env[:machine].stub(:config) { machine_config }
64
+ env[:machine].stub(:id) { '1234' }
65
+ env[:machine].stub(:data_dir) { '/data/dir' }
66
+ env[:openstack_client] = double('openstack_client')
67
+ env[:openstack_client].stub(:neutron) { neutron }
68
+ env[:openstack_client].stub(:nova) { nova }
69
+ end
70
+ end
71
+
72
+ let(:app) do
73
+ double('app').tap do |app|
74
+ app.stub(:call).with(anything)
75
+ end
76
+ end
77
+
78
+ before :each do
79
+ ReadSSHInfo.send(:public, *ReadSSHInfo.private_instance_methods)
80
+ @action = ReadSSHInfo.new(app, env)
81
+ end
82
+
83
+ describe 'call' do
84
+ context 'when called three times' do
85
+ it 'read ssh info only once' do
86
+ config.stub(:keypair_name) { 'my_keypair' }
87
+ @action.stub(:read_ssh_info) { { host: '', port: '', username: '' } }
88
+ expect(@action).to receive(:read_ssh_info).exactly(1).times
89
+ expect(app).to receive(:call)
90
+ (1..3).each { @action.call(env) }
91
+ end
92
+ end
93
+ end
94
+
95
+ describe 'read_ssh_info' do
96
+ context 'with deprecated ssh_username specified' do
97
+ context 'with ssh.username specified' do
98
+ it 'returns ssh.username' do
99
+ ssh_config.stub(:username) { 'sshuser' }
100
+ config.stub(:ssh_username) { 'test_username' }
101
+ config.stub(:floating_ip) { '80.80.80.80' }
102
+ config.stub(:keypair_name) { 'my_keypair' }
103
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
104
+ end
105
+ end
106
+ context 'without ssh.username specified' do
107
+ it 'returns ssh.username' do
108
+ ssh_config.stub(:username) { nil }
109
+ config.stub(:ssh_username) { 'test_username' }
110
+ config.stub(:floating_ip) { '80.80.80.80' }
111
+ config.stub(:keypair_name) { 'my_keypair' }
112
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'test_username', log_level: 'ERROR')
113
+ end
114
+ end
115
+ end
116
+
117
+ context 'with ssh.port overriden' do
118
+ it 'returns ssh.port' do
119
+ ssh_config.stub(:port) { 33 }
120
+ config.stub(:floating_ip) { '80.80.80.80' }
121
+ config.stub(:keypair_name) { 'my_keypair' }
122
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 33, username: 'sshuser', log_level: 'ERROR')
123
+ end
124
+ end
125
+
126
+ context 'with config.floating_ip specified' do
127
+ context 'with keypair_name specified' do
128
+ it 'returns the specified floating ip' do
129
+ config.stub(:floating_ip) { '80.80.80.80' }
130
+ config.stub(:keypair_name) { 'my_keypair' }
131
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
132
+ end
133
+ end
134
+
135
+ context 'with public_key_path specified' do
136
+ it 'returns the specified floating ip' do
137
+ config.stub(:floating_ip) { '80.80.80.80' }
138
+ config.stub(:keypair_name) { nil }
139
+ config.stub(:public_key_path) { '/public/key/path' }
140
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
141
+ end
142
+ end
143
+
144
+ context 'with neither keypair_name nor public_key_path specified' do
145
+ it 'returns the specified floating ip ' do
146
+ config.stub(:floating_ip) { '80.80.80.80' }
147
+ config.stub(:keypair_name) { nil }
148
+ config.stub(:public_key_path) { nil }
149
+ nova.stub(:get_server_details) do
150
+ {
151
+ 'key_name' => 'my_keypair_name',
152
+ 'addresses' => {
153
+ 'net' => [
154
+ {
155
+ 'addr' => '80.80.80.80',
156
+ 'OS-EXT-IPS:type' => 'floating'
157
+ }
158
+ ]
159
+ }
160
+ }
161
+ end
162
+ expect(nova).to receive(:get_server_details).with(env, '1234')
163
+ @action.read_ssh_info(env).should eq(
164
+ host: '80.80.80.80',
165
+ port: 22,
166
+ username: 'sshuser',
167
+ private_key_path: '/data/dir/my_keypair_name',
168
+ log_level: 'ERROR')
169
+ end
170
+ end
171
+
172
+ context 'with neither keypair_name nor public_key_path specified and ssh.insert_key is false' do
173
+ it 'does not return private_key_path' do
174
+ ssh_config.stub(:insert_key) { false }
175
+ config.stub(:floating_ip) { '80.80.80.80' }
176
+ config.stub(:keypair_name) { nil }
177
+ config.stub(:public_key_path) { nil }
178
+ @action.read_ssh_info(env).should eq(host: '80.80.80.80', port: 22, username: 'sshuser', log_level: 'ERROR')
179
+ end
180
+ end
181
+ end
182
+
183
+ context 'without config.floating_ip specified' do
184
+ it 'return the a floating_ip found by querying server details' do
185
+ nova.stub(:get_server_details).with(env, '1234') do
186
+ {
187
+ 'addresses' => {
188
+ 'toto' => [{
189
+ 'addr' => '13.13.13.13'
190
+ }, {
191
+ 'addr' => '12.12.12.12',
192
+ 'OS-EXT-IPS:type' => 'floating'
193
+ }]
194
+ }
195
+ }
196
+ end
197
+ config.stub(:keypair_name) { 'my_keypair' }
198
+ @action.read_ssh_info(env).should eq(host: '12.12.12.12', port: 22, username: 'sshuser', log_level: 'ERROR')
199
+ end
200
+ end
201
+ end
202
+ end
@@ -0,0 +1,81 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Action::ReadState do
4
+ let(:nova) do
5
+ double('nova')
6
+ end
7
+
8
+ let(:env) do
9
+ {}.tap do |env|
10
+ env[:ui] = double('ui').tap do |ui|
11
+ ui.stub(:info).with(anything)
12
+ ui.stub(:error).with(anything)
13
+ end
14
+ env[:openstack_client] = double('openstack_client').tap do |os|
15
+ os.stub(:nova) { nova }
16
+ end
17
+ env[:machine] = OpenStruct.new
18
+ end
19
+ end
20
+
21
+ let(:app) do
22
+ double('app').tap do |app|
23
+ app.stub(:call).with(anything)
24
+ end
25
+ end
26
+
27
+ describe 'call' do
28
+ context 'when server id is present' do
29
+ it 'set the state to the vm_state returned by nova' do
30
+ env[:machine].id = 'server_id'
31
+ nova.stub(:get_server_details).and_return('status' => 'ACTIVE')
32
+
33
+ expect(nova).to receive(:get_server_details).with(env, 'server_id')
34
+ expect(app).to receive(:call)
35
+
36
+ @action = ReadState.new(app, nil)
37
+ @action.call(env)
38
+
39
+ expect(env[:machine_state_id]).to eq(:active)
40
+ end
41
+ it 'set the state to the task_state returned by nova extension' do
42
+ env[:machine].id = 'server_id'
43
+ nova.stub(:get_server_details).and_return('OS-EXT-STS:task_state' => 'SUSPENDING')
44
+
45
+ expect(nova).to receive(:get_server_details).with(env, 'server_id')
46
+ expect(app).to receive(:call)
47
+
48
+ @action = ReadState.new(app, nil)
49
+ @action.call(env)
50
+
51
+ expect(env[:machine_state_id]).to eq(:suspending)
52
+ end
53
+ end
54
+ context 'when server id is not present' do
55
+ it 'set the state to :not_created' do
56
+ env[:machine].id = nil
57
+ expect(nova).to_not receive(:get_server_details)
58
+ expect(app).to receive(:call)
59
+
60
+ @action = ReadState.new(app, nil)
61
+ @action.call(env)
62
+
63
+ expect(env[:machine_state_id]).to eq(:not_created)
64
+ end
65
+ end
66
+ context 'when server cannot be found' do
67
+ it 'set the state to :not_created' do
68
+ env[:machine].id = 'server_id'
69
+ nova.stub(:get_server_details).and_return(nil)
70
+
71
+ expect(nova).to receive(:get_server_details).with(env, 'server_id')
72
+ expect(app).to receive(:call)
73
+
74
+ @action = ReadState.new(app, nil)
75
+ @action.call(env)
76
+
77
+ expect(env[:machine_state_id]).to eq(:not_created)
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,49 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Action::Resume do
4
+ let(:nova) do
5
+ double('nova').tap do |nova|
6
+ nova.stub(:resume_server)
7
+ end
8
+ end
9
+
10
+ let(:env) do
11
+ {}.tap do |env|
12
+ env[:ui] = double('ui').tap do |ui|
13
+ ui.stub(:info).with(anything)
14
+ ui.stub(:error).with(anything)
15
+ end
16
+ env[:openstack_client] = double('openstack_client').tap do |os|
17
+ os.stub(:nova) { nova }
18
+ end
19
+ env[:machine] = OpenStruct.new
20
+ end
21
+ end
22
+
23
+ let(:app) do
24
+ double('app').tap do |app|
25
+ app.stub(:call).with(anything)
26
+ end
27
+ end
28
+
29
+ describe 'call' do
30
+ context 'when server id is present' do
31
+ it 'starts the server' do
32
+ env[:machine].id = 'server_id'
33
+ expect(nova).to receive(:resume_server).with(env, 'server_id')
34
+ expect(app).to receive(:call)
35
+ @action = Resume.new(app, nil)
36
+ @action.call(env)
37
+ end
38
+ end
39
+ context 'when server id is not present' do
40
+ it 'does nothing' do
41
+ env[:machine].id = nil
42
+ expect(nova).to_not receive(:resume_server)
43
+ expect(app).to receive(:call)
44
+ @action = Resume.new(app, nil)
45
+ @action.call(env)
46
+ end
47
+ end
48
+ end
49
+ end