vagrant-openstack-illuin-provider 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
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