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/security_update 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.'