torpedo 1.0.19 → 2.1.0

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