From 49c5977a4a7f6a77fe238c4b43c0ecb52ca0ec8b Mon Sep 17 00:00:00 2001 From: Susmitha Date: Thu, 2 Jun 2016 18:40:54 -0700 Subject: [PATCH] Fix for IAAS-5516, IAAS-5517: get API for mors not returning right value Without this fix, get API always returns first entry in the table irrespective of tenant_id/instance_uuid lease requested. --- mors/persistence.py | 17 ++++---- test/run_tests.py | 4 +- test/test_persistence.py | 84 ++++++++++++++++++++++++++-------------- 3 files changed, 68 insertions(+), 37 deletions(-) diff --git a/mors/persistence.py b/mors/persistence.py index cc84799..d7caa13 100644 --- a/mors/persistence.py +++ b/mors/persistence.py @@ -57,7 +57,7 @@ class DbPersistence: @db_connect(transaction=False) def get_tenant_lease(self, conn, tenant_uuid): - return conn.execute(self.tenant_lease.select(tenant_uuid == tenant_uuid)).first() + return conn.execute(self.tenant_lease.select(self.tenant_lease.c.tenant_uuid == tenant_uuid)).first() @db_connect(transaction=True) def add_tenant_lease(self, conn, tenant_uuid, expiry_mins, created_by, created_at): @@ -68,8 +68,10 @@ class DbPersistence: @db_connect(transaction=True) def update_tenant_lease(self, conn, tenant_uuid, expiry_mins, updated_by, updated_at): logger.debug("Updating tenant lease %s %d %s %s", tenant_uuid, expiry_mins, str(updated_at), updated_by) - conn.execute(self.tenant_lease.update(tenant_uuid == tenant_uuid), expiry_mins=expiry_mins, - updated_at=updated_at, updated_by=updated_by) + conn.execute(self.tenant_lease.update().\ + where(self.tenant_lease.c.tenant_uuid == tenant_uuid).\ + values(expiry_mins=expiry_mins, + updated_at=updated_at, updated_by=updated_by)) @db_connect(transaction=True) def delete_tenant_lease(self, conn, tenant_uuid): @@ -80,12 +82,13 @@ class DbPersistence: @db_connect(transaction=False) def get_instance_leases_by_tenant(self, conn, tenant_uuid): - return conn.execute(self.instance_lease.select(tenant_uuid == tenant_uuid)).fetchall() - + return conn.execute(self.instance_lease.select(\ + self.instance_lease.c.tenant_uuid == tenant_uuid)).fetchall() + @db_connect(transaction=False) def get_instance_lease(self, conn, instance_uuid): - return conn.execute( - self.instance_lease.select((instance_uuid == instance_uuid))).first() + return conn.execute(self.instance_lease.select((\ + self.instance_lease.c.instance_uuid == instance_uuid))).first() @db_connect(transaction=True) def add_instance_lease(self, conn, instance_uuid, tenant_uuid, expiry, created_by, created_at): diff --git a/test/run_tests.py b/test/run_tests.py index 1728898..eeed199 100644 --- a/test/run_tests.py +++ b/test/run_tests.py @@ -3,7 +3,7 @@ def run_tests(): from proboscis import TestProgram - import test_api + import test_api, test_persistence # Run Proboscis and exit. print "Starting tests ---" @@ -12,4 +12,4 @@ def run_tests(): if __name__ == '__main__': print "Run tests" - run_tests() \ No newline at end of file + run_tests() diff --git a/test/test_persistence.py b/test/test_persistence.py index ed34256..351e7c2 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -1,56 +1,84 @@ +from proboscis import test from mors.persistence import DbPersistence -import pytest +import uuid +import logging from migrate.versioning.api import upgrade,create,version_control from datetime import datetime import os +import shutil +logger = logging.getLogger(__name__) db_persistence = None TEST_DB="test/test_db11" -def setup_module(mod): +@test +def setup_module(): + if os.path.exists(TEST_DB): + os.remove(TEST_DB) global db_persistence DB_URL = "sqlite:///"+TEST_DB + if os.path.exists(DB_URL): + shutil.rmtree(DB_URL) create(DB_URL, "./mors_repo") version_control(DB_URL, "./mors_repo") upgrade(DB_URL,"./mors_repo") db_persistence = DbPersistence(DB_URL) return db_persistence -def teardown_module(mod): +def teardown_module(): os.unlink(TEST_DB) -def test_apis(): - tenant_id = "aasdsadfsadf" - tenant_user1 = "a@xyz.com" - expiry_mins1 = 3 - tenant_created_date = datetime.utcnow() +def _verify_tenant_lease(tenants): + for tenant in tenants: + t_lease = db_persistence.get_tenant_lease(tenant) + assert (t_lease.tenant_uuid == tenant) + assert (t_lease.created_by == tenants[tenant]["user"]) + assert (t_lease.created_at == tenants[tenant]["tenant_created_date"]) + if "updated_by" in tenants[tenant].keys(): + assert (t_lease.updated_by == tenants[tenant]["updated_by"]) + if "updated_at" in tenants[tenant].keys(): + assert (t_lease.updated_at == tenants[tenant]["updated_at"]) - db_persistence.add_tenant_lease(tenant_id, expiry_mins1, tenant_user1, tenant_created_date) - t_lease = db_persistence.get_tenant_lease(tenant_id) - assert (t_lease.tenant_uuid == tenant_id) - assert (t_lease.created_by == tenant_user1) - assert (t_lease.created_at == tenant_created_date) +@test(depends_on=[setup_module]) +def test_apis(): + tenants = {"tenant-1": { "user": "a@xyz.com", + "expiry_mins": 3, + "tenant_created_date": datetime.utcnow()}, + "tenant-2": { "user": "c@xyz.com", + "expiry_mins": 1, + "tenant_created_date": datetime.utcnow()}} + + for tenant in tenants: + db_persistence.add_tenant_lease(tenant, tenants[tenant]["expiry_mins"], + tenants[tenant]["user"], + tenants[tenant]["tenant_created_date"]) + _verify_tenant_lease(tenants) # Now try update - tenant_user2 = "b@xyz.com" + tenants["tenant-1"]["updated_by"] = "b@xyz.com" + tenants["tenant-2"]["updated_by"] = "d@xyz.com" tenant_updated_date = datetime.utcnow() - db_persistence.update_tenant_lease(tenant_id, expiry_mins1, tenant_user2, tenant_updated_date) - t_lease = db_persistence.get_tenant_lease(tenant_id) - assert (t_lease.tenant_uuid == tenant_id) - assert (t_lease.created_by == tenant_user1) - assert (t_lease.updated_by == tenant_user2) - assert (t_lease.created_at == tenant_created_date) - assert (t_lease.updated_at == tenant_updated_date) + for tenant in tenants: + tenants[tenant]["updated_at"] = tenant_updated_date + tenant_values = tenants[tenant] + db_persistence.update_tenant_lease(tenant, tenant_values["expiry_mins"], + tenant_values["updated_by"], tenant_values["updated_at"]) + _verify_tenant_lease(tenants) # Instance lease now - instance_uuid = "asdf2-2342-23423" + instance_uuids = [str(uuid.uuid4()), str(uuid.uuid4())] + tenant_id = tenants.keys()[0] now = datetime.utcnow() - db_persistence.add_instance_lease(instance_uuid, tenant_id, now, tenant_user1, now) - i_lease = db_persistence.get_instance_lease(instance_uuid, tenant_id) - assert (i_lease.instance_uuid == instance_uuid) - assert (i_lease.tenant_uuid == tenant_id) - assert (i_lease.expiry == now) - assert (i_lease.created_by == tenant_user1) + for instance_uuid in instance_uuids: + db_persistence.add_instance_lease(instance_uuid, tenant_id, now, tenants[tenant_id]["user"], now) + for instance_uuid in instance_uuids: + logger.debug("1" + str(tenant_id)) + logger.debug("2"+ str(instance_uuid)) + i_lease = db_persistence.get_instance_lease(instance_uuid) + assert (i_lease.instance_uuid == instance_uuid) + assert (i_lease.tenant_uuid == tenant_id) + assert (i_lease.expiry == now) + assert (i_lease.created_by == tenants[tenant_id]["user"])