torpedo 1.0.19 → 2.1.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.
@@ -1,35 +1,35 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  module Torpedo
4
- module Compute
5
- class Images < Test::Unit::TestCase
4
+ module Compute
5
+ class Images < Test::Unit::TestCase
6
6
 
7
- def setup
8
- @conn=Helper::get_connection
9
- @image_id = Helper::get_image_ref(@conn)
10
- end
7
+ def setup
8
+ @conn=Helper::get_connection
9
+ @image_id = Helper::get_image_ref(@conn)
10
+ end
11
11
 
12
- def test_list
12
+ def test_list
13
13
 
14
- @conn.images.each do |image|
15
- assert_not_nil(image[:id])
16
- assert_not_nil(image[:name])
17
- assert_not_nil(image[:status])
18
- end
14
+ @conn.images.each do |image|
15
+ assert_not_nil(image.id)
16
+ assert_not_nil(image.name)
17
+ assert_not_nil(image.status)
18
+ end
19
19
 
20
- end
20
+ end
21
21
 
22
- def test_get
22
+ def test_get
23
23
 
24
- image=@conn.image(@image_id)
25
- assert_equal(@image_id, image.id.to_s)
26
- assert_not_nil(image.name)
27
- assert_not_nil(image.updated)
28
- assert_not_nil(image.created)
29
- assert_not_nil(image.status)
24
+ image=@conn.images.get(@image_id)
25
+ assert_equal(@image_id, image.id.to_s)
26
+ assert_not_nil(image.name)
27
+ assert_not_nil(image.updated_at)
28
+ assert_not_nil(image.created_at)
29
+ assert_not_nil(image.status)
30
30
 
31
- end
31
+ end
32
32
 
33
- end
34
- end
33
+ end
34
+ end
35
35
  end
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ module Torpedo
4
+ module Compute
5
+ class Keypairs < Test::Unit::TestCase
6
+
7
+ @@key_pairs = []
8
+ @@key_pair = nil #ref to last created key_pair
9
+ @@key_pair_name = 'torpedo' #ref to last created key_pair
10
+
11
+ # public access to the key_pair ref
12
+ def self.key_pair
13
+ @@key_pair
14
+ end
15
+
16
+ def setup
17
+ @conn=Helper::get_connection
18
+ end
19
+
20
+ def create_key_pair(options)
21
+ @@key_pair = @conn.key_pairs.create(options)
22
+ @@key_pairs << @@key_pair
23
+ @@key_pair
24
+ end
25
+
26
+ def test_001_create_key_pair
27
+ public_key = IO.read(SSH_PUBLIC_KEY)
28
+ options = {:public_key => public_key, :name => @@key_pair_name}
29
+ key_pair = create_key_pair(options)
30
+ assert_equal(@@key_pair_name, key_pair.name)
31
+ assert_equal(public_key, key_pair.public_key)
32
+ end
33
+
34
+ end
35
+ end
36
+ end
@@ -1,19 +1,24 @@
1
1
  require File.dirname(__FILE__) + '/helper'
2
2
 
3
3
  module Torpedo
4
- module Compute
5
- class Limits < Test::Unit::TestCase
4
+ module Compute
6
5
 
7
- def setup
8
- @conn=Helper::get_connection
9
- end
6
+ class Limits < Test::Unit::TestCase
10
7
 
11
- def test_list
8
+ def setup
9
+ @conn=Helper::get_connection
10
+ end
12
11
 
13
- assert_not_nil @conn.limits
12
+ def test_list
14
13
 
15
- end
14
+ limits = @conn.get_limits.body['limits']
15
+ assert_not_nil limits
16
+ assert_not_nil limits['rate']
17
+ assert_not_nil limits['absolute']
16
18
 
17
- end if TEST_LIMITS
18
- end
19
+ end if TEST_LIMITS
20
+
21
+ end
22
+
23
+ end
19
24
  end
@@ -1,492 +1,568 @@
1
1
  require 'torpedo/compute/helper'
2
+ require 'torpedo/compute/keypairs'
3
+ require 'torpedo/volume/helper'
4
+ require 'torpedo/net_util'
2
5
  require 'tempfile'
3
- require 'net/ssh'
4
6
 
5
7
  module Torpedo
6
- module Compute
7
- class Servers < Test::Unit::TestCase
8
-
9
- @@servers = []
10
- @@images = []
11
- @@image_ref = nil
12
- @@flavor_ref = nil
13
- @@flavor_ref_resize = nil
14
- @@server = nil #ref to last created server
15
- @@hostname = "torpedo"
16
- @@host_id = nil
17
-
18
- def setup
19
- @conn=Helper::get_connection
20
- end
21
-
22
- def create_server(server_opts)
23
- @@server = @conn.create_server(server_opts)
24
- @@servers << @@server
25
- @@admin_pass = @@server.adminPass #original admin_pass
26
- @@server
27
- end
28
-
29
- def create_image(server, image_opts)
30
- image = server.create_image(image_opts)
31
- @@images << image
32
- @@image_ref = image.id
33
- image
34
- end
8
+ module Compute
9
+ class Servers < Test::Unit::TestCase
10
+
11
+ @@servers = []
12
+ @@images = []
13
+ @@image_ref = nil
14
+ @@flavor_ref = nil
15
+ @@flavor_ref_resize = nil
16
+ @@server = nil #ref to last created server
17
+ @@hostname = "torpedo"
18
+ @@host_id = nil
19
+
20
+ # public access to the server ref
21
+ def self.server
22
+ @@server
23
+ end
35
24
 
