Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: improve unit test #42527

Merged
merged 19 commits into from Mar 24, 2023
Merged
2 changes: 1 addition & 1 deletion executor/seqtest/BUILD.bazel
Expand Up @@ -2,7 +2,7 @@ load("@io_bazel_rules_go//go:def.bzl", "go_test")

go_test(
name = "seqtest_test",
timeout = "short",
timeout = "moderate",
srcs = [
"main_test.go",
"prepared_test.go",
Expand Down
5 changes: 4 additions & 1 deletion session/BUILD.bazel
Expand Up @@ -61,6 +61,7 @@ go_library(
"//store/driver/error",
"//store/driver/txn",
"//store/helper",
"//store/mockstore",
"//table",
"//table/tables",
"//table/temptable",
Expand Down Expand Up @@ -97,12 +98,14 @@ go_library(
"@com_github_pingcap_failpoint//:failpoint",
"@com_github_pingcap_kvproto//pkg/kvrpcpb",
"@com_github_pingcap_tipb//go-binlog",
"@com_github_stretchr_testify//require",
"@com_github_tikv_client_go_v2//error",
"@com_github_tikv_client_go_v2//kv",
"@com_github_tikv_client_go_v2//oracle",
"@com_github_tikv_client_go_v2//tikv",
"@com_github_tikv_client_go_v2//util",
"@io_etcd_go_etcd_client_v3//concurrency",
"@org_uber_go_atomic//:atomic",
"@org_uber_go_zap//:zap",
"@org_uber_go_zap//zapcore",
],
Expand Down Expand Up @@ -169,7 +172,7 @@ go_test(
"@com_github_stretchr_testify//require",
"@com_github_tikv_client_go_v2//testutils",
"@com_github_tikv_client_go_v2//tikv",
"@org_uber_go_atomic//:atomic",
"@org_uber_go_atomic//:atomic", #keep
"@org_uber_go_goleak//:goleak",
"@org_uber_go_zap//:zap",
"@org_uber_go_zap//zapcore",
Expand Down
134 changes: 0 additions & 134 deletions session/bootstrap_test.go
Expand Up @@ -18,8 +18,6 @@ import (
"context"
"fmt"
"os"
"strconv"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -679,138 +677,6 @@ func TestUpgradeClusteredIndexDefaultValue(t *testing.T) {
domV68.Close()
}

func TestUpgradeVersion66(t *testing.T) {
ctx := context.Background()
store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()
seV65 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(65))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV65, "update mysql.tidb set variable_value='65' where variable_name='tidb_server_version'")
mustExec(t, seV65, "set @@global.tidb_track_aggregate_memory_usage = 0")
mustExec(t, seV65, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV65)
require.NoError(t, err)
require.Equal(t, int64(65), ver)
dom.Close()
domV66, err := BootstrapSession(store)
require.NoError(t, err)

seV66 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV66)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV66, `select @@global.tidb_track_aggregate_memory_usage, @@session.tidb_track_aggregate_memory_usage`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, int64(1), row.GetInt64(0))
require.Equal(t, int64(1), row.GetInt64(1))
domV66.Close()
}

func TestUpgradeVersion74(t *testing.T) {
ctx := context.Background()

cases := []struct {
oldValue int
newValue int
}{
{200, 3000},
{3000, 3000},
{3001, 3001},
}

for _, ca := range cases {
func() {
store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV73 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(73))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV73, "update mysql.tidb set variable_value='72' where variable_name='tidb_server_version'")
mustExec(t, seV73, "set @@global.tidb_stmt_summary_max_stmt_count = "+strconv.Itoa(ca.oldValue))
mustExec(t, seV73, "commit")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV73)
require.NoError(t, err)
require.Equal(t, int64(72), ver)
dom.Close()
domV74, err := BootstrapSession(store)
require.NoError(t, err)
defer domV74.Close()
seV74 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r := mustExecToRecodeSet(t, seV74, `SELECT @@global.tidb_stmt_summary_max_stmt_count`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, strconv.Itoa(ca.newValue), row.GetString(0))
}()
}
}

func TestUpgradeVersion75(t *testing.T) {
ctx := context.Background()

store, dom := createStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV74 := createSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(74))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
mustExec(t, seV74, "update mysql.tidb set variable_value='74' where variable_name='tidb_server_version'")
mustExec(t, seV74, "commit")
mustExec(t, seV74, "ALTER TABLE mysql.user DROP PRIMARY KEY")
mustExec(t, seV74, "ALTER TABLE mysql.user MODIFY COLUMN Host CHAR(64)")
mustExec(t, seV74, "ALTER TABLE mysql.user ADD PRIMARY KEY(Host, User)")
unsetStoreBootstrapped(store.UUID())
ver, err := getBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, int64(74), ver)
r := mustExecToRecodeSet(t, seV74, `desc mysql.user`)
req := r.NewChunk(nil)
row := req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(64)", strings.ToLower(row.GetString(1)))
dom.Close()
domV75, err := BootstrapSession(store)
require.NoError(t, err)
defer domV75.Close()
seV75 := createSessionAndSetID(t, store)
ver, err = getBootstrapVersion(seV75)
require.NoError(t, err)
require.Equal(t, currentBootstrapVersion, ver)
r = mustExecToRecodeSet(t, seV75, `desc mysql.user`)
req = r.NewChunk(nil)
row = req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(255)", strings.ToLower(row.GetString(1)))
}

