Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1489)

Unified Diff: third_party/gsutil/third_party/boto/tests/integration/rds/test_promote_modify.py

Issue 1377933002: [catapult] - Copy Telemetry's gsutilz over to third_party. (Closed) Base URL: https://github.com/catapult-project/catapult.git@master
Patch Set: Rename to gsutil. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ---'

Powered by Google App Engine
This is Rietveld 408576698