36
- def get_personalities
37
- if TEST_ADMIN_PASSWORD then
38
- tmp_file=Tempfile.new "server_tests"
39
- tmp_file.write("yo")
40
- tmp_file.flush
41
- {tmp_file.path => "/tmp/foo/bar"}
42
- else
43
- # NOTE: if admin_pass is disabled we inject the public key so we still
44
- # can still login. This would only matter if KEYPAIR was disabled as well.
45
- {SSH_PUBLIC_KEY => "/root/.ssh/authorized_keys"}
46
- end
47
- end
25
+ # public access to the image ref
26
+ def self.image_ref
27
+ @@image_ref
28
+ end
48
29
 
49
- def ssh_test(ip_addr, test_cmd="hostname", test_output=@@hostname, admin_pass=@@admin_pass)
30
+ # public access to the flavor ref
31
+ def self.flavor_ref
32
+ @@flavor_ref
33
+ end
50
34
 
51
- ssh_opts = {:paranoid => false}
52
- if TEST_ADMIN_PASSWORD then
53
- ssh_opts.store(:password, admin_pass)
54
- else
55
- ssh_identity=SSH_PRIVATE_KEY
56
- if KEYPAIR and not KEYPAIR.empty? then
57
- ssh_identity=KEYPAIR
35
+ def setup
36
+ @conn=Helper::get_connection
37
+ if VOLUME_ENABLED then
38
+ @volume_conn=Torpedo::Volume::Helper::get_connection
39
+ end
58
40
  end
59
- ssh_opts.store(:keys, ssh_identity)
60
- end
61
41
 
62
- begin
63
- Timeout::timeout(SSH_TIMEOUT) do
64
- while(1) do
65
- begin
66
- Net::SSH.start(ip_addr, 'root', ssh_opts) do |ssh|
67
- return ssh.exec!(test_cmd) == test_output
42
+ def create_server(options)
43
+ if ORCHESTRATION_ENABLED then
44
+ #if heat is enabled we re-use the server from the stack
45
+ @conn.servers.each do |server|
46
+ if server.name == 'torpedo'
47
+ @@server = @conn.servers.get(server.id)
68
48
  end
69
- rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNRESET, Net::SSH::Exception
70
- next
49
+ #NOTE: When using Heat we use keypairs... so just stub this out
50
+ @@admin_pass = 'Not Available'
71
51
  end
52
+ else
53
+ @@server = @conn.servers.create(options)
54
+ @@servers << @@server
55
+ @@admin_pass = @@server.password #original admin_pass
56
+ assert_not_nil(@@admin_pass)
72
57
  end
58
+ @@server
73
59
  end
74
- rescue Timeout::Error => te
75
- fail("Timeout trying to ssh to server: #{ip_addr}")
76
- end
77
60
 
78
- return false
61
+ def create_image(server, name, metadata)
62
+ image_raw = @conn.create_image(server.id, name, metadata).body['image']
63
+ image_raw[:service] = @conn
64
+ image = Fog::Compute::OpenStack::Image.new(image_raw)
65
+ @@images << image
66
+ @@image_ref = image_raw['id']
67
+ image
68
+ end
79
69
 
80
- end
70
+ def get_personalities
71
+ if TEST_ADMIN_PASSWORD or Keypairs.key_pair then
72
+ [{'contents' => 'yo', 'path' => '/tmp/foo.bar'}]
73
+ else
74
+ # NOTE: if admin_pass and keypairs are disabled we inject the public
75
+ # key so we can still login.
76
+ [{'contents' => IO.read(SSH_PUBLIC_KEY), 'path' => '/root/.ssh/authorized_keys'}]
77
+ end
78
+ end
81
79
 
82
- def ping_test(ip_addr)
83
- begin
84
- ping = TEST_IP_TYPE == 6 ? 'ping6' : 'ping'
85
- ping_command = "#{ping} -c 1 #{ip_addr} > /dev/null 2>&1"
86
- Timeout::timeout(PING_TIMEOUT) do
87
- while(1) do
88
- return true if system(ping_command)
80
+ def find_ip(server)
81
+ # lookup the first public IP address and use that for verification
82
+ if server.addresses[NETWORK_LABEL].nil?
83
+ fail("No address found for network label #{NETWORK_LABEL}. Addresses: #{server.addresses}")
84
+ end
85
+ addresses = server.addresses[NETWORK_LABEL].select {|a| a['version'] == TEST_IP_TYPE}
86
+ address = addresses[0]['addr']
87
+ if address.nil? or address.empty? then
88
+ fail("No address found for network label #{NETWORK_LABEL}. Addresses: #{server.addresses}")
89
89
  end
90
+ address
90
91
  end
91
- rescue Timeout::Error => te
92
- fail("Timeout pinging server: #{ping_command}")
93
- end
94
92
 
