v1_test.go 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. package v1
  2. import (
  3. "fmt"
  4. "git.sxidc.com/service-supports/dps-sdk/ports"
  5. "math/rand"
  6. "testing"
  7. "time"
  8. )
  9. var tableModelDescribe = ports.TableModelDescribe{
  10. Fields: []ports.TableModelField{
  11. {"ID", "gorm:\"primary_key;type:varchar(32);comment:id;\""},
  12. {"Name", "gorm:\"not null;type:varchar(128);comment:数据库名称;\""},
  13. {"Time", "gorm:\"not null;type:timestamp with time zone;comment:数据库时间;\""},
  14. {"TableNum", "gorm:\"not null;type:integer;comment:数据库表数量;\""},
  15. },
  16. }
  17. func TestAutoMigrate(t *testing.T) {
  18. initClient(t, "localhost:30170")
  19. defer destroyClient(t)
  20. newToolKit(t).autoMigrate(&ports.AutoMigrateRequest{
  21. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  22. TablePrefixWithSchema: "test." + simpleUUID()[0:8],
  23. Version: "v1",
  24. TableModelDescribe: tableModelDescribe,
  25. })
  26. }
  27. func TestTransaction(t *testing.T) {
  28. initClient(t, "localhost:30170")
  29. defer destroyClient(t)
  30. tablePrefix := "test." + simpleUUID()[0:8]
  31. id := simpleUUID()
  32. name := simpleUUID()
  33. now := time.Now().Local()
  34. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  35. newName := simpleUUID()
  36. newNow := time.Now().Local()
  37. newTableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  38. var count int64
  39. resultMap := make(map[string]any)
  40. newToolKit(t).
  41. autoMigrate(&ports.AutoMigrateRequest{
  42. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  43. TablePrefixWithSchema: tablePrefix,
  44. Version: "v1",
  45. TableModelDescribe: tableModelDescribe,
  46. }).
  47. transaction("2b78141779ee432295ca371b91c5cac7", func(tx ports.Transaction) error {
  48. statement, err := tx.InsertTx(&ports.InsertRequest{
  49. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  50. TablePrefixWithSchema: tablePrefix,
  51. Version: "v1",
  52. KeyColumns: []string{"id"},
  53. TableRow: map[string]any{
  54. "id": id,
  55. "name": name,
  56. "time": now,
  57. "table_num": tableNum,
  58. },
  59. UserID: "test",
  60. })
  61. if err != nil {
  62. return err
  63. }
  64. fmt.Println(statement)
  65. err = tx.End()
  66. if err != nil {
  67. return err
  68. }
  69. return nil
  70. }).
  71. queryByKeys(&ports.QueryByKeysRequest{
  72. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  73. TablePrefixWithSchema: tablePrefix,
  74. Version: "v1",
  75. KeyValues: map[string]string{"id": id},
  76. }, &resultMap).
  77. assertEqual(id, resultMap["id"], "ID不一致").
  78. assertEqual(name, resultMap["name"], "名称不一致").
  79. assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).UnixMilli(), "时间不一致").
  80. assertEqual(tableNum, resultMap["table_num"], "表数量不一致").
  81. transaction("2b78141779ee432295ca371b91c5cac7", func(tx ports.Transaction) error {
  82. statement, err := tx.UpdateTx(&ports.UpdateRequest{
  83. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  84. TablePrefixWithSchema: tablePrefix,
  85. Version: "v1",
  86. KeyValues: map[string]string{"id": id},
  87. NewTableRow: map[string]any{
  88. "id": id,
  89. "name": newName,
  90. "time": newNow,
  91. "table_num": newTableNum,
  92. },
  93. UserID: "test",
  94. })
  95. if err != nil {
  96. return err
  97. }
  98. fmt.Println(statement)
  99. err = tx.End()
  100. if err != nil {
  101. return err
  102. }
  103. return nil
  104. }).
  105. queryByKeys(&ports.QueryByKeysRequest{
  106. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  107. TablePrefixWithSchema: tablePrefix,
  108. Version: "v1",
  109. KeyValues: map[string]string{"id": id},
  110. }, &resultMap).
  111. assertEqual(id, resultMap["id"], "ID不一致").
  112. assertEqual(newName, resultMap["name"], "名称不一致").
  113. assertEqual(newNow.UnixMilli(), resultMap["time"].(time.Time).UnixMilli(), "时间不一致").
  114. assertEqual(newTableNum, resultMap["table_num"], "表数量不一致").
  115. transaction("2b78141779ee432295ca371b91c5cac7", func(tx ports.Transaction) error {
  116. statement, err := tx.UpdateTx(&ports.UpdateRequest{
  117. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  118. TablePrefixWithSchema: tablePrefix,
  119. Version: "v1",
  120. KeyValues: map[string]string{"id": id},
  121. NewTableRow: map[string]any{
  122. "id": id,
  123. "name": name,
  124. "time": now,
  125. "table_num": tableNum,
  126. },
  127. UserID: "test",
  128. })
  129. if err != nil {
  130. return err
  131. }
  132. fmt.Println(statement)
  133. statement, err = tx.DeleteTx(&ports.DeleteRequest{
  134. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  135. TablePrefixWithSchema: tablePrefix,
  136. Version: "v1",
  137. KeyValues: map[string]string{"id": id},
  138. UserID: "test",
  139. })
  140. if err != nil {
  141. return err
  142. }
  143. fmt.Println(statement)
  144. err = tx.End()
  145. if err != nil {
  146. return err
  147. }
  148. return nil
  149. }).
  150. countWhere(&ports.CountWhereRequest{
  151. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  152. TablePrefixWithSchema: tablePrefix,
  153. Version: "v1",
  154. Where: []ports.ColumnCompare{
  155. {
  156. Column: "id",
  157. Value: id,
  158. Compare: ports.CompareEqual,
  159. },
  160. },
  161. }, &count).
  162. assertEqual(int64(0), count, "数量不一致")
  163. }
  164. func TestInsert(t *testing.T) {
  165. initClient(t, "localhost:30170")
  166. defer destroyClient(t)
  167. tablePrefix := "test." + simpleUUID()[0:8]
  168. id := simpleUUID()
  169. name := simpleUUID()
  170. now := time.Now().Local()
  171. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  172. resultMap := make(map[string]any)
  173. newToolKit(t).
  174. autoMigrate(&ports.AutoMigrateRequest{
  175. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  176. TablePrefixWithSchema: tablePrefix,
  177. Version: "v1",
  178. TableModelDescribe: tableModelDescribe,
  179. }).
  180. insert(&ports.InsertRequest{
  181. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  182. TablePrefixWithSchema: tablePrefix,
  183. Version: "v1",
  184. KeyColumns: []string{"id"},
  185. TableRow: map[string]any{
  186. "id": id,
  187. "name": name,
  188. "time": now,
  189. "table_num": tableNum,
  190. },
  191. UserID: "test",
  192. }).
  193. queryByKeys(&ports.QueryByKeysRequest{
  194. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  195. TablePrefixWithSchema: tablePrefix,
  196. Version: "v1",
  197. KeyValues: map[string]string{"id": id},
  198. }, &resultMap).
  199. assertEqual(id, resultMap["id"], "ID不一致").
  200. assertEqual(name, resultMap["name"], "名称不一致").
  201. assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  202. assertEqual(tableNum, resultMap["table_num"], "表数量不一致")
  203. }
  204. func TestInsertBatch(t *testing.T) {
  205. initClient(t, "localhost:30170")
  206. defer destroyClient(t)
  207. tablePrefix := "test." + simpleUUID()[0:8]
  208. id1 := simpleUUID()
  209. name1 := simpleUUID()
  210. now1 := time.Now().Local()
  211. tableNum1 := rand.New(rand.NewSource(now1.Unix())).Intn(10)
  212. id2 := simpleUUID()
  213. name2 := simpleUUID()
  214. now2 := time.Now().Local()
  215. tableNum2 := rand.New(rand.NewSource(now2.Unix())).Intn(10)
  216. resultsMap := make([]map[string]any, 0)
  217. newToolKit(t).
  218. autoMigrate(&ports.AutoMigrateRequest{
  219. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  220. TablePrefixWithSchema: tablePrefix,
  221. Version: "v1",
  222. TableModelDescribe: tableModelDescribe,
  223. }).
  224. insertBatch(&ports.InsertBatchRequest{
  225. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  226. Items: []*ports.InsertTableItem{
  227. {
  228. TablePrefixWithSchema: tablePrefix,
  229. Version: "v1",
  230. Items: []*ports.InsertItem{
  231. {
  232. KeyColumns: []string{"id"},
  233. TableRow: map[string]any{
  234. "id": id1,
  235. "name": name1,
  236. "time": now1,
  237. "table_num": tableNum1,
  238. },
  239. },
  240. {
  241. KeyColumns: []string{"id"},
  242. TableRow: map[string]any{
  243. "id": id2,
  244. "name": name2,
  245. "time": now2,
  246. "table_num": tableNum2,
  247. },
  248. },
  249. },
  250. },
  251. },
  252. UserID: "test",
  253. }).
  254. queryByWhereAndOrderBy(&ports.QueryByWhereAndOrderByRequest{
  255. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  256. TablePrefixWithSchema: tablePrefix,
  257. Version: "v1",
  258. Where: []ports.ColumnCompare{
  259. {Column: "id", Value: id1, Compare: ports.CompareEqual},
  260. {Column: "name", Value: name1, Compare: ports.CompareEqual},
  261. {Column: "table_num", Value: tableNum1, Compare: ports.CompareEqual},
  262. },
  263. PageNo: 1,
  264. PageSize: 1,
  265. }, &resultsMap).
  266. assertEqual(id1, resultsMap[0]["id"], "ID不一致").
  267. assertEqual(name1, resultsMap[0]["name"], "名称不一致").
  268. assertEqual(now1.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  269. assertEqual(tableNum1, resultsMap[0]["table_num"], "表数量不一致").
  270. commonQuery(&ports.CommonQueryRequest{
  271. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  272. TablePrefixWithSchema: tablePrefix,
  273. Version: "v1",
  274. Where: []ports.ColumnCompare{
  275. {Column: "id", Value: id2, Compare: ports.CompareEqual},
  276. {Column: "name", Value: name2, Compare: ports.CompareEqual},
  277. {Column: "table_num", Value: tableNum2, Compare: ports.CompareEqual},
  278. },
  279. PageNo: 1,
  280. PageSize: 1,
  281. }, &resultsMap).
  282. assertEqual(id2, resultsMap[0]["id"], "ID不一致").
  283. assertEqual(name2, resultsMap[0]["name"], "名称不一致").
  284. assertEqual(now2.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  285. assertEqual(tableNum2, resultsMap[0]["table_num"], "表数量不一致")
  286. }
  287. func TestUpdate(t *testing.T) {
  288. initClient(t, "localhost:30170")
  289. defer destroyClient(t)
  290. tablePrefix := "test." + simpleUUID()[0:8]
  291. id := simpleUUID()
  292. name := simpleUUID()
  293. now := time.Now().Local()
  294. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  295. newName := simpleUUID()
  296. newNow := time.Now().Local()
  297. newTableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  298. resultMap := make(map[string]any)
  299. newToolKit(t).
  300. autoMigrate(&ports.AutoMigrateRequest{
  301. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  302. TablePrefixWithSchema: tablePrefix,
  303. Version: "v1",
  304. TableModelDescribe: tableModelDescribe,
  305. }).
  306. insert(&ports.InsertRequest{
  307. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  308. TablePrefixWithSchema: tablePrefix,
  309. Version: "v1",
  310. KeyColumns: []string{"id"},
  311. TableRow: map[string]any{
  312. "id": id,
  313. "name": name,
  314. "time": now,
  315. "table_num": tableNum,
  316. },
  317. UserID: "test",
  318. }).
  319. update(&ports.UpdateRequest{
  320. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  321. TablePrefixWithSchema: tablePrefix,
  322. Version: "v1",
  323. KeyValues: map[string]string{"id": id},
  324. NewTableRow: map[string]any{
  325. "id": id,
  326. "name": newName,
  327. "time": newNow,
  328. "table_num": newTableNum,
  329. },
  330. UserID: "test",
  331. }).
  332. queryByKeys(&ports.QueryByKeysRequest{
  333. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  334. TablePrefixWithSchema: tablePrefix,
  335. Version: "v1",
  336. KeyValues: map[string]string{"id": id},
  337. }, &resultMap).
  338. assertEqual(id, resultMap["id"], "ID不一致").
  339. assertEqual(newName, resultMap["name"], "名称不一致").
  340. assertEqual(newNow.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  341. assertEqual(newTableNum, resultMap["table_num"], "表数量不一致")
  342. }
  343. func TestDelete(t *testing.T) {
  344. initClient(t, "localhost:30170")
  345. defer destroyClient(t)
  346. tablePrefix := "test." + simpleUUID()[0:8]
  347. id := simpleUUID()
  348. name := simpleUUID()
  349. now := time.Now().Local()
  350. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  351. var count int64
  352. newToolKit(t).
  353. autoMigrate(&ports.AutoMigrateRequest{
  354. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  355. TablePrefixWithSchema: tablePrefix,
  356. Version: "v1",
  357. TableModelDescribe: tableModelDescribe,
  358. }).
  359. insert(&ports.InsertRequest{
  360. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  361. TablePrefixWithSchema: tablePrefix,
  362. Version: "v1",
  363. KeyColumns: []string{"id"},
  364. TableRow: map[string]any{
  365. "id": id,
  366. "name": name,
  367. "time": now,
  368. "table_num": tableNum,
  369. },
  370. UserID: "test",
  371. }).
  372. delete(&ports.DeleteRequest{
  373. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  374. TablePrefixWithSchema: tablePrefix,
  375. Version: "v1",
  376. KeyValues: map[string]string{"id": id},
  377. UserID: "test",
  378. }).
  379. countWhere(&ports.CountWhereRequest{
  380. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  381. TablePrefixWithSchema: tablePrefix,
  382. Version: "v1",
  383. Where: []ports.ColumnCompare{
  384. {
  385. Column: "id",
  386. Value: id,
  387. Compare: ports.CompareEqual,
  388. },
  389. },
  390. }, &count).
  391. assertEqual(int64(0), count, "数量不一致")
  392. }
  393. func TestDeleteBatch(t *testing.T) {
  394. initClient(t, "localhost:30170")
  395. defer destroyClient(t)
  396. tablePrefix := "test." + simpleUUID()[0:8]
  397. id1 := simpleUUID()
  398. name1 := simpleUUID()
  399. now1 := time.Now().Local()
  400. tableNum1 := rand.New(rand.NewSource(now1.Unix())).Intn(10)
  401. id2 := simpleUUID()
  402. name2 := simpleUUID()
  403. now2 := time.Now().Local()
  404. tableNum2 := rand.New(rand.NewSource(now2.Unix())).Intn(10)
  405. var count int64
  406. newToolKit(t).
  407. autoMigrate(&ports.AutoMigrateRequest{
  408. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  409. TablePrefixWithSchema: tablePrefix,
  410. Version: "v1",
  411. TableModelDescribe: tableModelDescribe,
  412. }).
  413. insertBatch(&ports.InsertBatchRequest{
  414. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  415. Items: []*ports.InsertTableItem{
  416. {
  417. TablePrefixWithSchema: tablePrefix,
  418. Version: "v1",
  419. Items: []*ports.InsertItem{
  420. {
  421. KeyColumns: []string{"id"},
  422. TableRow: map[string]any{
  423. "id": id1,
  424. "name": name1,
  425. "time": now1,
  426. "table_num": tableNum1,
  427. },
  428. },
  429. {
  430. KeyColumns: []string{"id"},
  431. TableRow: map[string]any{
  432. "id": id2,
  433. "name": name2,
  434. "time": now2,
  435. "table_num": tableNum2,
  436. },
  437. },
  438. },
  439. },
  440. },
  441. UserID: "test",
  442. }).
  443. deleteBatch(&ports.DeleteBatchRequest{
  444. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  445. Items: []*ports.DeleteTableItem{
  446. {
  447. TablePrefixWithSchema: tablePrefix,
  448. Version: "v1",
  449. Items: []*ports.DeleteItem{
  450. {KeyValues: map[string]string{"id": id1}},
  451. {KeyValues: map[string]string{"id": id2}},
  452. },
  453. },
  454. },
  455. UserID: "test",
  456. }).
  457. commonCount(&ports.CommonCountRequest{
  458. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  459. TablePrefixWithSchema: tablePrefix,
  460. Version: "v1",
  461. }, &count).
  462. assertEqual(int64(0), count, "数量不一致")
  463. }
  464. func TestReply(t *testing.T) {
  465. initClient(t, "localhost:30170")
  466. defer destroyClient(t)
  467. tablePrefix := "test." + simpleUUID()[0:8]
  468. id := simpleUUID()
  469. name := simpleUUID()
  470. now := time.Now().Local()
  471. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  472. resultMap := make(map[string]any)
  473. newToolKit(t).
  474. autoMigrate(&ports.AutoMigrateRequest{
  475. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  476. TablePrefixWithSchema: tablePrefix,
  477. Version: "v1",
  478. TableModelDescribe: tableModelDescribe,
  479. }).
  480. insert(&ports.InsertRequest{
  481. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  482. TablePrefixWithSchema: tablePrefix,
  483. Version: "v1",
  484. KeyColumns: []string{"id"},
  485. TableRow: map[string]any{
  486. "id": id,
  487. "name": name,
  488. "time": now,
  489. "table_num": tableNum,
  490. },
  491. UserID: "test",
  492. }).
  493. reply(&ports.ReplayRequest{
  494. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  495. TablePrefixWithSchema: tablePrefix,
  496. Version: "v1",
  497. KeyValues: map[string]string{"id": id},
  498. UserID: "test",
  499. }).
  500. queryByKeys(&ports.QueryByKeysRequest{
  501. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  502. TablePrefixWithSchema: tablePrefix,
  503. Version: "v1",
  504. KeyValues: map[string]string{"id": id},
  505. }, &resultMap).
  506. assertEqual(id, resultMap["id"], "ID不一致").
  507. assertEqual(name, resultMap["name"], "名称不一致").
  508. assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  509. assertEqual(tableNum, resultMap["table_num"], "表数量不一致")
  510. }