github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/pkg/v1workermeta/meta_test.go (about) 1 // Copyright 2020 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package v1workermeta 15 16 import ( 17 "path" 18 "testing" 19 20 . "github.com/pingcap/check" 21 "github.com/pingcap/tiflow/dm/config" 22 "github.com/pingcap/tiflow/dm/pb" 23 "github.com/pingcap/tiflow/dm/pkg/terror" 24 "github.com/syndtr/goleveldb/leveldb" 25 ) 26 27 func TestSuite(t *testing.T) { 28 TestingT(t) 29 } 30 31 type testMeta struct{} 32 33 var _ = Suite(&testMeta{}) 34 35 var ( 36 testTask1 = &config.SubTaskConfig{ 37 Name: "task1", 38 SourceID: "replica-1", 39 } 40 testTask1Meta *pb.V1SubTaskMeta 41 42 testTask2 = &config.SubTaskConfig{ 43 Name: "task2", 44 SourceID: "replica-1", 45 } 46 testTask2Meta *pb.V1SubTaskMeta 47 ) 48 49 func testSetUpDB(c *C) *leveldb.DB { 50 c.Assert(testTask1.Adjust(true), IsNil) 51 c.Assert(testTask2.Adjust(true), IsNil) 52 53 testTask1Str, err := testTask1.Toml() 54 c.Assert(err, IsNil) 55 testTask1Meta = &pb.V1SubTaskMeta{ 56 Op: pb.TaskOp_Start, 57 Name: testTask1.Name, 58 Stage: pb.Stage_New, 59 Task: []byte(testTask1Str), 60 } 61 62 testTask2Str, err := testTask2.Toml() 63 c.Assert(err, IsNil) 64 testTask2Meta = &pb.V1SubTaskMeta{ 65 Op: pb.TaskOp_Start, 66 Name: testTask2.Name, 67 Stage: pb.Stage_New, 68 Task: []byte(testTask2Str), 69 } 70 71 dir := c.MkDir() 72 dbDir := path.Join(dir, "kv") 73 db, err := openDB(dbDir, defaultKVConfig) 74 if err != nil { 75 c.Fatalf("fail to open leveldb %v", err) 76 } 77 78 return db 79 } 80 81 func (t *testMeta) TestNewMetaDB(c *C) { 82 db := testSetUpDB(c) 83 defer db.Close() 84 85 metaDB, err := newMeta(db) 86 c.Assert(err, IsNil) 87 c.Assert(metaDB.tasks, HasLen, 0) 88 89 // check nil db 90 metaDB, err = newMeta(nil) 91 c.Assert(terror.ErrWorkerLogInvalidHandler.Equal(err), IsTrue) 92 c.Assert(metaDB, IsNil) 93 } 94 95 func (t *testMeta) TestTask(c *C) { 96 db := testSetUpDB(c) 97 defer db.Close() 98 99 // set task meta 100 c.Assert(terror.ErrWorkerLogInvalidHandler.Equal(setTaskMeta(nil, nil)), IsTrue) 101 err := setTaskMeta(db, nil) 102 c.Assert(err, ErrorMatches, ".*empty task.*") 103 104 err = setTaskMeta(db, &pb.V1SubTaskMeta{}) 105 c.Assert(err, ErrorMatches, ".*empty task.*") 106 107 c.Assert(setTaskMeta(db, testTask1Meta), IsNil) 108 c.Assert(setTaskMeta(db, testTask2Meta), IsNil) 109 110 // load task meta 111 metaDB, err := newMeta(db) 112 c.Assert(err, IsNil) 113 c.Assert(metaDB.tasks, DeepEquals, map[string]*pb.V1SubTaskMeta{ 114 "task1": testTask1Meta, 115 "task2": testTask2Meta, 116 }) 117 118 // delete task meta 119 c.Assert(deleteTaskMeta(db, "task1"), IsNil) 120 121 // load task meta 122 metaDB, err = newMeta(db) 123 c.Assert(err, IsNil) 124 c.Assert(metaDB.tasks, DeepEquals, map[string]*pb.V1SubTaskMeta{ 125 "task2": testTask2Meta, 126 }) 127 128 // delete task meta 129 c.Assert(deleteTaskMeta(db, "task2"), IsNil) 130 131 // load task meta 132 metaDB, err = newMeta(db) 133 c.Assert(err, IsNil) 134 c.Assert(metaDB.tasks, HasLen, 0) 135 }