95
- return false
93
+ def check_server(server, image_ref, flavor_ref, check_status="ACTIVE")
96
94
 
97
- end
95
+ server_flavor = server.flavor_ref || server.flavor['id']
96
+ server_image = server.image_ref || server.image['id']
97
+
98
+ assert_equal(flavor_ref, server_flavor)
99
+ assert_equal(image_ref.to_s, server_image)
100
+ assert_equal(@@hostname, server.name)
101
+ server = @conn.servers.get(server.id)
98
102
 
99
- def check_server(server, image_ref, flavor_ref, check_status="ACTIVE")
103
+ begin
104
+ timeout(SERVER_BUILD_TIMEOUT) do
105
+ until server.state == check_status do
106
+ if server.state == "ERROR" then
107
+ fail('Server ERROR state detected when booting server!')
108
+ end
109
+ server = @conn.servers.get(server.id)
110
+ sleep 1
111
+ end
112
+ end
113
+ rescue Timeout::Error => te
114
+ fail('Timeout creating server.')
115
+ end
100
116
 
101
- assert_not_nil(server.hostId)
102
- assert_equal(flavor_ref, server.flavor['id'])
103
- assert_equal(image_ref.to_s, server.image['id'])
104
- assert_equal(@@hostname, server.name)
105
- server = @conn.server(server.id)
117
+ assert_not_nil(server.host_id)
106
118
 
107
- begin
108
- timeout(SERVER_BUILD_TIMEOUT) do
109
- until server.status == check_status do
110
- if server.status == "ERROR" then
111
- fail('Server ERROR state detected when booting server!')
119
+ address = find_ip(server)
120
+ Torpedo::NetUtil.ping_test(address, NETWORK_NAMESPACE) if TEST_PING
121
+ if TEST_SSH
122
+ if TEST_ADMIN_PASSWORD or Keypairs.key_pair then
123
+ Torpedo::NetUtil.ssh_test(address, NETWORK_NAMESPACE, "cat /tmp/foo.bar", "yo", @@admin_pass)
124
+ else
125
+ Torpedo::NetUtil.ssh_test(address, NETWORK_NAMESPACE, "hostname", @@hostname, @@admin_pass)
112
126
  end
113
- server = @conn.server(server.id)
114
- sleep 1
115
127
  end
128
+
129
+ server
130
+
116
131
  end
117
- rescue Timeout::Error => te
118
- fail('Timeout creating server.')
119
- end
120
132
 
121
- # lookup the first public IP address and use that for verification
122
- addresses = server.addresses[NETWORK_LABEL.to_sym].select {|a| a.version == TEST_IP_TYPE}
123
- address = addresses[0].address
124
- ping_test(address) if TEST_PING
125
- if TEST_SSH
126
- if TEST_ADMIN_PASSWORD
127
- ssh_test(address, "cat /tmp/foo/bar", "yo")
128
- else
129
- ssh_test(address)
133
+ def test_000_setup
134
+ begin
135
+ @@image_ref = Helper::get_image_ref(Helper::get_connection)
136
+ rescue Exception => e
137
+ fail("Failed get image ref: #{e.message}")
138
+ end
139
+ begin
140
+ @@flavor_ref = Helper::get_flavor_ref(Helper::get_connection)
141
+ rescue Exception => e
142
+ fail("Failed get flavor ref: #{e.message}")
143
+ end
144
+ begin
145
+ @@flavor_ref_resize = Helper::get_flavor_ref_resize(@conn)
146
+ rescue Exception => e
147
+ fail("Failed get flavor ref resize: #{e.message}")
148
+ end
130
149
  end
131
- end
132
150
 
133
- server
151
+ def test_001_create_server
134
152
 
135
- end
153
+ metadata={ "key1" => "value1", "key2" => "value2" }
154
+ options = {:name => @@hostname, :image_ref => @@image_ref, :flavor_ref => @@flavor_ref, :personality => get_personalities, :metadata => metadata}
155
+ if Keypairs.key_pair then
156
+ options['key_name'] = Keypairs.key_pair.name
157
+ end
158
+ server = create_server(options)
136
159
 
137
- def test_000_setup
138
- begin
139
- @@image_ref = Helper::get_image_ref(Helper::get_connection)
140
- rescue Exception => e
141
- fail("Failed get image ref: #{e.message}")
142
- end
143
- begin
144
- @@flavor_ref = Helper::get_flavor_ref(Helper::get_connection)
145
- rescue Exception => e
146
- fail("Failed get flavor ref: #{e.message}")
147
- end
148
- begin
149
- @@flavor_ref_resize = Helper::get_flavor_ref_resize(@conn)
150
- rescue Exception => e
151
- fail("Failed get flavor ref resize: #{e.message}")
152
- end
153
- end
160
+ #boot a server and check it
161
+ check_server(server, @@image_ref, @@flavor_ref)
154
162
 
155
- def test_001_create_server
163
+ assert_equal "value1", @@server.metadata.get('key1').value
164
+ assert_equal "value2", @@server.metadata.get('key2').value
165
+ assert_equal 2, @@server.metadata.size
156
166
 
