Files
tidb/pkg/server/tests/tidb_serial_test.go
2024-02-01 04:06:24 +00:00

170 lines
5.0 KiB
Go

// Copyright 2021 PingCAP, Inc.
//
// Licensed 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.
package tests
import (
"context"
"testing"
"github.com/pingcap/failpoint"
tmysql "github.com/pingcap/tidb/pkg/parser/mysql"
util2 "github.com/pingcap/tidb/pkg/server/internal/util"
"github.com/pingcap/tidb/pkg/server/tests/servertestkit"
"github.com/pingcap/tidb/pkg/testkit"
"github.com/stretchr/testify/require"
)
// this test will change `kv.TxnTotalSizeLimit` which may affect other test suites,
// so we must make it running in serial.
func TestLoadData1(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestLoadDataWithColumnList(t, ts.Server)
ts.RunTestLoadData(t, ts.Server)
ts.RunTestLoadDataWithSelectIntoOutfile(t)
ts.RunTestLoadDataForSlowLog(t)
}
func TestLoadDataInTransaction(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestLoadDataInTransaction(t)
}
func TestConfigDefaultValue(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestsOnNewDB(t, nil, "config", func(dbt *testkit.DBTestKit) {
rows := dbt.MustQuery("select @@tidb_slow_log_threshold;")
ts.CheckRows(t, rows, "300")
})
}
// Fix issue#22540. Change tidb_dml_batch_size,
// then check if load data into table with auto random column works properly.
func TestLoadDataAutoRandom(t *testing.T) {
err := failpoint.Enable("github.com/pingcap/tidb/pkg/executor/BeforeCommitWork", "sleep(1000)")
require.NoError(t, err)
defer func() {
//nolint:errcheck
_ = failpoint.Disable("github.com/pingcap/tidb/pkg/executor/BeforeCommitWork")
}()
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestLoadDataAutoRandom(t)
}
func TestLoadDataAutoRandomWithSpecialTerm(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestLoadDataAutoRandomWithSpecialTerm(t)
}
func TestExplainFor(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestExplainForConn(t)
}
func TestStmtCount(t *testing.T) {
cfg := util2.NewTestConfig()
cfg.Port = 0
cfg.Status.ReportStatus = true
cfg.Status.StatusPort = 0
cfg.Status.RecordDBLabel = false
cfg.Performance.TCPKeepAlive = true
ts := servertestkit.CreateTidbTestSuiteWithCfg(t, cfg)
ts.RunTestStmtCount(t)
}
func TestDBStmtCount(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestDBStmtCount(t)
}
func TestLoadDataListPartition(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
ts.RunTestLoadDataForListPartition(t)
ts.RunTestLoadDataForListPartition2(t)
ts.RunTestLoadDataForListColumnPartition(t)
ts.RunTestLoadDataForListColumnPartition2(t)
}
func TestPrepareExecute(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
qctx, err := ts.Tidbdrv.OpenCtx(uint64(0), 0, uint8(tmysql.DefaultCollationID), "test", nil, nil)
require.NoError(t, err)
ctx := context.Background()
_, err = qctx.Execute(ctx, "use test")
require.NoError(t, err)
_, err = qctx.Execute(ctx, "create table t1(id int primary key, v int)")
require.NoError(t, err)
_, err = qctx.Execute(ctx, "insert into t1 values(1, 100)")
require.NoError(t, err)
stmt, _, _, err := qctx.Prepare("select * from t1 where id=1")
require.NoError(t, err)
rs, err := stmt.Execute(ctx, nil)
require.NoError(t, err)
req := rs.NewChunk(nil)
require.NoError(t, rs.Next(ctx, req))
require.Equal(t, 2, req.NumCols())
require.Equal(t, req.NumCols(), len(rs.Columns()))
require.Equal(t, 1, req.NumRows())
require.Equal(t, int64(1), req.GetRow(0).GetInt64(0))
require.Equal(t, int64(100), req.GetRow(0).GetInt64(1))
// issue #33509
_, err = qctx.Execute(ctx, "alter table t1 drop column v")
require.NoError(t, err)
rs, err = stmt.Execute(ctx, nil)
require.NoError(t, err)
req = rs.NewChunk(nil)
require.NoError(t, rs.Next(ctx, req))
require.Equal(t, 1, req.NumCols())
require.Equal(t, req.NumCols(), len(rs.Columns()))
require.Equal(t, 1, req.NumRows())
require.Equal(t, int64(1), req.GetRow(0).GetInt64(0))
}
func TestDefaultCharacterAndCollation(t *testing.T) {
ts := servertestkit.CreateTidbTestSuite(t)
// issue #21194
// 255 is the collation id of mysql client 8 default collation_connection
qctx, err := ts.Tidbdrv.OpenCtx(uint64(0), 0, uint8(255), "test", nil, nil)
require.NoError(t, err)
testCase := []struct {
variable string
except string
}{
{"collation_connection", "utf8mb4_0900_ai_ci"},
{"character_set_connection", "utf8mb4"},
{"character_set_client", "utf8mb4"},
}
for _, tc := range testCase {
sVars, b := qctx.GetSessionVars().GetSystemVar(tc.variable)
require.True(t, b)
require.Equal(t, tc.except, sVars)
}
}