def test_create_database_should_returns_500_when_name_is_blank(self): request = RequestFactory().post("/", {"name": ""}) view = CreateDatabase() view._client = mocks.FakeEC2Client() response = view.post(request) self.assertEqual(500, response.status_code) self.assertEqual("Instance name is empty", response.content)
def test_create_database_raises_exception_when_instance_fail_to_boot(self): instance = Instance(name="seven_cities") ec2_client = mocks.FakeEC2Client() ec2_client.run = lambda instance: False with self.assertRaises(DatabaseCreationError) as e: create_database(instance, ec2_client) self.assertEqual(u"Failed to create EC2 instance.", e.exception[1])
def test_create_database_terminates_the_instance_when_cant_create_db(self): exc_msg = u"I've failed to create your database, sorry! :(" module = "mysqlapi.api.models.DatabaseManager.create_database" with mock.patch(module) as c_database: c_database.side_effect = Exception(exc_msg) instance = Instance( ec2_id="i-00009", name="home", host="unknown.host", state="running", ) ec2_client = mocks.FakeEC2Client() try: t = start_creator(DatabaseManager, ec2_client) create_database(instance, ec2_client) t.stop() self.assertIn("unauthorize instance home", ec2_client.actions) self.assertIn("terminate instance home", ec2_client.actions) index_unauthorize = ec2_client.actions.index( "unauthorize instance home") index_terminate = ec2_client.actions.index( "terminate instance home") msg = "Should unauthorize before terminate." assert index_unauthorize < index_terminate, msg self.assertIsNotNone(instance.pk) self.assertEqual("error", instance.state) self.assertEqual(exc_msg, instance.reason) finally: instance.delete()
def test_create_database_should_returns_500_when_name_is_missing(self): request = RequestFactory().post("/", {}) view = CreateDatabase() view._client = mocks.FakeEC2Client() response = view.post(request) self.assertEqual(500, response.status_code) self.assertEqual("App name is missing", response.content)
def test_healthcheck_returns_201_when_ec2_instance_is_running(self): request = RequestFactory().get("/resources/g8mysql/status/") with mock.patch("mysqlapi.api.models.DatabaseManager.is_up") as is_up: is_up.return_value = True view = Healthcheck() fake = mocks.FakeEC2Client() view._client = fake response = view.get(request, "g8mysql") self.assertEqual(204, response.status_code)
def test_healthcheck_returns_500_if_the_mysql_server_is_off(self): request = RequestFactory().get("/resources/g8mysql/status/") with mock.patch("mysqlapi.api.models.DatabaseManager.is_up") as is_up: is_up.return_value = False view = Healthcheck() fake = mocks.FakeEC2Client() view._client = fake response = view.get(request, "g8mysql") self.assertEqual(500, response.status_code)
def test_drop(self): self.create_ciclops() request = RequestFactory().delete("/ciclops") self.fake = mocks.FakeEC2Client() view = DropDatabase() view._client = self.fake response = view.delete(request, "ciclops") self.assertEqual(200, response.status_code) with self.assertRaises(Instance.DoesNotExist): Instance.objects.get(name="ciclops")
def test_should_unauthorize_ec2_instance_before_terminate_it(self): self.create_ciclops() fake = mocks.FakeEC2Client() view = DropDatabase() view._client = fake request = RequestFactory().delete("/ciclops") resp = view.delete(request, "ciclops") self.assertEqual(200, resp.status_code) actions = [u"unauthorize instance ciclops", u"terminate instance ciclops"] self.assertEqual(actions, fake.actions)
def test_create_database_should_call_run_from_client(self): try: cli = mocks.FakeEC2Client() t = start_creator(DatabaseManager, cli) data = {"name": "bowl", "service_host": "127.0.0.1"} request = RequestFactory().post("/", data) view = CreateDatabase() view._client = cli response = view.post(request) t.stop() self.assertEqual(201, response.status_code) self.assertIn("run instance bowl", cli.actions) finally: self.cursor.execute("DROP DATABASE IF EXISTS bowl")
def test_create_database_should_authorize_access_to_the_instance(self): try: cli = mocks.FakeEC2Client() t = start_creator(DatabaseManager, cli) data = {"name": "entre_nous", "service_host": "127.0.0.1"} request = RequestFactory().post("/", data) view = CreateDatabase() view._client = cli response = view.post(request) t.stop() self.assertEqual(201, response.status_code) self.assertIn("authorize instance entre_nous", cli.actions) finally: self.cursor.execute("DROP DATABASE IF EXISTS entre_nous")
def test_create_database_ec2(self): try: client = mocks.FakeEC2Client() t = start_creator(DatabaseManager, client) request = RequestFactory().post("/", {"name": "ciclops"}) view = CreateDatabase() view._client = client response = view.post(request) self.assertEqual(201, response.status_code) self.assertEqual("", response.content) t.stop() sql = "select SCHEMA_NAME from information_schema.SCHEMATA " + \ "where SCHEMA_NAME = 'ciclops'" self.cursor.execute(sql) row = self.cursor.fetchone() self.assertEqual("ciclops", row[0]) finally: db = DatabaseManager("ciclops") db.drop_database()
def test_create_database_terminates_the_instance_when_cant_authorize(self): instance = Instance( ec2_id="i-00009", name="home", host="unknown.host", state="running", ) ec2_client = mocks.FakeEC2Client() ec2_client.authorize = lambda *args, **kwargs: False try: t = start_creator(DatabaseManager, ec2_client) create_database(instance, ec2_client) t.stop() self.assertIn("terminate instance home", ec2_client.actions) self.assertIsNotNone(instance.pk) self.assertEqual("error", instance.state) reason = "Failed to authorize access to the instance." self.assertEqual(reason, instance.reason) finally: instance.delete()