Add unittest framework for Yardstick API 83/27083/1
authorchenjiankun <chenjiankun1@huawei.com>
Tue, 17 Jan 2017 15:40:17 +0000 (15:40 +0000)
committerchenjiankun <chenjiankun1@huawei.com>
Tue, 17 Jan 2017 15:40:17 +0000 (15:40 +0000)
JIRA: YARDSTICK-538

Currently it is hard to test API, So I add a base class as flask
document do.
In this framework I will mock a temp sqlite database and a server.

Change-Id: If881233cb22655617c07ad018201b8ee08492d06
Signed-off-by: chenjiankun <chenjiankun1@huawei.com>
api/conf.py
api/database/__init__.py
api/server.py
tests/unit/apiserver/__init__.py [new file with mode: 0644]
tests/unit/apiserver/resources/__init__.py [new file with mode: 0644]
tests/unit/apiserver/resources/test_env_action.py [new file with mode: 0644]
tests/unit/apiserver/utils/test_common.py [moved from tests/unit/api/utils/test_common.py with 100% similarity]
tests/unit/apiserver/utils/test_influx.py [moved from tests/unit/api/utils/test_influx.py with 100% similarity]
yardstick/common/constants.py

index abaf34a..a4f3325 100644 (file)
@@ -15,8 +15,6 @@ with IPDB() as ip:
     GATEWAY_IP = ip.routes['default'].gateway
 PORT = 8086
 
-TEST_ACTION = ['runTestCase']
-
 TEST_CASE_PATH = '../tests/opnfv/test_cases/'
 
 SAMPLE_PATH = '../samples/'
index d7cf4f9..753b346 100644 (file)
@@ -13,10 +13,12 @@ from sqlalchemy import create_engine
 from sqlalchemy.orm import scoped_session, sessionmaker
 from sqlalchemy.ext.declarative import declarative_base
 
+from yardstick.common import constants as consts
+
 logger = logging.getLogger(__name__)
 logger.setLevel(logging.DEBUG)
 
-engine = create_engine('sqlite:////tmp/yardstick.db', convert_unicode=True)
+engine = create_engine(consts.SQLITE, convert_unicode=True)
 db_session = scoped_session(sessionmaker(autocommit=False,
                                          autoflush=False,
                                          bind=engine))
index 5bac1ba..be79634 100644 (file)
@@ -52,7 +52,6 @@ def init_db():
     Base.metadata.create_all(bind=engine)
 
 
-init_db()
 reduce(lambda a, b: a.add_resource(b.resource, b.url,
                                    endpoint=b.endpoint) or a, urlpatterns, api)
 
@@ -60,4 +59,5 @@ if __name__ == '__main__':
     _init_logging()
     logger.setLevel(logging.DEBUG)
     logger.info('Starting server')
+    init_db()
     app.run(host='0.0.0.0')
diff --git a/tests/unit/apiserver/__init__.py b/tests/unit/apiserver/__init__.py
new file mode 100644 (file)
index 0000000..0214152
--- /dev/null
@@ -0,0 +1,35 @@
+from __future__ import absolute_import
+
+import os
+import unittest
+import tempfile
+
+from oslo_serialization import jsonutils
+
+from yardstick.common import constants as consts
+
+
+class APITestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.db_fd, self.db_path = tempfile.mkstemp()
+        consts.SQLITE = 'sqlite:///{}'.format(self.db_path)
+        from api import server
+
+        server.app.config['TESTING'] = True
+        self.app = server.app.test_client()
+
+        server.init_db()
+
+    def tearDown(self):
+        os.close(self.db_fd)
+        os.unlink(self.db_path)
+
+    def _post(self, url, data):
+        headers = {'Content-Type': 'application/json'}
+        resp = self.app.post(url, data=jsonutils.dumps(data), headers=headers)
+        return jsonutils.loads(resp.data)
+
+    def _get(self, url):
+        resp = self.app.get(url)
+        return jsonutils.loads(resp.data)
diff --git a/tests/unit/apiserver/resources/__init__.py b/tests/unit/apiserver/resources/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/unit/apiserver/resources/test_env_action.py b/tests/unit/apiserver/resources/test_env_action.py
new file mode 100644 (file)
index 0000000..e8f99b7
--- /dev/null
@@ -0,0 +1,32 @@
+from __future__ import absolute_import
+
+import time
+import unittest
+
+from tests.unit.apiserver import APITestCase
+
+
+class EnvTestCase(APITestCase):
+
+    def test_create_grafana(self):
+        url = 'yardstick/env/action'
+        data = dict(action='createGrafanaContainer')
+        resp = self._post(url, data)
+
+        time.sleep(1)
+
+        task_id = resp['result']['task_id']
+        url = '/yardstick/asynctask?task_id={}'.format(task_id)
+        resp = self._get(url)
+
+        time.sleep(2)
+
+        self.assertTrue(u'status' in resp)
+
+
+def main():
+    unittest.main()
+
+
+if __name__ == '__main__':
+    main()
index d99e216..ffca4b3 100644 (file)
@@ -55,3 +55,5 @@ OPENSTACK_RC_FILE = join(YARDSTICK_CONFIG_DIR, 'openstack.creds')
 BASE_URL = 'http://localhost:5000'
 ENV_ACTION_API = BASE_URL + '/yardstick/env/action'
 ASYNC_TASK_API = BASE_URL + '/yardstick/asynctask'
+
+SQLITE = 'sqlite:////tmp/yardstick.db'