func TestForIssue23387(t *testing.T) {
// For issue https://github.com/pingcap/tidb/issues/23387
saveCurrentBootstrapVersion := currentBootstrapVersion
Expand Down
2 changes: 2 additions & 0 deletions session/bootstraptest/BUILD.bazel
Expand Up @@ -9,8 +9,10 @@ go_test(
],
flaky = True,
race = "on",
shard_count = 5,
deps = [
"//config",
"//meta",
"//session", #keep
"//testkit", #keep
"//testkit/testmain",
Expand Down
136 changes: 134 additions & 2 deletions session/bootstraptest/bootstrap_upgrade_test.go
Expand Up @@ -12,15 +12,15 @@
// See the License for the specific language governing permissions and
// limitations under the License.

//go:build intest

package bootstraptest_test

import (
"context"
"strconv"
"strings"
"testing"

"github.com/pingcap/tidb/meta"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/testkit"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -88,3 +88,135 @@ func TestUpgradeVersion84(t *testing.T) {
require.Equal(t, statsHistoryTblFields[i].tp, strings.ToLower(row.GetString(1)))
}
}

func TestUpgradeVersion66(t *testing.T) {
ctx := context.Background()
store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()
seV65 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(65))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
session.MustExec(t, seV65, "update mysql.tidb set variable_value='65' where variable_name='tidb_server_version'")
session.MustExec(t, seV65, "set @@global.tidb_track_aggregate_memory_usage = 0")
session.MustExec(t, seV65, "commit")
session.UnsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV65)
require.NoError(t, err)
require.Equal(t, int64(65), ver)
dom.Close()
domV66, err := session.BootstrapSession(store)
require.NoError(t, err)

seV66 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV66)
require.NoError(t, err)
require.Equal(t, session.CurrentBootstrapVersion, ver)
r := session.MustExecToRecodeSet(t, seV66, `select @@global.tidb_track_aggregate_memory_usage, @@session.tidb_track_aggregate_memory_usage`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, int64(1), row.GetInt64(0))
require.Equal(t, int64(1), row.GetInt64(1))
domV66.Close()
}

func TestUpgradeVersion74(t *testing.T) {
ctx := context.Background()

cases := []struct {
oldValue int
newValue int
}{
{200, 3000},
{3000, 3000},
{3001, 3001},
}

for _, ca := range cases {
func() {
store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV73 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(73))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
session.MustExec(t, seV73, "update mysql.tidb set variable_value='72' where variable_name='tidb_server_version'")
session.MustExec(t, seV73, "set @@global.tidb_stmt_summary_max_stmt_count = "+strconv.Itoa(ca.oldValue))
session.MustExec(t, seV73, "commit")
session.UnsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV73)
require.NoError(t, err)
require.Equal(t, int64(72), ver)
dom.Close()
domV74, err := session.BootstrapSession(store)
require.NoError(t, err)
defer domV74.Close()
seV74 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, session.CurrentBootstrapVersion, ver)
r := session.MustExecToRecodeSet(t, seV74, `SELECT @@global.tidb_stmt_summary_max_stmt_count`)
req := r.NewChunk(nil)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, 1, req.NumRows())
row := req.GetRow(0)
require.Equal(t, strconv.Itoa(ca.newValue), row.GetString(0))
}()
}
}

func TestUpgradeVersion75(t *testing.T) {
ctx := context.Background()

store, dom := session.CreateStoreAndBootstrap(t)
defer func() { require.NoError(t, store.Close()) }()

seV74 := session.CreateSessionAndSetID(t, store)
txn, err := store.Begin()
require.NoError(t, err)
m := meta.NewMeta(txn)
err = m.FinishBootstrap(int64(74))
require.NoError(t, err)
err = txn.Commit(context.Background())
require.NoError(t, err)
session.MustExec(t, seV74, "update mysql.tidb set variable_value='74' where variable_name='tidb_server_version'")
session.MustExec(t, seV74, "commit")
session.MustExec(t, seV74, "ALTER TABLE mysql.user DROP PRIMARY KEY")
session.MustExec(t, seV74, "ALTER TABLE mysql.user MODIFY COLUMN Host CHAR(64)")
session.MustExec(t, seV74, "ALTER TABLE mysql.user ADD PRIMARY KEY(Host, User)")
session.UnsetStoreBootstrapped(store.UUID())
ver, err := session.GetBootstrapVersion(seV74)
require.NoError(t, err)
require.Equal(t, int64(74), ver)
r := session.MustExecToRecodeSet(t, seV74, `desc mysql.user`)
req := r.NewChunk(nil)
row := req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(64)", strings.ToLower(row.GetString(1)))
dom.Close()
domV75, err := session.BootstrapSession(store)
require.NoError(t, err)
defer domV75.Close()
seV75 := session.CreateSessionAndSetID(t, store)
ver, err = session.GetBootstrapVersion(seV75)
require.NoError(t, err)
require.Equal(t, session.CurrentBootstrapVersion, ver)
r = session.MustExecToRecodeSet(t, seV75, `desc mysql.user`)
req = r.NewChunk(nil)
row = req.GetRow(0)
require.NoError(t, r.Next(ctx, req))
require.Equal(t, "host", strings.ToLower(row.GetString(0)))
require.Equal(t, "char(255)", strings.ToLower(row.GetString(1)))
}