681 lines
26 KiB
Python
681 lines
26 KiB
Python
#!/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
"""
|
|
test insert into value txn
|
|
Date: 2021-01-07 14:54:38
|
|
"""
|
|
|
|
import time
|
|
import sys
|
|
import random
|
|
import pytest
|
|
sys.path.append("../")
|
|
from lib import palo_client
|
|
from lib import palo_config
|
|
from lib import util
|
|
from lib import common
|
|
from data import schema as DATA
|
|
|
|
client = None
|
|
config = palo_config.config
|
|
LOG = palo_client.LOG
|
|
L = palo_client.L
|
|
|
|
|
|
def setup_module():
|
|
"""
|
|
set up
|
|
"""
|
|
pass
|
|
|
|
|
|
def test_txn_basic():
|
|
"""
|
|
{
|
|
"title": "test_txn_basic",
|
|
"describe": "事务基本测试,commit & rollback",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
# begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# begin insert rollback check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.rollback(), 'rollback failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_commit():
|
|
"""
|
|
{
|
|
"title": "test_txn_commit",
|
|
"describe": "多次连续执行commit,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
# begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# commit again & check
|
|
retry = 10
|
|
while retry > 0:
|
|
assert client.commit(), 'commit failed'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
retry -= 1
|
|
time.sleep(1)
|
|
# new txn begin insert rollback check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1 union select 1, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_rollback():
|
|
"""
|
|
{
|
|
"title": "test_txn_rollback",
|
|
"describe": "多次连续执行rollback,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
# begin insert rollback check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.rollback(), 'rollback failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
ret = client.execute(sql1)
|
|
assert len(ret) == 0, 'check data failed'
|
|
# retry rollback
|
|
retry = 10
|
|
while retry > 0:
|
|
client.rollback()
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
ret = client.execute(sql1)
|
|
assert len(ret) == 0, 'check data failed'
|
|
retry -= 1
|
|
time.sleep(1)
|
|
# new txn begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 1, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_begin():
|
|
"""
|
|
{
|
|
"title": "test_txn_begin",
|
|
"describe": "多次连续执行begin,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
# begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
# begin again & check
|
|
retry = 10
|
|
while retry > 0:
|
|
assert client.begin(), 'begin failed'
|
|
retry -= 1
|
|
time.sleep(1)
|
|
# new txn begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1 union select 1, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_empty_txn():
|
|
"""
|
|
{
|
|
"title": "test_empty_txn",
|
|
"describe": "begin后直接执行rollback/commit,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
assert client.commit(), 'commit failed'
|
|
assert client.begin(), 'begin failed'
|
|
assert client.rollback(), 'rollback failed'
|
|
ret = client.select_all(table_name)
|
|
assert ret == (), 'check data error'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_not_support():
|
|
"""
|
|
{
|
|
"title": "test_txn_not_support",
|
|
"describe": "事务中不支持执行select,delete,show,alter,load等操作",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
ret = client.create_table(table_name, DATA.int_column_list)
|
|
assert ret, 'create table failed'
|
|
# begin insert commit check
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
sql = 'select * from %s.%s' % (database_name, table_name)
|
|
msg = 'This is in a transaction, only insert, commit, rollback is acceptable'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
util.assert_return(False, msg, client.delete, table_name, [("k1", "=", "0")])
|
|
sql = 'show tables'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)'
|
|
msg = ' '
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
sql = 'insert into %s.%s values(0, 1, 2, 3)'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
sql = ''
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2, forced=True)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_db_table():
|
|
"""
|
|
{
|
|
"title": "test_txn_db_table",
|
|
"describe": "不执行use db,直接执行insert",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.get_client()
|
|
client.clean(database_name)
|
|
assert client.create_database(database_name), 'create database failed'
|
|
ret = client.create_table(table_name, DATA.int_column_list, database_name=database_name)
|
|
assert ret, 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_insert_fail():
|
|
"""
|
|
{
|
|
"title": "test_txn_insert_fail",
|
|
"describe": "事务中,有的insert成功,有的insert失败,事务提交正确,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
"""
|
|
当事务中,有的insert成功,有的insert失败,事务提交正确,状态正确
|
|
not Null列插入Null值,无报错信息,Null值未插入
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.set_variables('enable_insert_strict', 'false')
|
|
ret = client.create_table(table_name, DATA.int_column_list, set_null=False)
|
|
assert ret, 'create table failed'
|
|
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, null, null, null, null),' \
|
|
'(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == ()
|
|
#msg = 'Column cat not be null, rowIdx = 0, column = v1'
|
|
#util.assert_return(False, msg, client.execute, sql)
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
ret = client.execute(sql1)
|
|
assert len(ret) == 1, 'check data error'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(null, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
#msg = 'Column cat not be null, rowIdx = 0, column = k1'
|
|
#util.assert_return(False, msg, client.execute, sql)
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
client.commit()
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
sql2 = 'select 1, 2, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_insert_fail_1():
|
|
"""
|
|
{
|
|
"title": "test_txn_insert_fail",
|
|
"describe": "事务中,有的insert成功,有的insert失败,事务提交正确,状态正确",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
"""
|
|
当事务中,有的insert成功,有的insert失败,事务提交正确,状态正确
|
|
not Null列插入Null值,无报错信息,Null值未插入
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.set_variables('enable_insert_strict', 'true')
|
|
ret = client.create_table(table_name, DATA.int_column_list, set_null=False)
|
|
assert ret, 'create table failed'
|
|
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, null, null, null, null),' \
|
|
'(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
ret = client.execute(sql)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
msg = 'too many filtered rows'
|
|
util.assert_return(False, msg, client.commit)
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
ret = client.execute(sql1)
|
|
assert len(ret) == 0, 'check data error'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(null, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
sql = 'insert into %s.%s values(1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
msg = 'too many filtered rows'
|
|
util.assert_return(False, msg, client.commit)
|
|
sql1 = 'select * from %s.%s' % (database_name, table_name)
|
|
ret = client.execute(sql1)
|
|
assert len(ret) == 0, 'check data error'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_insert_multi_table():
|
|
"""
|
|
{
|
|
"title": "test_txn_insert_multi_table",
|
|
"describe": "一个事务中,向多个表插入值",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
tb1 = table_name + '_1'
|
|
tb2 = table_name + '_2'
|
|
ret = client.create_table(tb1, DATA.int_column_list, set_null=False)
|
|
assert ret, 'create table failed'
|
|
ret = client.create_table(tb2, DATA.int_column_list, set_null=False)
|
|
assert ret, 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, tb1)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1)' % (database_name, tb2)
|
|
msg = 'Only one table can be inserted in one transaction.'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s'
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1 % (database_name, tb1), sql2=sql2)
|
|
ret = client.execute(sql1 % (database_name, tb2))
|
|
print(ret)
|
|
assert len(ret) == 0, 'check data failed'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_multi_con():
|
|
"""
|
|
{
|
|
"title": "test_txn_multi_con",
|
|
"describe": "多个连接同时执行事务,结果正确",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
"""多个连接同时执行事务,结果正确, unique表"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
db1 = database_name + '_1'
|
|
db2 = database_name + '_2'
|
|
client1 = common.create_workspace(db1)
|
|
client2 = common.create_workspace(db2)
|
|
assert client1.create_table(table_name, DATA.int_column_list), 'create table failed'
|
|
assert client2.create_table(table_name, DATA.int_column_list), 'create table failed'
|
|
assert client1.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)'
|
|
assert client1.execute(sql % (db1, table_name)) == (), 'insert failed'
|
|
assert client2.begin(), 'begin failed'
|
|
assert client2.execute(sql % (db2, table_name)) == (), 'insert failed'
|
|
assert client2.commit(), 'commit failed'
|
|
assert client1.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s order by k1'
|
|
sql2 = 'select 0, 1, 1, 1, 1 union select 1, 1, 1, 1, 1'
|
|
common.check2(client1, sql1=sql1 % (db1, table_name), sql2=sql2, forced=True)
|
|
common.check2(client2, sql1=sql1 % (db2, table_name), sql2=sql2, forced=True)
|
|
client1.clean(db1)
|
|
client2.clean(db2)
|
|
|
|
|
|
def test_txn_multi_con_1():
|
|
"""
|
|
{
|
|
"title": "test_txn_multi_con_1",
|
|
"describe": "多个事务并发执行,插入同一张表",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
client2 = common.get_client()
|
|
client2.use(database_name)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client2.begin(), 'begin failed'
|
|
assert client2.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
assert client2.commit(), 'commit failed'
|
|
sql = 'select * from %s.%s order by k1' % (database_name, table_name)
|
|
ret = client.execute(sql)
|
|
ret2 = ((0, 1, 1, 1, 1), (0, 1, 1, 1, 1), (1, 1, 1, 1, 1), (1, 1, 1, 1, 1))
|
|
util.check(ret, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_multi_fe():
|
|
"""
|
|
{
|
|
"title": "test_txn_multi_fe",
|
|
"describe": "不同fe上执行事务,预期均执行成功,状态正确",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
other_fe = random.choice(client.get_fe_host())
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
client2 = palo_client.get_client(other_fe, config.fe_query_port, user=config.fe_user,
|
|
password=config.fe_password, http_port=config.fe_http_port)
|
|
client2.use(database_name)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client2.begin(), 'begin failed'
|
|
assert client2.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
assert client2.commit(), 'commit failed'
|
|
sql = 'select * from %s.%s order by k1' % (database_name, table_name)
|
|
ret = client.execute(sql)
|
|
ret2 = ((0, 1, 1, 1, 1), (0, 1, 1, 1, 1), (1, 1, 1, 1, 1), (1, 1, 1, 1, 1))
|
|
util.check(ret, ret2)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_strict():
|
|
"""
|
|
{
|
|
"title": "test_txn_strict",
|
|
"describe": "insert的数据不符合规范,对事务正确执行",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values("a", "b", "1", "1", "1")' % (database_name, table_name)
|
|
msg = 'Invalid number format: a'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
sql = 'insert into %s.%s values("a", "b", "1", "1", "1"), (1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
msg = 'Invalid number format: a'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
sql = 'insert into %s.%s values("0", "1", "1", "1", "1")' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit(), 'commit failed'
|
|
sql1 = 'select * from %s.%s order by k1' % (database_name, table_name)
|
|
sql2 = 'select 0, 1, 1, 1, 1'
|
|
common.check2(client, sql1=sql1, sql2=sql2)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(2147483649, 1, 1, 1, 1)' % (database_name, table_name)
|
|
msg = 'Number out of range[2147483649]. type: INT'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
client.commit()
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_drop_db():
|
|
"""
|
|
{
|
|
"title": "test_txn_drop_db",
|
|
"describe": "在事务提交前,drop db,状态正常",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
client2 = common.get_client()
|
|
client2.use(database_name)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client2.drop_database(database_name), 'drop db failed'
|
|
msg = 'Unknown database'
|
|
util.assert_return(False, msg, client.commit)
|
|
sql = 'select * from test_query_qa.baseall order by k1'
|
|
client.execute(sql)
|
|
client.begin()
|
|
util.assert_return(True, ' ', client.commit)
|
|
util.assert_return(True, ' ', client.rollback)
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_drop_tb():
|
|
"""
|
|
{
|
|
"title": "test_txn_drop_tb",
|
|
"describe": "在事务提交前,drop tb",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
client2 = common.get_client()
|
|
client2.use(database_name)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(0, 1, 1, 1, 1), (1, 1, 1, 1, 1)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client2.drop_table(table_name), 'drop table failed'
|
|
msg = 'unknown table, tableName='
|
|
util.assert_return(False, msg, client.commit)
|
|
sql = 'select * from test_query_qa.baseall order by k1'
|
|
assert client.execute(sql), 'select failed'
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_insert_select():
|
|
"""
|
|
{
|
|
"title": "test_txn_insert_select",
|
|
"describe": "在事务中,不支持insert select操作",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s select k1, k1+1, k1+2, k1+3, k1+4 from %s.baseall' % \
|
|
(database_name, table_name, 'test_query_qa')
|
|
msg = 'Insert into ** select is not supported in a transaction'
|
|
util.assert_return(False, msg, client.execute, sql)
|
|
assert client.commit(), 'commit failed'
|
|
client.clean(database_name)
|
|
|
|
|
|
@pytest.mark.skip()
|
|
def test_txn_timeout():
|
|
"""
|
|
skip: txn timeout change to 14400000ms
|
|
{
|
|
"title": "test_txn_timeout",
|
|
"describe": "在事务中,insert超时失败",
|
|
"tag": "fuzz,p2"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 2, 3, 4, 5)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
time.sleep(605)
|
|
print('sleep 605')
|
|
sql = 'insert into %s.%s values(2, 2, 3, 4, 5)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
# msg = 'commit failed, rollback.'
|
|
msg = 'timeout by txn manager'
|
|
util.assert_return(False, msg, client.commit)
|
|
client.select_all(table_name)
|
|
client.rollback()
|
|
client.clean(database_name)
|
|
|
|
|
|
def test_txn_after_batch_delete():
|
|
"""
|
|
{
|
|
"title": "test_txn_after_batch_delete",
|
|
"describe": "开启batch delete后,执行insert事务",
|
|
"tag": "fuzz,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list, keys_desc=DATA.unique_key)
|
|
assert client.begin(), 'begin failed'
|
|
sql = 'insert into %s.%s values(1, 2, 3, 4, 5)' % (database_name, table_name)
|
|
assert client.execute(sql) == (), 'insert failed'
|
|
assert client.commit()
|
|
ret = client.select_all(table_name)
|
|
assert ret == ((1, 2, 3, 4, 5),)
|
|
client.clean(database_name)
|
|
|
|
|
|
def gen_values(file):
|
|
"""
|
|
get values from file
|
|
"""
|
|
value_list = list()
|
|
with open(file) as f:
|
|
line = f.readline()
|
|
while line:
|
|
value_list.append('(%s)' % line.replace('\t', ','))
|
|
line = f.readline()
|
|
return value_list
|
|
|
|
|
|
def test_txn_multi_insert():
|
|
"""
|
|
{
|
|
"title": "test_txn_multi_insert",
|
|
"describe": "在事务中,执行多个insert",
|
|
"tag": "function,p1"
|
|
}
|
|
"""
|
|
database_name, table_name, index_name = util.gen_name_list()
|
|
client = common.create_workspace(database_name)
|
|
assert client.create_table(table_name, DATA.int_column_no_agg_list), 'create table failed'
|
|
assert client.begin(), 'begin error'
|
|
# 读取文件,生成相应insert sql
|
|
file = './data/SMALL_LOAD_SIMPLE/expe_test_hash_int.data'
|
|
values = gen_values(file)
|
|
for v in values:
|
|
sql = 'insert into %s.%s values %s' % (database_name, table_name, v)
|
|
try:
|
|
client.execute(sql)
|
|
except Exception as e:
|
|
print(values.index(v))
|
|
print(e)
|
|
LOG.info(L('insert failed', msg=str(e)))
|
|
try:
|
|
assert client.commit(), 'commit error'
|
|
except Exception as e:
|
|
print(str(e))
|
|
expect_file = './data/SMALL_LOAD_SIMPLE/expe_test_hash_int.data'
|
|
assert client.verify(expect_file, table_name), 'data check error'
|
|
assert client.truncate(table_name), 'truncate table failed'
|
|
assert client.begin(), 'begin error'
|
|
sql = 'insert into %s.%s values %s' % (database_name, table_name, ','.join(values))
|
|
client.execute(sql)
|
|
assert client.commit(), 'commit error'
|
|
assert client.verify(expect_file, table_name), 'data check error'
|
|
client.clean(database_name,)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
test_txn_insert_fail()
|