sdk_test.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. package main
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-tools/utils/strutils"
  5. "git.sxidc.com/service-supports/ds-sdk/sdk"
  6. "git.sxidc.com/service-supports/ds-sdk/sdk/raw_sql_tpl"
  7. "math/rand"
  8. "strconv"
  9. "sync"
  10. "testing"
  11. "time"
  12. )
  13. const (
  14. token = "IpTTwAQweh/BP51fz5CzWKQFaXHvZe6ewvk6yOcAOkU="
  15. address = "localhost"
  16. httpPort = "10000"
  17. grpcPort = "10001"
  18. namespace = "ns-sdk-demo"
  19. dataSource = "ds-sdk-demo"
  20. deleteSql = "delete-sdk-demo"
  21. goRoutineCount = 100
  22. tableName = "test.classes"
  23. )
  24. var (
  25. sqlSpec = sdk.SqlSpec{
  26. Clauses: "- DELETE FROM {{ .table_name }} WHERE id = '{{ .id }}'",
  27. }
  28. )
  29. func TestBasic(t *testing.T) {
  30. classID := strutils.SimpleUUID()
  31. className := strutils.SimpleUUID()
  32. studentNum := rand.Int31n(100)
  33. insertExecuteParams, err := raw_sql_tpl.InsertExecuteParams{
  34. TableName: tableName,
  35. TableRows: []raw_sql_tpl.TableRow{
  36. {
  37. Column: "id",
  38. Value: "'" + classID + "'",
  39. },
  40. {
  41. Column: "name",
  42. Value: "'" + className + "'",
  43. },
  44. {
  45. Column: "student_num",
  46. Value: strconv.FormatInt(int64(studentNum), 10),
  47. },
  48. },
  49. }.Map()
  50. if err != nil {
  51. t.Fatal(err)
  52. }
  53. deleteExecuteParams := map[string]any{
  54. "table_name": tableName,
  55. "id": classID,
  56. }
  57. err = sdk.InitInstance(token, address, httpPort, grpcPort, namespace, dataSource)
  58. if err != nil {
  59. t.Fatal(err)
  60. }
  61. defer func() {
  62. err := sdk.DestroyInstance()
  63. if err != nil {
  64. t.Fatal(err)
  65. }
  66. }()
  67. err = sdk.GetInstance().CreateSQL(deleteSql, sqlSpec.ToMap())
  68. if err != nil {
  69. t.Fatal(err)
  70. }
  71. _, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.InsertTpl, insertExecuteParams)
  72. if err != nil {
  73. t.Fatal(err)
  74. }
  75. _, err = sdk.GetInstance().ExecuteSql(deleteSql, deleteExecuteParams)
  76. if err != nil {
  77. t.Fatal(err)
  78. }
  79. wg := sync.WaitGroup{}
  80. wg.Add(goRoutineCount)
  81. start := time.Now()
  82. for i := 0; i < goRoutineCount; i++ {
  83. go func() {
  84. defer wg.Done()
  85. err = sdk.GetInstance().Transaction(func(tx *sdk.Transaction) error {
  86. err := tx.ExecuteRawSql(raw_sql_tpl.InsertTpl, insertExecuteParams)
  87. if err != nil {
  88. return err
  89. }
  90. err = tx.ExecuteSql(deleteSql, deleteExecuteParams)
  91. if err != nil {
  92. return err
  93. }
  94. return nil
  95. })
  96. if err != nil {
  97. panic(err)
  98. }
  99. }()
  100. }
  101. wg.Wait()
  102. end := time.Now()
  103. fmt.Println(end.Sub(start).Milliseconds())
  104. }
  105. func TestRawSqlTemplate(t *testing.T) {
  106. classID := strutils.SimpleUUID()
  107. className := strutils.SimpleUUID()
  108. studentNum := rand.Int31n(100)
  109. newClassName := strutils.SimpleUUID()
  110. newStudentNum := rand.Int31n(100)
  111. insertExecuteParams, err := raw_sql_tpl.InsertExecuteParams{
  112. TableName: tableName,
  113. TableRows: []raw_sql_tpl.TableRow{
  114. {
  115. Column: "id",
  116. Value: "'" + classID + "'",
  117. },
  118. {
  119. Column: "name",
  120. Value: "'" + className + "'",
  121. },
  122. {
  123. Column: "student_num",
  124. Value: strconv.FormatInt(int64(studentNum), 10),
  125. },
  126. },
  127. }.Map()
  128. if err != nil {
  129. t.Fatal(err)
  130. }
  131. deleteExecuteParams, err := raw_sql_tpl.DeleteExecuteParams{
  132. TableName: tableName,
  133. Conditions: []raw_sql_tpl.Condition{
  134. {
  135. Column: "id",
  136. Value: "'" + classID + "'",
  137. },
  138. },
  139. }.Map()
  140. if err != nil {
  141. t.Fatal(err)
  142. }
  143. updateExecuteParams, err := raw_sql_tpl.UpdateExecuteParams{
  144. TableName: tableName,
  145. TableRows: []raw_sql_tpl.TableRow{
  146. {
  147. Column: "name",
  148. Value: "'" + newClassName + "'",
  149. },
  150. {
  151. Column: "student_num",
  152. Value: strconv.FormatInt(int64(newStudentNum), 10),
  153. },
  154. },
  155. Conditions: []raw_sql_tpl.Condition{
  156. {
  157. Column: "id",
  158. Value: "'" + classID + "'",
  159. },
  160. },
  161. }.Map()
  162. if err != nil {
  163. t.Fatal(err)
  164. }
  165. queryExecuteParams, err := raw_sql_tpl.QueryExecuteParams{
  166. TableName: tableName,
  167. Conditions: []raw_sql_tpl.Condition{
  168. {
  169. Column: "id",
  170. Value: "'" + classID + "'",
  171. },
  172. {
  173. Column: "name",
  174. Value: "'" + className + "'",
  175. },
  176. {
  177. Column: "student_num",
  178. Value: strconv.FormatInt(int64(studentNum), 10),
  179. },
  180. },
  181. Limit: 1,
  182. Offset: 0,
  183. }.Map()
  184. if err != nil {
  185. t.Fatal(err)
  186. }
  187. newQueryExecuteParams, err := raw_sql_tpl.QueryExecuteParams{
  188. TableName: tableName,
  189. Conditions: []raw_sql_tpl.Condition{
  190. {
  191. Column: "id",
  192. Value: "'" + classID + "'",
  193. },
  194. {
  195. Column: "name",
  196. Value: "'" + newClassName + "'",
  197. },
  198. {
  199. Column: "student_num",
  200. Value: strconv.FormatInt(int64(newStudentNum), 10),
  201. },
  202. },
  203. Limit: 0,
  204. Offset: 0,
  205. }.Map()
  206. if err != nil {
  207. t.Fatal(err)
  208. }
  209. countExecuteParams, err := raw_sql_tpl.CountExecuteParams{
  210. TableName: tableName,
  211. Conditions: []raw_sql_tpl.Condition{
  212. {
  213. Column: "id",
  214. Value: "'" + classID + "'",
  215. },
  216. {
  217. Column: "name",
  218. Value: "'" + className + "'",
  219. },
  220. {
  221. Column: "student_num",
  222. Value: strconv.FormatInt(int64(studentNum), 10),
  223. },
  224. },
  225. }.Map()
  226. if err != nil {
  227. t.Fatal(err)
  228. }
  229. newCountExecuteParams, err := raw_sql_tpl.CountExecuteParams{
  230. TableName: tableName,
  231. Conditions: []raw_sql_tpl.Condition{
  232. {
  233. Column: "id",
  234. Value: "'" + classID + "'",
  235. },
  236. {
  237. Column: "name",
  238. Value: "'" + newClassName + "'",
  239. },
  240. {
  241. Column: "student_num",
  242. Value: strconv.FormatInt(int64(newStudentNum), 10),
  243. },
  244. },
  245. }.Map()
  246. if err != nil {
  247. t.Fatal(err)
  248. }
  249. err = sdk.InitInstance(token, address, httpPort, grpcPort, namespace, dataSource)
  250. if err != nil {
  251. t.Fatal(err)
  252. }
  253. defer func() {
  254. err := sdk.DestroyInstance()
  255. if err != nil {
  256. t.Fatal(err)
  257. }
  258. }()
  259. _, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.InsertTpl, insertExecuteParams)
  260. if err != nil {
  261. t.Fatal(err)
  262. }
  263. queryResults, err := sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.QueryTpl, queryExecuteParams)
  264. if err != nil {
  265. t.Fatal(err)
  266. }
  267. countResults, err := sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.CountTpl, countExecuteParams)
  268. if err != nil {
  269. t.Fatal(err)
  270. }
  271. if float64(len(queryResults)) != countResults[0]["count"].(float64) {
  272. t.Fatal("总数不正确")
  273. }
  274. if queryResults[0]["id"].(string) != classID ||
  275. queryResults[0]["name"].(string) != className ||
  276. queryResults[0]["student_num"].(float64) != float64(studentNum) {
  277. t.Fatal("查询数据不正确")
  278. }
  279. _, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.UpdateTpl, updateExecuteParams)
  280. if err != nil {
  281. t.Fatal(err)
  282. }
  283. queryResults, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.QueryTpl, newQueryExecuteParams)
  284. if err != nil {
  285. t.Fatal(err)
  286. }
  287. countResults, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.CountTpl, newCountExecuteParams)
  288. if err != nil {
  289. t.Fatal(err)
  290. }
  291. if float64(len(queryResults)) != countResults[0]["count"].(float64) {
  292. t.Fatal("总数不正确")
  293. }
  294. if queryResults[0]["id"].(string) != classID ||
  295. queryResults[0]["name"].(string) != newClassName ||
  296. queryResults[0]["student_num"].(float64) != float64(newStudentNum) {
  297. t.Fatal("查询数据不正确")
  298. }
  299. _, err = sdk.GetInstance().ExecuteRawSql(raw_sql_tpl.DeleteTpl, deleteExecuteParams)
  300. if err != nil {
  301. t.Fatal(err)
  302. }
  303. }