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,176 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ include VagrantPlugins::Openstack
4
+
5
+ describe VagrantPlugins::Openstack::HttpUtils do
6
+ let(:keystone) do
7
+ double('keystone').tap do |keystone|
8
+ keystone.stub(:authenticate).with(anything)
9
+ end
10
+ end
11
+
12
+ let(:env) do
13
+ {}.tap do |env|
14
+ env[:ui] = double('ui')
15
+ env[:ui].stub(:warn).with(anything)
16
+ env[:openstack_client] = double('openstack_client')
17
+ env[:openstack_client].stub(:keystone) { keystone }
18
+ end
19
+ end
20
+
21
+ class TestUtils
22
+ include VagrantPlugins::Openstack::HttpUtils
23
+ include VagrantPlugins::Openstack::Errors
24
+
25
+ attr_writer :logger
26
+
27
+ def target(env)
28
+ authenticated(env) do
29
+ env[:target].call
30
+ end
31
+ end
32
+ end
33
+
34
+ def error
35
+ fail Errors::AuthenticationRequired
36
+ end
37
+
38
+ describe 'authenticated' do
39
+ before :each do
40
+ TestUtils.send(:public, *TestUtils.private_instance_methods)
41
+ @utils = TestUtils.new
42
+ @utils.logger = double.tap do |logger|
43
+ logger.stub(:debug)
44
+ logger.stub(:info)
45
+ end
46
+ end
47
+
48
+ context 'with two authentication errors' do
49
+ it 'should retry two times and success' do
50
+ env[:target] = double.tap do |stub|
51
+ nb_calls = 0
52
+ stub.stub(:call) do
53
+ nb_calls += 1
54
+ fail Errors::AuthenticationRequired if nb_calls < 3
55
+ end.and_return('object response')
56
+ end
57
+ env[:target].should_receive(:call).exactly(3).times
58
+
59
+ response = @utils.target(env)
60
+
61
+ expect(response).to eq('object response')
62
+ end
63
+ end
64
+
65
+ context 'with three authentication errors' do
66
+ it 'should retry two times and fail' do
67
+ env[:target] = double.tap do |stub|
68
+ stub.stub(:call) do
69
+ fail Errors::AuthenticationRequired
70
+ end
71
+ end
72
+ env[:target].should_receive(:call).exactly(3).times
73
+
74
+ expect { @utils.target(env) }.to raise_error Errors::AuthenticationRequired
75
+ end
76
+ end
77
+ end
78
+
79
+ describe 'handle_response' do
80
+ before :each do
81
+ TestUtils.send(:public, *TestUtils.private_instance_methods)
82
+ @utils = TestUtils.new
83
+ @utils.logger = double.tap do |logger|
84
+ logger.stub(:debug)
85
+ logger.stub(:info)
86
+ end
87
+ end
88
+
89
+ [200, 201, 202, 204].each do |code|
90
+ context "response code is #{code}" do
91
+ it 'should return the response' do
92
+ mock_resp = double.tap do |mock|
93
+ mock.stub(:code).and_return(code)
94
+ mock.stub(:headers)
95
+ end
96
+ resp = @utils.handle_response(mock_resp)
97
+ expect(resp.code).to eq(code)
98
+ end
99
+ end
100
+ end
101
+
102
+ context 'response code is 401' do
103
+ it 'should return raise a AuthenticationRequired error' do
104
+ mock_resp = double.tap do |mock|
105
+ mock.stub(:code).and_return(401)
106
+ mock.stub(:headers)
107
+ end
108
+ expect { @utils.handle_response(mock_resp) }.to raise_error Errors::AuthenticationRequired
109
+ end
110
+ end
111
+
112
+ context 'response code is 400' do
113
+ it 'should return raise a VagrantOpenstackError with bad request message' do
114
+ mock_resp = double.tap do |mock|
115
+ mock.stub(:code).and_return(400)
116
+ mock.stub(:headers)
117
+ mock.stub(:to_s).and_return('{ "badRequest": { "message": "Error... Bad request" } }')
118
+ end
119
+ begin
120
+ @utils.handle_response(mock_resp)
121
+ fail
122
+ rescue Errors::VagrantOpenstackError => e
123
+ expect(e.message).to eq('Error... Bad request')
124
+ end
125
+ end
126
+ end
127
+
128
+ context 'response code is 404' do
129
+ it 'should raise a VagrantOpenstackError with conflict message' do
130
+ mock_resp = double.tap do |mock|
131
+ mock.stub(:code).and_return(404)
132
+ mock.stub(:headers)
133
+ mock.stub(:to_s).and_return('{ "itemNotFound": { "message": "Error... Not found" } }')
134
+ end
135
+ begin
136
+ @utils.handle_response(mock_resp)
137
+ fail
138
+ rescue Errors::VagrantOpenstackError => e
139
+ expect(e.message).to eq('Error... Not found')
140
+ end
141
+ end
142
+ end
143
+
144
+ context 'response code is 409' do
145
+ it 'should return raise a VagrantOpenstackError with conflict message' do
146
+ mock_resp = double.tap do |mock|
147
+ mock.stub(:code).and_return(409)
148
+ mock.stub(:headers)
149
+ mock.stub(:to_s).and_return('{ "conflictingRequest": { "message": "Error... Conflict" } }')
150
+ end
151
+ begin
152
+ @utils.handle_response(mock_resp)
153
+ fail
154
+ rescue Errors::VagrantOpenstackError => e
155
+ expect(e.message).to eq('Error... Conflict')
156
+ end
157
+ end
158
+ end
159
+
160
+ context 'response code is 500' do
161
+ it 'should return raise a VagrantOpenstackError error with error message' do
162
+ mock_resp = double.tap do |mock|
163
+ mock.stub(:code).and_return(500)
164
+ mock.stub(:headers)
165
+ mock.stub(:to_s).and_return('Internal server error')
166
+ end
167
+ begin
168
+ @utils.handle_response(mock_resp)
169
+ fail
170
+ rescue Errors::VagrantOpenstackError => e
171
+ expect(e.message).to eq('Internal server error')
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,43 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Command::FlavorList do
4
+ describe 'cmd' do
5
+ let(:nova) do
6
+ double('nova').tap do |nova|
7
+ nova.stub(:get_all_flavors) do
8
+ [
9
+ Flavor.new('001', 'small', '1', '1024', '10'),
10
+ Flavor.new('002', 'large', '4', '4096', '100')
11
+ ]
12
+ end
13
+ end
14
+ end
15
+
16
+ let(:env) do
17
+ {}.tap do |env|
18
+ env[:ui] = double('ui')
19
+ env[:ui].stub(:info).with(anything)
20
+ env[:openstack_client] = double
21
+ env[:openstack_client].stub(:nova) { nova }
22
+ end
23
+ end
24
+
25
+ before :each do
26
+ @flavor_list_cmd = VagrantPlugins::Openstack::Command::FlavorList.new(nil, env)
27
+ end
28
+
29
+ it 'prints flovor list from server' do
30
+ nova.should_receive(:get_all_flavors).with(env)
31
+
32
+ expect(env[:ui]).to receive(:info).with('
33
+ +-----+-------+------+----------+----------------+
34
+ | ID | Name | vCPU | RAM (Mo) | Disk size (Go) |
35
+ +-----+-------+------+----------+----------------+
36
+ | 001 | small | 1 | 1024 | 10 |
37
+ | 002 | large | 4 | 4096 | 100 |
38
+ +-----+-------+------+----------+----------------+')
39
+
40
+ @flavor_list_cmd.cmd('flavor-list', [], env)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,74 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Command::FloatingIpList do
4
+ describe 'cmd' do
5
+ let(:nova) do
6
+ double('nova').tap do |nova|
7
+ nova.stub(:get_floating_ip_pools) do
8
+ [
9
+ {
10
+ 'name' => 'pool1'
11
+ },
12
+ {
13
+ 'name' => 'pool2'
14
+ }
15
+ ]
16
+ end
17
+ nova.stub(:get_floating_ips) do
18
+ [
19
+ {
20
+ 'fixed_ip' => nil,
21
+ 'id' => 1,
22
+ 'instance_id' => nil,
23
+ 'ip' => '10.10.10.1',
24
+ 'pool' => 'pool1'
25
+ },
26
+ {
27
+ 'fixed_ip' => nil,
28
+ 'id' => 2,
29
+ 'instance_id' => 'inst001',
30
+ 'ip' => '10.10.10.2',
31
+ 'pool' => 'pool2'
32
+ }
33
+ ]
34
+ end
35
+ end
36
+ end
37
+
38
+ let(:env) do
39
+ {}.tap do |env|
40
+ env[:ui] = double('ui')
41
+ env[:ui].stub(:info).with(anything)
42
+ env[:openstack_client] = double
43
+ env[:openstack_client].stub(:nova) { nova }
44
+ end
45
+ end
46
+
47
+ before :each do
48
+ @floating_ip_list_cmd = VagrantPlugins::Openstack::Command::FloatingIpList.new(nil, env)
49
+ end
50
+
51
+ it 'prints floating ip and floating ip pool from server' do
52
+ nova.should_receive(:get_floating_ip_pools).with(env)
53
+ nova.should_receive(:get_floating_ips).with(env)
54
+
55
+ expect(env[:ui]).to receive(:info).with('
56
+ +-------------------+
57
+ | Floating IP pools |
58
+ +-------------------+
59
+ | pool1 |
60
+ | pool2 |
61
+ +-------------------+').ordered
62
+
63
+ expect(env[:ui]).to receive(:info).with('
64
+ +----+------------+-------+-------------+
65
+ | ID | IP | Pool | Instance ID |
66
+ +----+------------+-------+-------------+
67
+ | 1 | 10.10.10.1 | pool1 | |
68
+ | 2 | 10.10.10.2 | pool2 | inst001 |
69
+ +----+------------+-------+-------------+').ordered
70
+
71
+ @floating_ip_list_cmd.cmd('floatingip-list', [], env)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,95 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Command::ImageList do
4
+ let(:nova) do
5
+ double('nova').tap do |nova|
6
+ nova.stub(:get_all_images) do
7
+ [
8
+ Image.new('0001', 'ubuntu'),
9
+ Image.new('0002', 'centos'),
10
+ Image.new('0003', 'debian')
11
+ ]
12
+ end
13
+ end
14
+ end
15
+
16
+ let(:glance) do
17
+ double('nova').tap do |nova|
18
+ nova.stub(:get_all_images) do
19
+ [
20
+ Image.new('0001', 'ubuntu', 'public', 700 * 1024 * 1024, 1, 10),
21
+ Image.new('0002', 'centos', 'private', 800 * 1024 * 1024, 2, 20),
22
+ Image.new('0003', 'debian', 'shared', 900 * 1024 * 1024, 4, 30)
23
+ ]
24
+ end
25
+ end
26
+ end
27
+
28
+ let(:env) do
29
+ {}.tap do |env|
30
+ env[:ui] = double('ui')
31
+ env[:ui].stub(:info).with(anything)
32
+ env[:openstack_client] = double
33
+ env[:openstack_client].stub(:nova) { nova }
34
+ env[:openstack_client].stub(:glance) { glance }
35
+ end
36
+ end
37
+
38
+ before :each do
39
+ @image_list_cmd = VagrantPlugins::Openstack::Command::ImageList.new(['--'], env)
40
+ end
41
+
42
+ describe 'cmd' do
43
+ context 'when glance is not available' do
44
+ let(:session) do
45
+ double('session').tap do |s|
46
+ s.stub(:endpoints) { {} }
47
+ end
48
+ end
49
+
50
+ it 'prints image list with only the id and the name' do
51
+ env[:openstack_client].stub(:session) { session }
52
+ allow(@image_list_cmd).to receive(:with_target_vms).and_return(nil)
53
+ nova.should_receive(:get_all_images).with(env)
54
+
55
+ expect(env[:ui]).to receive(:info).with('
56
+ +------+--------+
57
+ | ID | Name |
58
+ +------+--------+
59
+ | 0001 | ubuntu |
60
+ | 0002 | centos |
61
+ | 0003 | debian |
62
+ +------+--------+')
63
+ @image_list_cmd.cmd('image-list', [], env)
64
+ end
65
+ end
66
+
67
+ context 'when glance is available' do
68
+ let(:session) do
69
+ double('session').tap do |s|
70
+ s.stub(:endpoints) do
71
+ {
72
+ image: 'http://glance'
73
+ }
74
+ end
75
+ end
76
+ end
77
+
78
+ it 'prints image list with id, name and details' do
79
+ env[:openstack_client].stub(:session) { session }
80
+ allow(@image_list_cmd).to receive(:with_target_vms).and_return(nil)
81
+ glance.should_receive(:get_all_images).with(env)
82
+
83
+ expect(env[:ui]).to receive(:info).with('
84
+ +------+--------+------------+-----------+--------------+---------------+
85
+ | ID | Name | Visibility | Size (Mo) | Min RAM (Go) | Min Disk (Go) |
86
+ +------+--------+------------+-----------+--------------+---------------+
87
+ | 0001 | ubuntu | public | 700 | 1 | 10 |
88
+ | 0002 | centos | private | 800 | 2 | 20 |
89
+ | 0003 | debian | shared | 900 | 4 | 30 |
90
+ +------+--------+------------+-----------+--------------+---------------+')
91
+ @image_list_cmd.cmd('image-list', [], env)
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,65 @@
1
+ require 'vagrant-openstack-illuin-provider/spec_helper'
2
+
3
+ describe VagrantPlugins::Openstack::Command::NetworkList do
4
+ describe 'cmd' do
5
+ let(:neutron) do
6
+ double('neutron').tap do |neutron|
7
+ neutron.stub(:get_private_networks) do
8
+ [
9
+ Item.new('net-01', 'internal'),
10
+ Item.new('net-02', 'external')
11
+ ]
12
+ end
13
+ neutron.stub(:get_all_networks) do
14
+ [
15
+ Item.new('pub-01', 'public'),
16
+ Item.new('net-01', 'internal'),
17
+ Item.new('net-02', 'external')
18
+ ]
19
+ end
20
+ end
21
+ end
22
+
23
+ let(:env) do
24
+ {}.tap do |env|
25
+ env[:ui] = double('ui')
26
+ env[:ui].stub(:info).with(anything)
27
+ env[:openstack_client] = double
28
+ env[:openstack_client].stub(:neutron) { neutron }
29
+ end
30
+ end
31
+
32
+ before :each do
33
+ @network_list_cmd = VagrantPlugins::Openstack::Command::NetworkList.new(nil, env)
34
+ end
35
+
36
+ it 'prints network list from server' do
37
+ neutron.should_receive(:get_private_networks).with(env)
38
+
39
+ expect(env[:ui]).to receive(:info).with('
40
+ +--------+----------+
41
+ | ID | Name |
42
+ +--------+----------+
43
+ | net-01 | internal |
44
+ | net-02 | external |
45
+ +--------+----------+')
46
+
47
+ @network_list_cmd.cmd('network-list', [], env)
48
+ end
49
+
50
+ it 'prints all networks list from server' do
51
+ neutron.should_receive(:get_all_networks).with(env)
52
+
53
+ expect(env[:ui]).to receive(:info).with('
54
+ +--------+----------+
55
+ | ID | Name |
56
+ +--------+----------+
57
+ | pub-01 | public |
58
+ | net-01 | internal |
59
+ | net-02 | external |
60
+ +--------+----------+')
61
+
62
+ @network_list_cmd.cmd('network-list', ['all'], env)
63
+ end
64
+ end
65
+ end