157
- metadata={ "key1" => "value1", "key2" => "value2" }
158
- options = {:name => @@hostname, :imageRef => @@image_ref, :flavorRef => @@flavor_ref, :personality => get_personalities, :metadata => metadata}
159
- if KEYNAME and not KEYNAME.empty? then
160
- options[:key_name] = KEYNAME
161
- end
162
- server = create_server(options)
163
- assert_not_nil(server.adminPass)
167
+ end
164
168
 
165
- #boot a server and check it
166
- check_server(server, @@image_ref, @@flavor_ref)
169
+ def test_002_delete_server_metadata_items
167
170
 
168
- assert_equal "value1", @@server.metadata['key1']
169
- assert_equal "value2", @@server.metadata['key2']
170
- assert_equal 2, @@server.metadata.size
171
+ @@metadata = Fog::Compute::OpenStack::Metadata.new({
172
+ :service => @conn,
173
+ :parent => @@server
174
+ })
175
+ assert_equal 2, @@metadata.size
171
176
 
172
- end
177
+ @@metadata.each do |meta|
178
+ assert meta.destroy
179
+ end
173
180
 
174
- def test_002_delete_server_metadata_items
181
+ #refresh the metadata
182
+ @@metadata = Fog::Compute::OpenStack::Metadata.new({
183
+ :service => @conn,
184
+ :parent => @@server
185
+ })
186
+ assert_equal 0, @@metadata.size
175
187
 
176
- metadata = @@server.metadata
177
- metadata.each_pair do |key, value|
178
- assert metadata.delete!(key)
179
- end
180
-
181
- metadata.refresh
188
+ end
182
189
 
183
- assert_equal 0, metadata.size
190
+ def test_003_update_one_server_metadata_item
184
191
 
185
- end
192
+ datum = Fog::Compute::OpenStack::Metadatum.new({
193
+ :service => @conn,
194
+ :parent => @@server
195
+ })
196
+ datum.key = 'foo0'
197
+ datum.value = 'bar0'
198
+ datum.save
186
199
 
187
- def test_003_update_one_server_metadata_item
200
+ #refresh the metadata
201
+ @@metadata = Fog::Compute::OpenStack::Metadata.new({
202
+ :service => @conn,
203
+ :parent => @@server
204
+ })
205
+ assert_equal 1, @@metadata.size
188
206
 
189
- metadata = @@server.metadata
190
- metadata['foo0'] = 'bar0'
191
- assert metadata.update('foo0')
207
+ datum = @@metadata[0]
208
+ assert_equal 'foo0', datum.key
209
+ assert_equal 'bar0', datum.value
192
210
 
193
- metadata.refresh
211
+ end
194
212
 
195
- assert_equal 'bar0', metadata['foo0']
196
213
 
197
- assert_equal 1, metadata.size
198
-
199
- end
214
+ def test_004_update_some_server_metadata_items
200
215
 
201
- def test_004_update_some_server_metadata_items
216
+ metadata = {}
217
+ metadata['foo1'] = 'bar1'
218
+ metadata['foo2'] = 'bar2'
219
+ @conn.update_metadata('servers', @@server.id, metadata)
202
220
 
203
- metadata = @@server.metadata
204
- metadata.clear
205
- metadata['foo1'] = 'bar1'
206
- metadata['foo2'] = 'bar2'
207
- assert metadata.update()
221
+ metadata = @conn.list_metadata('servers', @@server.id).body['metadata']
208
222
 
209
- metadata.refresh
223
+ assert_equal 3, metadata.size
210
224
 
211
- assert_equal 'bar0', metadata['foo0']
212
- assert_equal 'bar1', metadata['foo1']
213
- assert_equal 'bar2', metadata['foo2']
225
+ assert_equal 'bar0', metadata['foo0']
226
+ assert_equal 'bar1', metadata['foo1']
227
+ assert_equal 'bar2', metadata['foo2']
214
228
 
215
- assert_equal 3, metadata.size
216
-
217
- end
229
+ end
218
230
 
219
- def test_005_set_server_metadata_items
220
231
 
221
- metadata = @@server.metadata
222
- metadata.clear
223
- metadata['foo1'] = 'better'
224
- metadata['foo2'] = 'watch'
225
- metadata['foo3'] = 'out!'
226
- assert metadata.save
232
+ def test_005_set_server_metadata_items
227
233
 
228
- metadata.refresh
234
+ metadata = {}
235
+ metadata['foo1'] = 'better'
236
+ metadata['foo2'] = 'watch'
237
+ metadata['foo3'] = 'out!'
238
+ metadata['foo4'] = 'DELETE FROM instance_metadata;'
239
+ @conn.set_metadata('servers', @@server.id, metadata)
229
240
 
230
- assert_equal 'better', metadata['foo1']
231
- assert_equal 'watch', metadata['foo2']
232
- assert_equal 'out!', metadata['foo3']
241
+ metadata = @conn.list_metadata('servers', @@server.id).body['metadata']
233
242
 
234
- assert_equal 3, metadata.size
235
-
236
- end
243
+ assert_equal 'better', metadata['foo1']
244
+ assert_equal 'watch', metadata['foo2']
245
+ assert_equal 'out!', metadata['foo3']
246
+ assert_equal 'DELETE FROM instance_metadata;', metadata['foo4']
237
247
 
