| Index: third_party/gsutil/third_party/boto/tests/integration/rds/test_promote_modify.py
|
| diff --git a/third_party/gsutil/third_party/boto/tests/integration/rds/test_promote_modify.py b/third_party/gsutil/third_party/boto/tests/integration/rds/test_promote_modify.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..20963ed2739e3ecafa9c4766a4d40528cec33bc1
|
| --- /dev/null
|
| +++ b/third_party/gsutil/third_party/boto/tests/integration/rds/test_promote_modify.py
|
| @@ -0,0 +1,138 @@
|
| +# Author: Bruce Pennypacker
|
| +#
|
| +# Create a temporary RDS database instance, then create a read-replica of the
|
| +# instance. Once the replica is available, promote it and verify that the
|
| +# promotion succeeds, then rename it. Delete the databases upon completion i
|
| +# of the tests.
|
| +#
|
| +# For each step (creating the databases, promoting, etc) we loop for up
|
| +# to 15 minutes to wait for the instance to become available. It should
|
| +# never take that long for any of the steps to complete.
|
| +
|
| +"""
|
| +Check that promotion of read replicas and renaming instances works as expected
|
| +"""
|
| +
|
| +import unittest
|
| +import time
|
| +from boto.rds import RDSConnection
|
| +
|
| +class PromoteReadReplicaTest(unittest.TestCase):
|
| + rds = True
|
| +
|
| + def setUp(self):
|
| + self.conn = RDSConnection()
|
| + self.masterDB_name = "boto-db-%s" % str(int(time.time()))
|
| + self.replicaDB_name = "replica-%s" % self.masterDB_name
|
| + self.renamedDB_name = "renamed-replica-%s" % self.masterDB_name
|
| +
|
| +
|
| + def tearDown(self):
|
| + instances = self.conn.get_all_dbinstances()
|
| + for db in [self.masterDB_name, self.replicaDB_name, self.renamedDB_name]:
|
| + for i in instances:
|
| + if i.id == db:
|
| + self.conn.delete_dbinstance(db, skip_final_snapshot=True)
|
| +
|
| + def test_promote(self):
|
| + print '--- running RDS promotion & renaming tests ---'
|
| + self.masterDB = self.conn.create_dbinstance(self.masterDB_name, 5, 'db.t1.micro', 'root', 'bototestpw')
|
| +
|
| + # Wait up to 15 minutes for the masterDB to become available
|
| + print '--- waiting for "%s" to become available ---' % self.masterDB_name
|
| + wait_timeout = time.time() + (15 * 60)
|
| + time.sleep(60)
|
| +
|
| + instances = self.conn.get_all_dbinstances(self.masterDB_name)
|
| + inst = instances[0]
|
| +
|
| + while wait_timeout > time.time() and inst.status != 'available':
|
| + time.sleep(15)
|
| + instances = self.conn.get_all_dbinstances(self.masterDB_name)
|
| + inst = instances[0]
|
| +
|
| + self.assertTrue(inst.status == 'available')
|
| +
|
| + self.replicaDB = self.conn.create_dbinstance_read_replica(self.replicaDB_name, self.masterDB_name)
|
| +
|
| + # Wait up to 15 minutes for the replicaDB to become available
|
| + print '--- waiting for "%s" to become available ---' % self.replicaDB_name
|
| + wait_timeout = time.time() + (15 * 60)
|
| + time.sleep(60)
|
| +
|
| + instances = self.conn.get_all_dbinstances(self.replicaDB_name)
|
| + inst = instances[0]
|
| +
|
| + while wait_timeout > time.time() and inst.status != 'available':
|
| + time.sleep(15)
|
| + instances = self.conn.get_all_dbinstances(self.replicaDB_name)
|
| + inst = instances[0]
|
| +
|
| + self.assertTrue(inst.status == 'available')
|
| +
|
| + # Promote the replicaDB and wait for it to become available
|
| + self.replicaDB = self.conn.promote_read_replica(self.replicaDB_name)
|
| +
|
| + # Wait up to 15 minutes for the replicaDB to become available
|
| + print '--- waiting for "%s" to be promoted and available ---' % self.replicaDB_name
|
| + wait_timeout = time.time() + (15 * 60)
|
| + time.sleep(60)
|
| +
|
| + instances = self.conn.get_all_dbinstances(self.replicaDB_name)
|
| + inst = instances[0]
|
| +
|
| + while wait_timeout > time.time() and inst.status != 'available':
|
| + time.sleep(15)
|
| + instances = self.conn.get_all_dbinstances(self.replicaDB_name)
|
| + inst = instances[0]
|
| +
|
| + # Verify that the replica is now a standalone instance and no longer
|
| + # functioning as a read replica
|
| + self.assertTrue(inst)
|
| + self.assertTrue(inst.status == 'available')
|
| + self.assertFalse(inst.status_infos)
|
| +
|
| + # Verify that the master no longer has any read replicas
|
| + instances = self.conn.get_all_dbinstances(self.masterDB_name)
|
| + inst = instances[0]
|
| + self.assertFalse(inst.read_replica_dbinstance_identifiers)
|
| +
|
| + print '--- renaming "%s" to "%s" ---' % ( self.replicaDB_name, self.renamedDB_name )
|
| +
|
| + self.renamedDB = self.conn.modify_dbinstance(self.replicaDB_name, new_instance_id=self.renamedDB_name, apply_immediately=True)
|
| +
|
| + # Wait up to 15 minutes for the masterDB to become available
|
| + print '--- waiting for "%s" to exist ---' % self.renamedDB_name
|
| +
|
| + wait_timeout = time.time() + (15 * 60)
|
| + time.sleep(60)
|
| +
|
| + # Wait up to 15 minutes until the new name shows up in the instance table
|
| + found = False
|
| + while found == False and wait_timeout > time.time():
|
| + instances = self.conn.get_all_dbinstances()
|
| + for i in instances:
|
| + if i.id == self.renamedDB_name:
|
| + found = True
|
| + if found == False:
|
| + time.sleep(15)
|
| +
|
| + self.assertTrue(found)
|
| +
|
| + print '--- waiting for "%s" to become available ---' % self.renamedDB_name
|
| +
|
| + instances = self.conn.get_all_dbinstances(self.renamedDB_name)
|
| + inst = instances[0]
|
| +
|
| + # Now wait for the renamed instance to become available
|
| + while wait_timeout > time.time() and inst.status != 'available':
|
| + time.sleep(15)
|
| + instances = self.conn.get_all_dbinstances(self.renamedDB_name)
|
| + inst = instances[0]
|
| +
|
| + self.assertTrue(inst.status == 'available')
|
| +
|
| + # Since the replica DB was renamed...
|
| + self.replicaDB = None
|
| +
|
| + print '--- tests completed ---'
|
|
|