package v1 import ( "git.sxidc.com/service-supports/dps-sdk/ports" "math/rand" "testing" "time" ) var tableModelDescribe = ports.TableModelDescribe{ Fields: []ports.TableModelField{ {"ID", "gorm:\"primary_key;type:varchar(32);comment:id;\""}, {"Name", "gorm:\"not null;type:varchar(128);comment:数据库名称;\""}, {"Time", "gorm:\"not null;type:timestamp with time zone;comment:数据库时间;\""}, {"TableNum", "gorm:\"not null;type:integer;comment:数据库表数量;\""}, }, } func TestAutoMigrate(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) newToolKit(t).autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: "test." + simpleUUID()[0:8], Version: "v1", TableModelDescribe: tableModelDescribe, }) } func TestInsert(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) tablePrefix := "test." + simpleUUID()[0:8] id := simpleUUID() name := simpleUUID() now := time.Now().Local() tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10) resultMap := make(map[string]any) newToolKit(t). autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", TableModelDescribe: tableModelDescribe, }). insert(&ports.InsertRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id, "name": name, "time": now, "table_num": tableNum, }, UserID: "test", }). queryByKeys(&ports.QueryByKeysRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, }, &resultMap). assertEqual(id, resultMap["id"], "ID不一致"). assertEqual(name, resultMap["name"], "名称不一致"). assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致"). assertEqual(tableNum, resultMap["table_num"], "表数量不一致") } func TestInsertBatch(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) tablePrefix := "test." + simpleUUID()[0:8] id1 := simpleUUID() name1 := simpleUUID() now1 := time.Now().Local() tableNum1 := rand.New(rand.NewSource(now1.Unix())).Intn(10) id2 := simpleUUID() name2 := simpleUUID() now2 := time.Now().Local() tableNum2 := rand.New(rand.NewSource(now2.Unix())).Intn(10) resultsMap := make([]map[string]any, 0) newToolKit(t). autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", TableModelDescribe: tableModelDescribe, }). insertBatch(&ports.InsertBatchRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", Items: []*ports.InsertTableItem{ { TablePrefixWithSchema: tablePrefix, Version: "v1", Items: []*ports.InsertItem{ { KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id1, "name": name1, "time": now1, "table_num": tableNum1, }, }, { KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id2, "name": name2, "time": now2, "table_num": tableNum2, }, }, }, }, }, UserID: "test", }). queryByWhereAndOrderBy(&ports.QueryByWhereAndOrderByRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", Where: []ports.ColumnCompare{ {Column: "id", Value: id1, Compare: ports.CompareEqual}, {Column: "name", Value: name1, Compare: ports.CompareEqual}, {Column: "table_num", Value: tableNum1, Compare: ports.CompareEqual}, }, PageNo: 1, PageSize: 1, }, &resultsMap). assertEqual(id1, resultsMap[0]["id"], "ID不一致"). assertEqual(name1, resultsMap[0]["name"], "名称不一致"). assertEqual(now1.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致"). assertEqual(tableNum1, resultsMap[0]["table_num"], "表数量不一致"). commonQuery(&ports.CommonQueryRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", Where: []ports.ColumnCompare{ {Column: "id", Value: id2, Compare: ports.CompareEqual}, {Column: "name", Value: name2, Compare: ports.CompareEqual}, {Column: "table_num", Value: tableNum2, Compare: ports.CompareEqual}, }, PageNo: 1, PageSize: 1, }, &resultsMap). assertEqual(id2, resultsMap[0]["id"], "ID不一致"). assertEqual(name2, resultsMap[0]["name"], "名称不一致"). assertEqual(now2.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致"). assertEqual(tableNum2, resultsMap[0]["table_num"], "表数量不一致") } func TestUpdate(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) tablePrefix := "test." + simpleUUID()[0:8] id := simpleUUID() name := simpleUUID() now := time.Now().Local() tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10) newName := simpleUUID() newNow := time.Now().Local() newTableNum := rand.New(rand.NewSource(now.Unix())).Intn(10) resultMap := make(map[string]any) newToolKit(t). autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", TableModelDescribe: tableModelDescribe, }). insert(&ports.InsertRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id, "name": name, "time": now, "table_num": tableNum, }, UserID: "test", }). update(&ports.UpdateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, NewTableRow: map[string]any{ "id": id, "name": newName, "time": newNow, "table_num": newTableNum, }, UserID: "test", }). queryByKeys(&ports.QueryByKeysRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, }, &resultMap). assertEqual(id, resultMap["id"], "ID不一致"). assertEqual(newName, resultMap["name"], "名称不一致"). assertEqual(newNow.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致"). assertEqual(newTableNum, resultMap["table_num"], "表数量不一致") } func TestDelete(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) tablePrefix := "test." + simpleUUID()[0:8] id := simpleUUID() name := simpleUUID() now := time.Now().Local() tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10) var count int64 newToolKit(t). autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", TableModelDescribe: tableModelDescribe, }). insert(&ports.InsertRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id, "name": name, "time": now, "table_num": tableNum, }, UserID: "test", }). delete(&ports.DeleteRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, UserID: "test", }). countWhere(&ports.CountWhereRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", Where: []ports.ColumnCompare{ { Column: "id", Value: id, Compare: ports.CompareEqual, }, }, }, &count). assertEqual(int64(0), count, "数量不一致") } func TestReply(t *testing.T) { initClient(t, "localhost:30170") defer destroyClient(t) tablePrefix := "test." + simpleUUID()[0:8] id := simpleUUID() name := simpleUUID() now := time.Now().Local() tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10) resultMap := make(map[string]any) newToolKit(t). autoMigrate(&ports.AutoMigrateRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", TableModelDescribe: tableModelDescribe, }). insert(&ports.InsertRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyColumns: []string{"id"}, TableRow: map[string]any{ "id": id, "name": name, "time": now, "table_num": tableNum, }, UserID: "test", }). reply(&ports.ReplayRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, UserID: "test", }). queryByKeys(&ports.QueryByKeysRequest{ DatabaseID: "2b78141779ee432295ca371b91c5cac7", TablePrefixWithSchema: tablePrefix, Version: "v1", KeyValues: map[string]string{"id": id}, }, &resultMap). assertEqual(id, resultMap["id"], "ID不一致"). assertEqual(name, resultMap["name"], "名称不一致"). assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致"). assertEqual(tableNum, resultMap["table_num"], "表数量不一致") }