238
- def test_006_clear_server_metadata
248
+ assert_equal 4, metadata.size
249
+
250
+ end
239
251
 
240
- metadata = @@server.metadata
241
- assert metadata.clear!
252
+ def test_006_clear_server_metadata
242
253
 
243
- metadata.refresh
254
+ metadata = {}
255
+ @conn.set_metadata('servers', @@server.id, metadata)
244
256
 
245
- assert_equal 0, metadata.size
257
+ metadata = @conn.list_metadata('servers', @@server.id).body['metadata']
258
+ assert_equal 0, metadata.size
246
259
 
247
- end
248
-
249
- def test_020_create_image
250
-
251
- #snapshot the image
252
- image = create_image(@@server, :name => "torpedo", :metadata => {"key1" => "value1"})
253
- assert_equal('SAVING', image.status)
254
- assert_equal('torpedo', image.name)
255
- assert_equal(25, image.progress)
256
- #FIXME: server id should be a uuid string
257
- assert_equal(@@server.id.to_s, image.server['id'])
258
- assert_not_nil(image.created)
259
- assert_not_nil(image.id)
260
- assert_equal('value1', image.metadata['key1'])
261
-
262
- begin
263
- timeout(SERVER_BUILD_TIMEOUT) do
264
- until image.status == 'ACTIVE' do
265
- image = @conn.image(image.id)
266
- sleep 1
267
- end
268
260
  end
269
- rescue Timeout::Error => te
270
- fail('Timeout creating image snapshot.')
271
- end
272
261
 
273
- sleep SLEEP_AFTER_IMAGE_CREATE
274
-
275
- # Overwrite image_ref to make all subsequent tests use this snapshot
276
- @@image_ref = image.id.to_s
277
-
278
- end if TEST_CREATE_IMAGE
279
-
280
- def test_030_rebuild
281
- # NOTE: this will use the snapshot if TEST_CREATE_IMAGE is enabled
282
- @@server.rebuild!(:adminPass => @@admin_pass, :imageRef => @@image_ref, :personality => get_personalities)
283
- server = @conn.server(@@server.id)
284
- sleep 15 # sleep a couple seconds until rebuild starts
285
- check_server(server, @@image_ref, @@flavor_ref)
286
-
287
- end if TEST_REBUILD_SERVER
288
-
289
- def test_035_soft_reboot
290
- # make sure our snapshot boots
291
- @@server.reboot(type='SOFT')
292
- server = @conn.server(@@server.id)
293
- assert_equal('REBOOT', server.status)
294
- check_server(server, @@image_ref, @@flavor_ref)
295
- end if TEST_SOFT_REBOOT_SERVER
296
-
297
- def test_036_hard_reboot
298
- # make sure our snapshot boots
299
- @@server.reboot(type='HARD')
300
- server = @conn.server(@@server.id)
301
- assert_equal('HARD_REBOOT', server.status)
302
- check_server(server, @@image_ref, @@flavor_ref)
303
- end if TEST_HARD_REBOOT_SERVER
304
-
305
- def test_037_change_password
306
- @@admin_pass = "AnGrYbIrD$"
307
- @@server.change_password!(@@admin_pass)
308
- server = @conn.server(@@server.id)
309
- begin
310
- timeout(60) do
311
- until server.status == 'ACTIVE' do
312
- server = @conn.server(server.id)
313
- sleep 1
314
- end
315
- end
316
- rescue Timeout::Error => te
317
- fail('Timeout changing server password.')
318
- end
319
- check_server(server, @@image_ref, @@flavor_ref)
320
- end if TEST_ADMIN_PASSWORD
321
262
 
322
- def test_040_resize_revert
263
+ def test_020_create_image
323
264
 
324
- # before resizing obtain host_id
325
- server = @conn.server(@@server.id)
326
- @@host_id = server.hostId #original host ID
265
+ #snapshot the image
266
+ image = create_image(@@server, "torpedo", {"key1" => "value1"})
327
267
 
328
- @@server.resize!(@@flavor_ref_resize)
329
- server = @conn.server(@@server.id)
330
- assert_equal('RESIZE', server.status)
268
+ assert_equal('SAVING', image.status)
269
+ assert_equal('torpedo', image.name)
270
+ assert_equal(25, image.progress)
271
+ #FIXME: server id should be a uuid string
272
+ assert_equal(@@server.id, image.server['id'])
273
+ assert_not_nil(image.created_at)
274
+ assert_not_nil(image.id)
275
+ assert_equal "value1", image.metadata.get('key1').value
331
276
 
332
- begin
333
- timeout(SERVER_BUILD_TIMEOUT) do
334
- until server.status == 'VERIFY_RESIZE' do
335
- if server.status == "ERROR" then
336
- fail('Server ERROR state detected when resizing server!')
277
+ begin
278
+ timeout(SERVER_BUILD_TIMEOUT) do
279
+ until image.status == 'ACTIVE' do
280
+ image = @conn.images.get(image.id)
281
+ sleep 1
282
+ end
337
283
  end
338
- server = @conn.server(server.id)
339
- sleep 1
284
+ rescue Timeout::Error => te
285
+ fail('Timeout creating image snapshot.')
340
286
  end
