Example #1
0
 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)
Example #2
0
 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])
Example #3
0
 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)
Example #5
0
 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)
Example #6
0
 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")
Example #8
0
 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)
Example #9
0
 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")
Example #10
0
 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")
Example #11
0
 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()
Example #12
0
 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()