Skip to content

Commit

Permalink
add ut
Browse files Browse the repository at this point in the history
Signed-off-by: joccau <zak.zhao@pingcap.cn>
  • Loading branch information
joccau committed Sep 12, 2024
1 parent 24f0b63 commit 9bdf13b
Show file tree
Hide file tree
Showing 2 changed files with 252 additions and 5 deletions.
25 changes: 20 additions & 5 deletions pkg/meta/model/job_args.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,15 +290,17 @@ func (a *ModifyColumnArgs) fillJob(job *Job) {
job.Args = []any{&a.NewCol, a.OldColName, a.Pos, a.ModifyColumnTp,
a.UpdatedAutoRandomBits, a.ChangingCol, a.ChangingIdxs, a.RemovedIdxs}
job.CtxVars = []any{a.NeedChangeColData}
} else {
job.Args = []any{a}
}
job.Args = []any{a}
}

func (a *ModifyColumnArgs) fillFinishedJob(job *Job) {
if job.Version <= JobVersion1 {
job.Args = []any{a.IndexIDs, a.PartitionIDs}
} else {
job.Args = []any{a}
}
job.Args = []any{a}
}

// GetModifyColumnArgs gets the args for modifying column job.
Expand All @@ -324,8 +326,8 @@ func getModifyColumnArgs(job *Job, argsOfFinished bool) (*ModifyColumnArgs, erro
}, nil
}

// not argsOfFinished
return &ModifyColumnArgs{
// for argsOfFinished = false.
args := &ModifyColumnArgs{
ModifyingColInfo: &ModifyingColInfo{
NewCol: *job.Args[0].(**ColumnInfo),
OldColName: job.Args[1].(model.CIStr),
Expand All @@ -336,7 +338,11 @@ func getModifyColumnArgs(job *Job, argsOfFinished bool) (*ModifyColumnArgs, erro
ChangingIdxs: job.Args[6].([]*IndexInfo),
RemovedIdxs: job.Args[7].([]int64),
},
}, nil
}
if len(job.CtxVars) > 0 {
args.NeedChangeColData = job.CtxVars[0].(bool)
}
return args, nil
}

// for job version2
Expand All @@ -355,6 +361,9 @@ func decodeModifyColumnArgs(job *Job, argsOfFinished bool) (*ModifyColumnArgs, e
if err := job.DecodeArgs(&indexIDs, &partitionIDs); err != nil {
return nil, errors.Trace(err)
}
// cache the args after decode
job.Args = []any{indexIDs, partitionIDs}

return &ModifyColumnArgs{
IndexIDs: indexIDs,
PartitionIDs: partitionIDs,
Expand All @@ -366,6 +375,12 @@ func decodeModifyColumnArgs(job *Job, argsOfFinished bool) (*ModifyColumnArgs, e
if err != nil {
return nil, errors.Trace(err)
}

// cache the args after decode.
job.Args = []any{&modifyInfo.NewCol, modifyInfo.OldColName, modifyInfo.Pos,
modifyInfo.ModifyColumnTp, modifyInfo.UpdatedAutoRandomBits,
modifyInfo.ChangingCol, modifyInfo.ChangingIdxs, modifyInfo.RemovedIdxs}

return &ModifyColumnArgs{
ModifyingColInfo: &modifyInfo,
}, nil
Expand Down
232 changes: 232 additions & 0 deletions pkg/meta/model/job_args_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ package model
import (
"testing"

"github.com/pingcap/tidb/pkg/parser/ast"
"github.com/pingcap/tidb/pkg/parser/model"
"github.com/stretchr/testify/require"
)

Expand Down Expand Up @@ -157,3 +159,233 @@ func TestTruncateTableArgs(t *testing.T) {
require.Equal(t, []int64{5, 6}, args.OldPartitionIDs)
}
}

func TestModifyColumnArgs(t *testing.T) {
var (
newcol = &ColumnInfo{
ID: 9527,
Name: model.NewCIStr("new_col_name"),
}
oldColName = model.NewCIStr("old_col_name")
pos = &ast.ColumnPosition{
Tp: ast.ColumnPositionFirst,
}
modifyColumnTp = byte('a')
updatedAutoRandomBits uint64 = 9527
changingCol = &ColumnInfo{
ID: 9528,
Name: model.NewCIStr("changing_col"),
}
changingIdxs = []*IndexInfo{
{
ID: 9529,
Name: model.NewCIStr("index_info_1"),
},
{
ID: 9530,
Name: model.NewCIStr("index_info_2"),
},
}
removedIdxs = []int64{1, 2, 3}
needChangeColData = true
)

jobvers := []JobVersion{JobVersion1, JobVersion2}
for _, jobver := range jobvers {
job := &Job{
Version: jobver,
Type: ActionModifyColumn,
}
job.FillArgs(&ModifyColumnArgs{
ModifyingColInfo: &ModifyingColInfo{
NewCol: newcol,
OldColName: oldColName,
Pos: pos,
ModifyColumnTp: modifyColumnTp,
UpdatedAutoRandomBits: updatedAutoRandomBits,
ChangingCol: changingCol,
ChangingIdxs: changingIdxs,
RemovedIdxs: removedIdxs,
},
NeedChangeColData: needChangeColData,
})

// get args before marshal args.
args, err := GetModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.NeedChangeColData, needChangeColData)

require.Equal(t, args.NewCol, newcol)
require.Equal(t, args.OldColName, oldColName)
require.Equal(t, args.Pos, pos)
require.Equal(t, args.ModifyColumnTp, modifyColumnTp)
require.Equal(t, args.UpdatedAutoRandomBits, updatedAutoRandomBits)
require.Equal(t, args.ChangingCol, changingCol)
require.Equal(t, args.ChangingIdxs, changingIdxs)
require.Equal(t, args.RemovedIdxs, removedIdxs)
}
}

func TestModifyColumnArgsWithPartialArgs(t *testing.T) {
var (
newcol = &ColumnInfo{
ID: 9527,
Name: model.NewCIStr("new_col_name"),
}
oldColName = model.NewCIStr("old_col_name")
pos = &ast.ColumnPosition{
Tp: ast.ColumnPositionFirst,
}
modifyColumnTp = byte('a')
updatedAutoRandomBits uint64 = 9527
needChangeColData = true
)

jobvers := []JobVersion{JobVersion1, JobVersion2}
for _, jobver := range jobvers {
job := &Job{
Version: jobver,
Type: ActionModifyColumn,
}
job.FillArgs(&ModifyColumnArgs{
ModifyingColInfo: &ModifyingColInfo{
NewCol: newcol,
OldColName: oldColName,
Pos: pos,
ModifyColumnTp: modifyColumnTp,
UpdatedAutoRandomBits: updatedAutoRandomBits,
},
NeedChangeColData: needChangeColData,
})

// get args before marshal args.
args, err := GetModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.NeedChangeColData, needChangeColData)

require.Equal(t, args.NewCol, newcol)
require.Equal(t, args.OldColName, oldColName)
require.Equal(t, args.Pos, pos)
require.Equal(t, args.ModifyColumnTp, modifyColumnTp)
require.Equal(t, args.UpdatedAutoRandomBits, updatedAutoRandomBits)
}
}