341
- end
342
- rescue Timeout::Error => te
343
- fail('Timeout resizing server.')
344
- end
345
-
346
- check_server(server, @@image_ref, @@flavor_ref_resize, 'VERIFY_RESIZE')
347
-
348
- @@server.revert_resize!
349
- server = @conn.server(@@server.id)
350
- begin
351
- timeout(60) do
352
- until server.status == 'ACTIVE' do
353
- server = @conn.server(server.id)
354
- sleep 1
355
- end
356
- end
357
- rescue Timeout::Error => te
358
- fail('Timeout waiting for revert resize.')
359
- end
360
287
 
361
- check_server(server, @@image_ref, @@flavor_ref)
362
- assert_equal(@@host_id, server.hostId)
288
+ sleep SLEEP_AFTER_IMAGE_CREATE
289
+
290
+ # Overwrite image_ref to make all subsequent tests use this snapshot
291
+ @@image_ref = image.id.to_s
363
292
 
364
- end if TEST_REVERT_RESIZE_SERVER
293
+ end if TEST_CREATE_IMAGE
365
294
 
366
- def test_041_resize
367
295
 
368
- # before resizing obtain host_id
369
- server = @conn.server(@@server.id)
370
- @@host_id = server.hostId #original host ID
296
+ def test_030_rebuild
297
+ # NOTE: this will use the snapshot if TEST_CREATE_IMAGE is enabled
298
+ metadata={ "dr." => "evil", "big" => "boy" }
299
+ @conn.rebuild_server(@@server.id, @@image_ref, "torpedo", admin_pass=@@admin_pass, metadata=metadata, personality=get_personalities)
371
300
 
372
- @@server.resize!(@@flavor_ref_resize)
373
- server = @conn.server(@@server.id)
374
- assert_equal('RESIZE', server.status)
301
+ server = @conn.servers.get(@@server.id)
302
+ assert_equal('REBUILD', server.state)
375
303
 
376
- begin
377
- timeout(SERVER_BUILD_TIMEOUT) do
378
- until server.status == 'VERIFY_RESIZE' do
379
- if server.status == "ERROR" then
380
- fail('Server ERROR state detected when resizing server!')
304
+ check_server(server, @@image_ref, @@flavor_ref)
305
+
306
+ end if TEST_REBUILD_SERVER
307
+
308
+ def test_035_soft_reboot
309
+ # make sure our snapshot boots
310
+ @@server.reboot(type='SOFT')
311
+ server = @conn.servers.get(@@server.id)
312
+ assert_equal('REBOOT', server.state)
313
+ check_server(server, @@image_ref, @@flavor_ref)
314
+ end if TEST_SOFT_REBOOT_SERVER
315
+
316
+
317
+ def test_036_hard_reboot
318
+ # make sure our snapshot boots
319
+ @@server.reboot(type='HARD')
320
+ server = @conn.servers.get(@@server.id)
321
+ assert_equal('HARD_REBOOT', server.state)
322
+ check_server(server, @@image_ref, @@flavor_ref)
323
+ end if TEST_HARD_REBOOT_SERVER
324
+
325
+ def test_037_change_password
326
+ @@admin_pass = "AnGrYbIrD$"
327
+ @@server.change_password(@@admin_pass)
328
+ server = @conn.servers.get(@@server.id)
329
+ begin
330
+ timeout(60) do
331
+ until server.state == 'ACTIVE' do
332
+ server = @conn.servers.get(@@server.id)
333
+ sleep 1
334
+ end
381
335
  end
382
- server = @conn.server(server.id)
383
- sleep 1
336
+ rescue Timeout::Error => te
337
+ fail('Timeout changing server password.')
338
+ end
339
+ check_server(server, @@image_ref, @@flavor_ref)
340
+ end if TEST_ADMIN_PASSWORD
341
+
342
+ def test_040_resize_revert
343
+
344
+ # before resizing obtain host_id
345
+ server = @conn.servers.get(@@server.id)
346
+ @@host_id = server.host_id #original host ID
347
+
348
+ @@server.resize(@@flavor_ref_resize)
349
+ server = @conn.servers.get(@@server.id)
350
+ assert_equal('RESIZE', server.state)
351
+
352
+ begin
353
+ timeout(SERVER_BUILD_TIMEOUT) do
354
+ until server.state == 'VERIFY_RESIZE' do
355
+ if server.state == "ERROR" then
356
+ fail('Server ERROR state detected when resizing server!')
357
+ end
358
+ server = @conn.servers.get(@@server.id)
359
+ sleep 1
360
+ end
361
+ end
362
+ rescue Timeout::Error => te
363
+ fail('Timeout resizing server.')
384
364
  end
385
- end
386
- rescue Timeout::Error => te
387
- fail('Timeout resizing server.')
388
- end
389
365
 
