v1_test.go 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. package v1
  2. import (
  3. "git.sxidc.com/service-supports/dps-sdk/ports"
  4. "math/rand"
  5. "testing"
  6. "time"
  7. )
  8. var tableModelDescribe = ports.TableModelDescribe{
  9. Fields: []ports.TableModelField{
  10. {"ID", "gorm:\"primary_key;type:varchar(32);comment:id;\""},
  11. {"Name", "gorm:\"not null;type:varchar(128);comment:数据库名称;\""},
  12. {"Time", "gorm:\"not null;type:timestamp with time zone;comment:数据库时间;\""},
  13. {"TableNum", "gorm:\"not null;type:integer;comment:数据库表数量;\""},
  14. },
  15. }
  16. func TestAutoMigrate(t *testing.T) {
  17. initClient(t, "localhost:30170")
  18. defer destroyClient(t)
  19. newToolKit(t).autoMigrate(&ports.AutoMigrateRequest{
  20. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  21. TablePrefixWithSchema: "test." + simpleUUID()[0:8],
  22. Version: "v1",
  23. TableModelDescribe: tableModelDescribe,
  24. })
  25. }
  26. func TestInsert(t *testing.T) {
  27. initClient(t, "localhost:30170")
  28. defer destroyClient(t)
  29. tablePrefix := "test." + simpleUUID()[0:8]
  30. id := simpleUUID()
  31. name := simpleUUID()
  32. now := time.Now().Local()
  33. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  34. resultMap := make(map[string]any)
  35. newToolKit(t).
  36. autoMigrate(&ports.AutoMigrateRequest{
  37. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  38. TablePrefixWithSchema: tablePrefix,
  39. Version: "v1",
  40. TableModelDescribe: tableModelDescribe,
  41. }).
  42. insert(&ports.InsertRequest{
  43. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  44. TablePrefixWithSchema: tablePrefix,
  45. Version: "v1",
  46. KeyColumns: []string{"id"},
  47. TableRow: map[string]any{
  48. "id": id,
  49. "name": name,
  50. "time": now,
  51. "table_num": tableNum,
  52. },
  53. UserID: "test",
  54. }).
  55. queryByKeys(&ports.QueryByKeysRequest{
  56. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  57. TablePrefixWithSchema: tablePrefix,
  58. Version: "v1",
  59. KeyValues: map[string]string{"id": id},
  60. }, &resultMap).
  61. assertEqual(id, resultMap["id"], "ID不一致").
  62. assertEqual(name, resultMap["name"], "名称不一致").
  63. assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  64. assertEqual(tableNum, resultMap["table_num"], "表数量不一致")
  65. }
  66. func TestInsertBatch(t *testing.T) {
  67. initClient(t, "localhost:30170")
  68. defer destroyClient(t)
  69. tablePrefix := "test." + simpleUUID()[0:8]
  70. id1 := simpleUUID()
  71. name1 := simpleUUID()
  72. now1 := time.Now().Local()
  73. tableNum1 := rand.New(rand.NewSource(now1.Unix())).Intn(10)
  74. id2 := simpleUUID()
  75. name2 := simpleUUID()
  76. now2 := time.Now().Local()
  77. tableNum2 := rand.New(rand.NewSource(now2.Unix())).Intn(10)
  78. resultsMap := make([]map[string]any, 0)
  79. newToolKit(t).
  80. autoMigrate(&ports.AutoMigrateRequest{
  81. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  82. TablePrefixWithSchema: tablePrefix,
  83. Version: "v1",
  84. TableModelDescribe: tableModelDescribe,
  85. }).
  86. insertBatch(&ports.InsertBatchRequest{
  87. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  88. Items: []*ports.InsertTableItem{
  89. {
  90. TablePrefixWithSchema: tablePrefix,
  91. Version: "v1",
  92. Items: []*ports.InsertItem{
  93. {
  94. KeyColumns: []string{"id"},
  95. TableRow: map[string]any{
  96. "id": id1,
  97. "name": name1,
  98. "time": now1,
  99. "table_num": tableNum1,
  100. },
  101. },
  102. {
  103. KeyColumns: []string{"id"},
  104. TableRow: map[string]any{
  105. "id": id2,
  106. "name": name2,
  107. "time": now2,
  108. "table_num": tableNum2,
  109. },
  110. },
  111. },
  112. },
  113. },
  114. UserID: "test",
  115. }).
  116. queryByWhereAndOrderBy(&ports.QueryByWhereAndOrderByRequest{
  117. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  118. TablePrefixWithSchema: tablePrefix,
  119. Version: "v1",
  120. Where: []ports.ColumnCompare{
  121. {Column: "id", Value: id1, Compare: ports.CompareEqual},
  122. {Column: "name", Value: name1, Compare: ports.CompareEqual},
  123. {Column: "table_num", Value: tableNum1, Compare: ports.CompareEqual},
  124. },
  125. PageNo: 1,
  126. PageSize: 1,
  127. }, &resultsMap).
  128. assertEqual(id1, resultsMap[0]["id"], "ID不一致").
  129. assertEqual(name1, resultsMap[0]["name"], "名称不一致").
  130. assertEqual(now1.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  131. assertEqual(tableNum1, resultsMap[0]["table_num"], "表数量不一致").
  132. commonQuery(&ports.CommonQueryRequest{
  133. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  134. TablePrefixWithSchema: tablePrefix,
  135. Version: "v1",
  136. Where: []ports.ColumnCompare{
  137. {Column: "id", Value: id2, Compare: ports.CompareEqual},
  138. {Column: "name", Value: name2, Compare: ports.CompareEqual},
  139. {Column: "table_num", Value: tableNum2, Compare: ports.CompareEqual},
  140. },
  141. PageNo: 1,
  142. PageSize: 1,
  143. }, &resultsMap).
  144. assertEqual(id2, resultsMap[0]["id"], "ID不一致").
  145. assertEqual(name2, resultsMap[0]["name"], "名称不一致").
  146. assertEqual(now2.UnixMilli(), resultsMap[0]["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  147. assertEqual(tableNum2, resultsMap[0]["table_num"], "表数量不一致")
  148. }
  149. func TestUpdate(t *testing.T) {
  150. initClient(t, "localhost:30170")
  151. defer destroyClient(t)
  152. tablePrefix := "test." + simpleUUID()[0:8]
  153. id := simpleUUID()
  154. name := simpleUUID()
  155. now := time.Now().Local()
  156. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  157. newName := simpleUUID()
  158. newNow := time.Now().Local()
  159. newTableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  160. resultMap := make(map[string]any)
  161. newToolKit(t).
  162. autoMigrate(&ports.AutoMigrateRequest{
  163. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  164. TablePrefixWithSchema: tablePrefix,
  165. Version: "v1",
  166. TableModelDescribe: tableModelDescribe,
  167. }).
  168. insert(&ports.InsertRequest{
  169. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  170. TablePrefixWithSchema: tablePrefix,
  171. Version: "v1",
  172. KeyColumns: []string{"id"},
  173. TableRow: map[string]any{
  174. "id": id,
  175. "name": name,
  176. "time": now,
  177. "table_num": tableNum,
  178. },
  179. UserID: "test",
  180. }).
  181. update(&ports.UpdateRequest{
  182. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  183. TablePrefixWithSchema: tablePrefix,
  184. Version: "v1",
  185. KeyValues: map[string]string{"id": id},
  186. NewTableRow: map[string]any{
  187. "id": id,
  188. "name": newName,
  189. "time": newNow,
  190. "table_num": newTableNum,
  191. },
  192. UserID: "test",
  193. }).
  194. queryByKeys(&ports.QueryByKeysRequest{
  195. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  196. TablePrefixWithSchema: tablePrefix,
  197. Version: "v1",
  198. KeyValues: map[string]string{"id": id},
  199. }, &resultMap).
  200. assertEqual(id, resultMap["id"], "ID不一致").
  201. assertEqual(newName, resultMap["name"], "名称不一致").
  202. assertEqual(newNow.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  203. assertEqual(newTableNum, resultMap["table_num"], "表数量不一致")
  204. }
  205. func TestDelete(t *testing.T) {
  206. initClient(t, "localhost:30170")
  207. defer destroyClient(t)
  208. tablePrefix := "test." + simpleUUID()[0:8]
  209. id := simpleUUID()
  210. name := simpleUUID()
  211. now := time.Now().Local()
  212. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  213. var count int64
  214. newToolKit(t).
  215. autoMigrate(&ports.AutoMigrateRequest{
  216. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  217. TablePrefixWithSchema: tablePrefix,
  218. Version: "v1",
  219. TableModelDescribe: tableModelDescribe,
  220. }).
  221. insert(&ports.InsertRequest{
  222. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  223. TablePrefixWithSchema: tablePrefix,
  224. Version: "v1",
  225. KeyColumns: []string{"id"},
  226. TableRow: map[string]any{
  227. "id": id,
  228. "name": name,
  229. "time": now,
  230. "table_num": tableNum,
  231. },
  232. UserID: "test",
  233. }).
  234. delete(&ports.DeleteRequest{
  235. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  236. TablePrefixWithSchema: tablePrefix,
  237. Version: "v1",
  238. KeyValues: map[string]string{"id": id},
  239. UserID: "test",
  240. }).
  241. countWhere(&ports.CountWhereRequest{
  242. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  243. TablePrefixWithSchema: tablePrefix,
  244. Version: "v1",
  245. Where: []ports.ColumnCompare{
  246. {
  247. Column: "id",
  248. Value: id,
  249. Compare: ports.CompareEqual,
  250. },
  251. },
  252. }, &count).
  253. assertEqual(int64(0), count, "数量不一致")
  254. }
  255. func TestReply(t *testing.T) {
  256. initClient(t, "localhost:30170")
  257. defer destroyClient(t)
  258. tablePrefix := "test." + simpleUUID()[0:8]
  259. id := simpleUUID()
  260. name := simpleUUID()
  261. now := time.Now().Local()
  262. tableNum := rand.New(rand.NewSource(now.Unix())).Intn(10)
  263. resultMap := make(map[string]any)
  264. newToolKit(t).
  265. autoMigrate(&ports.AutoMigrateRequest{
  266. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  267. TablePrefixWithSchema: tablePrefix,
  268. Version: "v1",
  269. TableModelDescribe: tableModelDescribe,
  270. }).
  271. insert(&ports.InsertRequest{
  272. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  273. TablePrefixWithSchema: tablePrefix,
  274. Version: "v1",
  275. KeyColumns: []string{"id"},
  276. TableRow: map[string]any{
  277. "id": id,
  278. "name": name,
  279. "time": now,
  280. "table_num": tableNum,
  281. },
  282. UserID: "test",
  283. }).
  284. reply(&ports.ReplayRequest{
  285. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  286. TablePrefixWithSchema: tablePrefix,
  287. Version: "v1",
  288. KeyValues: map[string]string{"id": id},
  289. UserID: "test",
  290. }).
  291. queryByKeys(&ports.QueryByKeysRequest{
  292. DatabaseID: "2b78141779ee432295ca371b91c5cac7",
  293. TablePrefixWithSchema: tablePrefix,
  294. Version: "v1",
  295. KeyValues: map[string]string{"id": id},
  296. }, &resultMap).
  297. assertEqual(id, resultMap["id"], "ID不一致").
  298. assertEqual(name, resultMap["name"], "名称不一致").
  299. assertEqual(now.UnixMilli(), resultMap["time"].(time.Time).Local().UnixMilli(), "时间不一致").
  300. assertEqual(tableNum, resultMap["table_num"], "表数量不一致")
  301. }