func TestGetModifyColumnArgs(t *testing.T) {
var (
err error
newcol = &ColumnInfo{
ID: 9527,
Name: model.NewCIStr("new_col_name"),
}
oldColName = model.NewCIStr("old_col_name")
pos = &ast.ColumnPosition{
Tp: ast.ColumnPositionFirst,
}
modifyColumnTp = byte('a')
updatedAutoRandomBits uint64 = 9527
changingCol = &ColumnInfo{
ID: 9528,
Name: model.NewCIStr("changing_col"),
}
changingIdxs = []*IndexInfo{
{
ID: 9529,
Name: model.NewCIStr("index_info_1"),
},
{
ID: 9530,
Name: model.NewCIStr("index_info_2"),
},
}
removedIdxs = []int64{1, 2, 3}
needChangeColData = true
)

jobvers := []JobVersion{JobVersion1, JobVersion2}
for _, jobver := range jobvers {
job := &Job{
Version: jobver,
Type: ActionModifyColumn,
}
job.FillArgs(&ModifyColumnArgs{
ModifyingColInfo: &ModifyingColInfo{
NewCol: newcol,
OldColName: oldColName,
Pos: pos,
ModifyColumnTp: modifyColumnTp,
UpdatedAutoRandomBits: updatedAutoRandomBits,
ChangingCol: changingCol,
ChangingIdxs: changingIdxs,
RemovedIdxs: removedIdxs,
},
NeedChangeColData: needChangeColData,
})
// Marshal args
_, err = job.Encode(true)
require.NoError(t, err)
job.Args = nil

// test decodeModifyColumnArgs(), it needs decode job.RawArgs.
args, err := GetModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.NewCol, newcol)
require.Equal(t, args.OldColName, oldColName)
require.Equal(t, args.Pos, pos)
require.Equal(t, args.ModifyColumnTp, modifyColumnTp)
require.Equal(t, args.UpdatedAutoRandomBits, updatedAutoRandomBits)
require.Equal(t, args.ChangingCol, changingCol)
require.Equal(t, args.ChangingIdxs, changingIdxs)
require.Equal(t, args.RemovedIdxs, removedIdxs)

// test getModifyColumnArgs, don't need decode job.RawArgs.
require.True(t, len(job.Args) > 0)
args, err = GetModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.NewCol, newcol)
require.Equal(t, args.OldColName, oldColName)
require.Equal(t, args.Pos, pos)
require.Equal(t, args.ModifyColumnTp, modifyColumnTp)
require.Equal(t, args.UpdatedAutoRandomBits, updatedAutoRandomBits)
require.Equal(t, args.ChangingCol, changingCol)
require.Equal(t, args.ChangingIdxs, changingIdxs)
require.Equal(t, args.RemovedIdxs, removedIdxs)
}
}

func TestGetFinishedModifyColumnArgs(t *testing.T) {
var (
indexIDs = []int64{1, 2, 3}
partitionIDs = []int64{4, 5, 6}
)

jobvers := []JobVersion{JobVersion1, JobVersion2}
for _, jobver := range jobvers {
job := &Job{
Version: jobver,
Type: ActionModifyColumn,
}

job.FillFinishedArgs(&ModifyColumnArgs{
IndexIDs: indexIDs,
PartitionIDs: partitionIDs,
})

// Marshal args
_, err := job.Encode(true)
require.NoError(t, err)
job.Args = nil

// test GetFinishedModifyColumnArgs(), it needs decode job.RawArgs.
args, err := GetFinishedModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.IndexIDs, indexIDs)
require.Equal(t, args.PartitionIDs, partitionIDs)

// test GetFinishedModifyColumnArgs, don't need decode job.RawArgs.
args, err = GetFinishedModifyColumnArgs(job)
require.NoError(t, err)
require.Equal(t, args.IndexIDs, indexIDs)
require.Equal(t, args.PartitionIDs, partitionIDs)
}
}

0 comments on commit 9bdf13b

Please sign in to comment.