trunk merge
This commit is contained in:
2
Authors
2
Authors
@@ -30,6 +30,7 @@ Gabe Westmaas <gabe.westmaas@rackspace.com>
|
|||||||
Hisaharu Ishii <ishii.hisaharu@lab.ntt.co.jp>
|
Hisaharu Ishii <ishii.hisaharu@lab.ntt.co.jp>
|
||||||
Hisaki Ohara <hisaki.ohara@intel.com>
|
Hisaki Ohara <hisaki.ohara@intel.com>
|
||||||
Ilya Alekseyev <ialekseev@griddynamics.com>
|
Ilya Alekseyev <ialekseev@griddynamics.com>
|
||||||
|
Isaku Yamahata <yamahata@valinux.co.jp>
|
||||||
Jason Koelker <jason@koelker.net>
|
Jason Koelker <jason@koelker.net>
|
||||||
Jay Pipes <jaypipes@gmail.com>
|
Jay Pipes <jaypipes@gmail.com>
|
||||||
Jesse Andrews <anotherjesse@gmail.com>
|
Jesse Andrews <anotherjesse@gmail.com>
|
||||||
@@ -83,6 +84,7 @@ Trey Morris <trey.morris@rackspace.com>
|
|||||||
Tushar Patil <tushar.vitthal.patil@gmail.com>
|
Tushar Patil <tushar.vitthal.patil@gmail.com>
|
||||||
Vasiliy Shlykov <vash@vasiliyshlykov.org>
|
Vasiliy Shlykov <vash@vasiliyshlykov.org>
|
||||||
Vishvananda Ishaya <vishvananda@gmail.com>
|
Vishvananda Ishaya <vishvananda@gmail.com>
|
||||||
|
Vivek Y S <vivek.ys@gmail.com>
|
||||||
William Wolf <throughnothing@gmail.com>
|
William Wolf <throughnothing@gmail.com>
|
||||||
Yoshiaki Tamura <yoshi@midokura.jp>
|
Yoshiaki Tamura <yoshi@midokura.jp>
|
||||||
Youcef Laribi <Youcef.Laribi@eu.citrix.com>
|
Youcef Laribi <Youcef.Laribi@eu.citrix.com>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
NOVA_KEY_DIR=$(pushd $(dirname $BASH_SOURCE)>/dev/null; pwd; popd>/dev/null)
|
NOVA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))
|
||||||
export EC2_ACCESS_KEY="%(access)s:%(project)s"
|
export EC2_ACCESS_KEY="%(access)s:%(project)s"
|
||||||
export EC2_SECRET_KEY="%(secret)s"
|
export EC2_SECRET_KEY="%(secret)s"
|
||||||
export EC2_URL="%(ec2)s"
|
export EC2_URL="%(ec2)s"
|
||||||
|
|||||||
@@ -186,6 +186,52 @@ class CloudTestCase(test.TestCase):
|
|||||||
db.service_destroy(self.context, service1['id'])
|
db.service_destroy(self.context, service1['id'])
|
||||||
db.service_destroy(self.context, service2['id'])
|
db.service_destroy(self.context, service2['id'])
|
||||||
|
|
||||||
|
def test_describe_snapshots(self):
|
||||||
|
"""Makes sure describe_snapshots works and filters results."""
|
||||||
|
vol = db.volume_create(self.context, {})
|
||||||
|
snap1 = db.snapshot_create(self.context, {'volume_id': vol['id']})
|
||||||
|
snap2 = db.snapshot_create(self.context, {'volume_id': vol['id']})
|
||||||
|
result = self.cloud.describe_snapshots(self.context)
|
||||||
|
self.assertEqual(len(result['snapshotSet']), 2)
|
||||||
|
snapshot_id = ec2utils.id_to_ec2_id(snap2['id'], 'snap-%08x')
|
||||||
|
result = self.cloud.describe_snapshots(self.context,
|
||||||
|
snapshot_id=[snapshot_id])
|
||||||
|
self.assertEqual(len(result['snapshotSet']), 1)
|
||||||
|
self.assertEqual(
|
||||||
|
ec2utils.ec2_id_to_id(result['snapshotSet'][0]['snapshotId']),
|
||||||
|
snap2['id'])
|
||||||
|
db.snapshot_destroy(self.context, snap1['id'])
|
||||||
|
db.snapshot_destroy(self.context, snap2['id'])
|
||||||
|
db.volume_destroy(self.context, vol['id'])
|
||||||
|
|
||||||
|
def test_create_snapshot(self):
|
||||||
|
"""Makes sure create_snapshot works."""
|
||||||
|
vol = db.volume_create(self.context, {'status': "available"})
|
||||||
|
volume_id = ec2utils.id_to_ec2_id(vol['id'], 'vol-%08x')
|
||||||
|
|
||||||
|
result = self.cloud.create_snapshot(self.context,
|
||||||
|
volume_id=volume_id)
|
||||||
|
snapshot_id = result['snapshotId']
|
||||||
|
result = self.cloud.describe_snapshots(self.context)
|
||||||
|
self.assertEqual(len(result['snapshotSet']), 1)
|
||||||
|
self.assertEqual(result['snapshotSet'][0]['snapshotId'], snapshot_id)
|
||||||
|
|
||||||
|
db.snapshot_destroy(self.context, ec2utils.ec2_id_to_id(snapshot_id))
|
||||||
|
db.volume_destroy(self.context, vol['id'])
|
||||||
|
|
||||||
|
def test_delete_snapshot(self):
|
||||||
|
"""Makes sure delete_snapshot works."""
|
||||||
|
vol = db.volume_create(self.context, {'status': "available"})
|
||||||
|
snap = db.snapshot_create(self.context, {'volume_id': vol['id'],
|
||||||
|
'status': "available"})
|
||||||
|
snapshot_id = ec2utils.id_to_ec2_id(snap['id'], 'snap-%08x')
|
||||||
|
|
||||||
|
result = self.cloud.delete_snapshot(self.context,
|
||||||
|
snapshot_id=snapshot_id)
|
||||||
|
self.assertTrue(result)
|
||||||
|
|
||||||
|
db.volume_destroy(self.context, vol['id'])
|
||||||
|
|
||||||
def test_describe_instances(self):
|
def test_describe_instances(self):
|
||||||
"""Makes sure describe_instances works and filters results."""
|
"""Makes sure describe_instances works and filters results."""
|
||||||
inst1 = db.instance_create(self.context, {'reservation_id': 'a',
|
inst1 = db.instance_create(self.context, {'reservation_id': 'a',
|
||||||
|
|||||||
@@ -176,6 +176,34 @@ class VolumeTestCase(test.TestCase):
|
|||||||
# This will allow us to test cross-node interactions
|
# This will allow us to test cross-node interactions
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _create_snapshot(volume_id, size='0'):
|
||||||
|
"""Create a snapshot object."""
|
||||||
|
snap = {}
|
||||||
|
snap['volume_size'] = size
|
||||||
|
snap['user_id'] = 'fake'
|
||||||
|
snap['project_id'] = 'fake'
|
||||||
|
snap['volume_id'] = volume_id
|
||||||
|
snap['status'] = "creating"
|
||||||
|
return db.snapshot_create(context.get_admin_context(), snap)['id']
|
||||||
|
|
||||||
|
def test_create_delete_snapshot(self):
|
||||||
|
"""Test snapshot can be created and deleted."""
|
||||||
|
volume_id = self._create_volume()
|
||||||
|
self.volume.create_volume(self.context, volume_id)
|
||||||
|
snapshot_id = self._create_snapshot(volume_id)
|
||||||
|
self.volume.create_snapshot(self.context, volume_id, snapshot_id)
|
||||||
|
self.assertEqual(snapshot_id,
|
||||||
|
db.snapshot_get(context.get_admin_context(),
|
||||||
|
snapshot_id).id)
|
||||||
|
|
||||||
|
self.volume.delete_snapshot(self.context, snapshot_id)
|
||||||
|
self.assertRaises(exception.NotFound,
|
||||||
|
db.snapshot_get,
|
||||||
|
self.context,
|
||||||
|
snapshot_id)
|
||||||
|
self.volume.delete_volume(self.context, volume_id)
|
||||||
|
|
||||||
|
|
||||||
class DriverTestCase(test.TestCase):
|
class DriverTestCase(test.TestCase):
|
||||||
"""Base Test class for Drivers."""
|
"""Base Test class for Drivers."""
|
||||||
|
|||||||
@@ -592,11 +592,29 @@ class XenAPIDiffieHellmanTestCase(test.TestCase):
|
|||||||
bob_shared = self.bob.compute_shared(alice_pub)
|
bob_shared = self.bob.compute_shared(alice_pub)
|
||||||
self.assertEquals(alice_shared, bob_shared)
|
self.assertEquals(alice_shared, bob_shared)
|
||||||
|
|
||||||
def test_encryption(self):
|
def _test_encryption(self, message):
|
||||||
msg = "This is a top-secret message"
|
enc = self.alice.encrypt(message)
|
||||||
enc = self.alice.encrypt(msg)
|
self.assertFalse(enc.endswith('\n'))
|
||||||
dec = self.bob.decrypt(enc)
|
dec = self.bob.decrypt(enc)
|
||||||
self.assertEquals(dec, msg)
|
self.assertEquals(dec, message)
|
||||||
|
|
||||||
|
def test_encrypt_simple_message(self):
|
||||||
|
self._test_encryption('This is a simple message.')
|
||||||
|
|
||||||
|
def test_encrypt_message_with_newlines_at_end(self):
|
||||||
|
self._test_encryption('This message has a newline at the end.\n')
|
||||||
|
|
||||||
|
def test_encrypt_many_newlines_at_end(self):
|
||||||
|
self._test_encryption('Message with lotsa newlines.\n\n\n')
|
||||||
|
|
||||||
|
def test_encrypt_newlines_inside_message(self):
|
||||||
|
self._test_encryption('Message\nwith\ninterior\nnewlines.')
|
||||||
|
|
||||||
|
def test_encrypt_with_leading_newlines(self):
|
||||||
|
self._test_encryption('\n\nMessage with leading newlines.')
|
||||||
|
|
||||||
|
def test_encrypt_really_long_message(self):
|
||||||
|
self._test_encryption(''.join(['abcd' for i in xrange(1024)]))
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
super(XenAPIDiffieHellmanTestCase, self).tearDown()
|
super(XenAPIDiffieHellmanTestCase, self).tearDown()
|
||||||
|
|||||||
Reference in New Issue
Block a user