390
- check_server(server, @@image_ref, @@flavor_ref_resize, 'VERIFY_RESIZE')
391
- assert_not_equal(@@host_id, server.hostId) if TEST_HOSTID_ON_RESIZE
392
-
393
- end if TEST_RESIZE_SERVER
366
+ check_server(server, @@image_ref, @@flavor_ref_resize, 'VERIFY_RESIZE')
367
+
368
+ @@server.revert_resize
369
+ server = @conn.servers.get(@@server.id)
370
+ begin
371
+ timeout(60) do
372
+ until server.state == 'ACTIVE' do
373
+ server = @conn.servers.get(@@server.id)
374
+ sleep 1
375
+ end
376
+ end
377
+ rescue Timeout::Error => te
378
+ fail('Timeout waiting for revert resize.')
379
+ end
394
380
 
395
- def test_042_resize_confirm
381
+ check_server(server, @@image_ref, @@flavor_ref)
382
+ assert_equal(@@host_id, server.host_id)
396
383
 
397
- @@server.confirm_resize!
398
- server = @conn.server(@@server.id)
399
- assert_equal('ACTIVE', server.status)
384
+ end if TEST_REVERT_RESIZE_SERVER
400
385
 
401
- check_server(server, @@image_ref, @@flavor_ref_resize)
386
+ def test_041_resize
402
387
 
403
- end if TEST_RESIZE_SERVER
388
+ # before resizing obtain host_id
389
+ server = @conn.servers.get(@@server.id)
390
+ @@host_id = server.host_id #original host ID
404
391
 
405
- def test_051_delete_image_metadata_items
392
+ @@server.resize(@@flavor_ref_resize)
393
+ server = @conn.servers.get(@@server.id)
394
+ assert_equal('RESIZE', server.state)
406
395
 
407
- metadata = @conn.image(@@image_ref).metadata
408
- metadata.each_pair do |key, value|
409
- assert metadata.delete!(key)
410
- end
396
+ begin
397
+ timeout(SERVER_BUILD_TIMEOUT) do
398
+ until server.state == 'VERIFY_RESIZE' do
399
+ if server.state == "ERROR" then
400
+ fail('Server ERROR state detected when resizing server!')
401
+ end
402
+ server = @conn.servers.get(@@server.id)
403
+ sleep 1
404
+ end
405
+ end
406
+ rescue Timeout::Error => te
407
+ fail('Timeout resizing server.')
408
+ end
411
409
 
412
- metadata.refresh
410
+ check_server(server, @@image_ref, @@flavor_ref_resize, 'VERIFY_RESIZE')
411
+ assert_not_equal(@@host_id, server.host_id) if TEST_HOSTID_ON_RESIZE
412
+
413
+ end if TEST_RESIZE_SERVER
414
+
415
+ def test_042_resize_confirm
413
416
 
414
- assert_equal 0, metadata.size
417
+ @@server.confirm_resize
418
+ server = @conn.servers.get(@@server.id)
419
+ begin
420
+ timeout(60) do
421
+ until server.state == 'ACTIVE' do
422
+ server = @conn.servers.get(@@server.id)
423
+ sleep 1
424
+ end
425
+ end
426
+ rescue Timeout::Error => te
427
+ fail('Timeout waiting for ACTIVE state after resize confirm.')
428
+ end
415
429
 
416
- end if TEST_CREATE_IMAGE
430
+ check_server(server, @@image_ref, @@flavor_ref_resize)
417
431
 
418
- def test_052_update_one_image_metadata_item
432
+ end if TEST_RESIZE_SERVER
419
433
 
420
- metadata = @conn.image(@@image_ref).metadata
421
- metadata['foo1'] = 'bar1'
422
- assert metadata.update('foo1')
434
+ def test_051_delete_image_metadata_items
423
435
 
424
- metadata.refresh
436
+ #refresh the metadata
437
+ metadata = Fog::Compute::OpenStack::Metadata.new({
438
+ :service => @conn,
439
+ :parent => @@images.last
440
+ })
425
441
 
426
- assert_equal 'bar1', metadata['foo1']
442
+ metadata.each do |meta|
443
+ assert meta.destroy
444
+ end
427
445
 
428
- assert_equal 1, metadata.size
446
+ #refresh the metadata
447
+ metadata = Fog::Compute::OpenStack::Metadata.new({
448
+ :service => @conn,
449
+ :parent => @@images.last
450
+ })
451
+ assert_equal 0, metadata.size
452
+
453
+ end if TEST_CREATE_IMAGE
454
+
455
+ def test_052_update_one_image_metadata_item
456
+ datum = Fog::Compute::OpenStack::Metadatum.new({
457
+ :service => @conn,
458
+ :parent => @@images.last
459
+ })
460
+ datum.key = 'foo0'
461
+ datum.value = 'bar0'
462
+ datum.save
463
+
464
+ #refresh the metadata
465
+ metadata = Fog::Compute::OpenStack::Metadata.new({
466
+ :service => @conn,
467
+ :parent => @@images.last
468
+ })
469
+ assert_equal 1, metadata.size
470
+
471
+ datum = metadata[0]
472
+ assert_equal 'foo0', datum.key
473
+ assert_equal 'bar0', datum.value
474
+ end if TEST_CREATE_IMAGE
475
+
476
+ def test_053_update_some_image_metadata_items
477
+
478
+ metadata = {}
479
+ metadata['foo0'] = 'barz'
480
+ metadata['foo1'] = 'bar1'
481
+ metadata['foo2'] = 'bar2'
482
+ @conn.update_metadata('images', @@images.last.id, metadata)
483
+
484
+ metadata = @conn.list_metadata('images', @@images.last.id).body['metadata']
485
+
486
+ assert_equal 3, metadata.size
487
+
488
+ assert_equal 'barz', metadata['foo0']
489
+ assert_equal 'bar1', metadata['foo1']
490
+ assert_equal 'bar2', metadata['foo2']
429
491
 
