Add release test case for query pushdown

Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/5d2f9cfa
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/5d2f9cfa
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/5d2f9cfa

Branch: refs/heads/master
Commit: 5d2f9cfa3a926d23c45f721d233bddd52be0a269
Parents: 35b9d9a
Author: nichunen <chunen...@kyligence.io>
Authored: Mon Sep 11 11:17:03 2017 +0800
Committer: Ni Chunen <zjsy...@sjtu.org>
Committed: Fri Sep 15 14:38:48 2017 +0800

----------------------------------------------------------------------
 build/smoke-test/smoke-test.sh |  7 ++++
 build/smoke-test/testQuery.py  | 68 ++++++++++++++++++++++++++++++++-----
 2 files changed, 66 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/5d2f9cfa/build/smoke-test/smoke-test.sh
----------------------------------------------------------------------
diff --git a/build/smoke-test/smoke-test.sh b/build/smoke-test/smoke-test.sh
index 5c2dfda..0a7e362 100755
--- a/build/smoke-test/smoke-test.sh
+++ b/build/smoke-test/smoke-test.sh
@@ -62,6 +62,13 @@ ${KYLIN_HOME}/bin/sample.sh
 
 ${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.AclTableMigrationCLI MIGRATE
 
+# Enable query push down
+cd ${KYLIN_HOME}
+sed -i 's/#*\(kylin.query.pushdown.runner-class-name*\)/\1/' 
conf/kylin.properties
+sed -i 's/#*\(kylin.query.pushdown.jdbc.url*\)/\1/' conf/kylin.properties
+sed -i 's/#*\(kylin.query.pushdown.jdbc.driver*\)/\1/' conf/kylin.properties
+sed -i 's/#*\(kylin.query.pushdown.jdbc.username*\)/\1/' conf/kylin.properties
+
 ${KYLIN_HOME}/bin/kylin.sh start
 
 echo "Wait 3 minutes for service start."

http://git-wip-us.apache.org/repos/asf/kylin/blob/5d2f9cfa/build/smoke-test/testQuery.py
----------------------------------------------------------------------
diff --git a/build/smoke-test/testQuery.py b/build/smoke-test/testQuery.py
index 99c09d3..ef0fd7a 100644
--- a/build/smoke-test/testQuery.py
+++ b/build/smoke-test/testQuery.py
@@ -24,6 +24,13 @@ import glob
 
 
 class testQuery(unittest.TestCase):
+    base_url = "http://sandbox:7070/kylin/api";
+    headers = {
+        'content-type': "application/json",
+        'authorization': "Basic QURNSU46S1lMSU4=",
+        'cache-control': "no-cache"
+    }
+
     def setUp(self):
         pass
 
@@ -31,19 +38,12 @@ class testQuery(unittest.TestCase):
         pass
 
     def testQuery(self):
-        base_url = "http://sandbox:7070/kylin/api";
-        url = base_url + "/query"
-        headers = {
-            'content-type': "application/json",
-            'authorization': "Basic QURNSU46S1lMSU4=",
-            'cache-control': "no-cache"
-        }
 
         sql_files = glob.glob('sql/*.sql')
         index = 0
+        query_url = testQuery.base_url + "/query"
         for sql_file in sql_files:
             index += 1
-            sql_fp = open(sql_file)
             sql_statement = ''
             sql_statement_lines = open(sql_file).readlines()
             for sql_statement_line in sql_statement_lines:
@@ -51,7 +51,7 @@ class testQuery(unittest.TestCase):
                     sql_statement += sql_statement_line.strip() + ' '
             payload = "{\"sql\": \"" + sql_statement.strip() + "\", 
\"offset\": 0, \"limit\": \"50000\", \"acceptPartial\":false, 
\"project\":\"learn_kylin\"}"
             print 'Test Query #' + str(index) + ': \n' + sql_statement
-            response = requests.request("POST", url, data=payload, 
headers=headers)
+            response = requests.request("POST", query_url, data=payload, 
headers=headers)
 
             self.assertEqual(response.status_code, 200, 'Query failed.')
             actual_result = json.loads(response.text)
@@ -65,6 +65,56 @@ class testQuery(unittest.TestCase):
             expect_result = json.loads(open(sql_file[:-4] + 
'.json').read().strip())
             self.assertEqual(actual_result, expect_result, 'Query result does 
not equal.')
 
+    def testQueryPushDown(self):
+        sql_files = glob.glob('sql/*.sql')
+        index = 0
+        url = testQuery.base_url + "/cubes/kylin_sales_cube/disable"
+        status_code = 0
+        try_time = 1
+        while status_code != 200 and try_time <= 3:
+            print 'Disable cube, try_time = ' + str(try_time)
+            try:
+                response = requests.request("PUT", url, 
headers=testQuery.headers)
+                status_code = response.status_code
+            except:
+                status_code = 0
+                pass
+            if status_code != 200:
+                time.sleep(10)
+                try_time += 1
+
+        self.assertEqual(status_code, 200, 'Disable cube failed.')
+
+        query_url = testQuery.base_url + "/query"
+        for sql_file in sql_files:
+            index += 1
+            sql_statement = ''
+            sql_statement_lines = open(sql_file).readlines()
+            for sql_statement_line in sql_statement_lines:
+                if not sql_statement_line.startswith('--'):
+                    sql_statement += sql_statement_line.strip() + ' '
+            payload = "{\"sql\": \"" + sql_statement.strip() + "\", 
\"offset\": 0, \"limit\": \"50000\", \"acceptPartial\":false, 
\"project\":\"learn_kylin\"}"
+            print 'Test Query #' + str(index) + ': \n' + sql_statement
+            response = requests.request("POST", query_url, data=payload, 
headers=testQuery.headers)
+
+            self.assertEqual(response.status_code, 200, 'Query failed.')
+
+            actual_result = json.loads(response.text)
+            print actual_result
+            print 'Query duration: ' + str(actual_result['data']['duration']) 
+ 'ms'
+            del actual_result['data']['duration']
+            del actual_result['data']['hitExceptionCache']
+            del actual_result['data']['storageCacheUsed']
+            del actual_result['data']['totalScanCount']
+            del actual_result['data']['totalScanBytes']
+            del actual_result['data']['columnMetas']
+
+            expect_result = json.loads(open(sql_file[:-4] + 
'.json').read().strip())
+            del expect_result['data']['columnMetas']
+            expect_result['data']['cube'] = ''
+            expect_result['data']['pushDown'] = True
+            self.assertEqual(actual_result, expect_result, 'Query pushdown\'s 
result does not equal with expected result.')
+
 
 if __name__ == '__main__':
     print 'Test Query for Kylin sample.'

Reply via email to