430
- end if TEST_CREATE_IMAGE
492
+ end if TEST_CREATE_IMAGE
431
493
 
432
- def test_053_update_some_image_metadata_items
494
+ def test_054_set_image_metadata_items
433
495
 
434
- metadata = @conn.image(@@image_ref).metadata
435
- metadata['foo1'] = 'bar1'
436
- metadata['foo2'] = 'bar2'
437
- assert metadata.update(['foo1','foo2'])
496
+ metadata = {}
497
+ metadata['foo1'] = 'that'
498
+ metadata['foo2'] = 'silly'
499
+ metadata['foo3'] = 'rabbit'
500
+ metadata['foo4'] = 'DELETE FROM images;'
501
+ @conn.set_metadata('images', @@images.last.id, metadata)
438
502
 
439
- metadata.refresh
503
+ metadata = @conn.list_metadata('images', @@images.last.id).body['metadata']
440
504
 
441
- assert_equal 'bar1', metadata['foo1']
442
- assert_equal 'bar2', metadata['foo2']
505
+ assert_equal 'that', metadata['foo1']
506
+ assert_equal 'silly', metadata['foo2']
507
+ assert_equal 'rabbit', metadata['foo3']
508
+ assert_equal 'DELETE FROM images;', metadata['foo4']
443
509
 
444
- assert_equal 2, metadata.size
510
+ assert_equal 4, metadata.size
445
511
 
446
- end if TEST_CREATE_IMAGE
512
+ end if TEST_CREATE_IMAGE
447
513
 
448
- def test_054_set_image_metadata_items
514
+ def test_055_clear_image_metadata
449
515
 
450
- metadata = @conn.image(@@image_ref).metadata
451
- metadata['foo1'] = 'that'
452
- metadata['foo2'] = 'silly'
453
- metadata['foo3'] = 'rabbit'
454
- assert metadata.save
516
+ metadata = {}
517
+ @conn.set_metadata('images', @@images.last.id, metadata)
455
518
 
456
- metadata.refresh
457
-
458
- assert_equal 'that', metadata['foo1']
459
- assert_equal 'silly', metadata['foo2']
460
- assert_equal 'rabbit', metadata['foo3']
461
-
462
- assert_equal 3, metadata.size
519
+ metadata = @conn.list_metadata('images', @@images.last.id).body['metadata']
520
+ assert_equal 0, metadata.size
463
521
 
464
- end if TEST_CREATE_IMAGE
522
+ end if TEST_CREATE_IMAGE
523
+
524
+ def test_060_attach_volume
525
+ volume = Torpedo::Volume::Volumes.volume
526
+ assert(@@server.attach_volume(volume.id, "/dev/vdb"))
527
+
528
+ begin
529
+ timeout(VOLUME_BUILD_TIMEOUT) do
530
+ until volume.status == 'in-use' do
531
+ if volume.status == "error" then
532
+ fail('ERROR status detected when attaching volume!')
533
+ end
534
+ volume = @volume_conn.volumes.get(volume.id)
535
+ sleep 1
536
+ end
537
+ end
538
+ rescue Timeout::Error => te
539
+ fail('Timeout attaching volume.')
540
+ end
465
541
 
466
- def test_055_clear_image_metadata
542
+ end if VOLUME_ENABLED
467
543
 
468
- metadata = @conn.image(@@image_ref).metadata
469
- assert metadata.clear!
544
+ def test_061_detach_volume
470
545
 
471
- metadata.refresh
546
+ volume = Torpedo::Volume::Volumes.volume
547
+ assert(@@server.detach_volume(volume.id))
472
548
 
473
- assert_equal 0, metadata.size
474
-
475
- end if TEST_CREATE_IMAGE
549
+ volume = @volume_conn.volumes.get(volume.id)
550
+ begin
551
+ timeout(VOLUME_BUILD_TIMEOUT) do
552
+ until volume.status == 'available' do
553
+ if volume.status == "error" then
554
+ fail('ERROR status detected when detaching volume!')
555
+ end
556
+ volume = @volume_conn.volumes.get(volume.id)
557
+ sleep 1
558
+ end
559
+ end
560
+ rescue Timeout::Error => te
561
+ fail('Timeout detaching volume.')
562
+ end
563
+
564
+ end if VOLUME_ENABLED
476
565
 
477
- def test_999_teardown
478
- if CLEAN_UP_SERVERS
479
- @@servers.each do |server|
480
- assert_equal(true, server.delete!)
481
- end
482
- end
483
- if CLEAN_UP_IMAGES
484
- @@images.each do |image|
485
- assert_equal(true, image.delete!)
486
- end
487
566
  end
488
567
  end
489
-
490
- end
491
- end
492
568
  end