@tdengine/websocket 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (275) hide show
  1. package/lib/package.json +64 -0
  2. package/lib/src/client/retryConfig.d.ts +10 -0
  3. package/lib/src/client/retryConfig.d.ts.map +1 -0
  4. package/lib/src/client/retryConfig.js +46 -0
  5. package/lib/src/client/wsClient.d.ts +24 -7
  6. package/lib/src/client/wsClient.d.ts.map +1 -1
  7. package/lib/src/client/wsClient.js +164 -137
  8. package/lib/src/client/wsConnector.d.ts +55 -9
  9. package/lib/src/client/wsConnector.d.ts.map +1 -1
  10. package/lib/src/client/wsConnector.js +522 -102
  11. package/lib/src/client/wsConnectorPool.d.ts +5 -1
  12. package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
  13. package/lib/src/client/wsConnectorPool.js +67 -52
  14. package/lib/src/client/wsEventCallback.d.ts +3 -0
  15. package/lib/src/client/wsEventCallback.d.ts.map +1 -1
  16. package/lib/src/client/wsEventCallback.js +67 -8
  17. package/lib/src/client/wsResponse.d.ts +0 -3
  18. package/lib/src/client/wsResponse.d.ts.map +1 -1
  19. package/lib/src/client/wsResponse.js +0 -3
  20. package/lib/src/common/addressConnectionTracker.d.ts +11 -0
  21. package/lib/src/common/addressConnectionTracker.d.ts.map +1 -0
  22. package/lib/src/common/addressConnectionTracker.js +53 -0
  23. package/lib/src/common/config.d.ts +3 -0
  24. package/lib/src/common/config.d.ts.map +1 -1
  25. package/lib/src/common/config.js +6 -0
  26. package/lib/src/common/constant.d.ts +1 -0
  27. package/lib/src/common/constant.d.ts.map +1 -1
  28. package/lib/src/common/constant.js +6 -1
  29. package/lib/src/common/dsn.d.ts +30 -0
  30. package/lib/src/common/dsn.d.ts.map +1 -0
  31. package/lib/src/common/dsn.js +221 -0
  32. package/lib/src/common/taosResult.d.ts.map +1 -1
  33. package/lib/src/common/taosResult.js +0 -5
  34. package/lib/src/common/urlParser.d.ts +32 -0
  35. package/lib/src/common/urlParser.d.ts.map +1 -0
  36. package/lib/src/common/urlParser.js +201 -0
  37. package/lib/src/common/utils.d.ts +6 -1
  38. package/lib/src/common/utils.d.ts.map +1 -1
  39. package/lib/src/common/utils.js +74 -22
  40. package/lib/src/index.d.ts.map +1 -1
  41. package/lib/src/sql/wsSql.d.ts.map +1 -1
  42. package/lib/src/sql/wsSql.js +2 -2
  43. package/lib/src/stmt/FieldBindParams.d.ts.map +1 -1
  44. package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -1
  45. package/lib/src/stmt/wsParams1.d.ts.map +1 -1
  46. package/lib/src/stmt/wsParams1.js +26 -26
  47. package/lib/src/stmt/wsParams2.d.ts.map +1 -1
  48. package/lib/src/stmt/wsParams2.js +0 -3
  49. package/lib/src/stmt/wsParamsBase.d.ts.map +1 -1
  50. package/lib/src/stmt/wsProto.d.ts.map +1 -1
  51. package/lib/src/stmt/wsProto.js +16 -16
  52. package/lib/src/stmt/wsStmt1.d.ts.map +1 -1
  53. package/lib/src/stmt/wsStmt2.d.ts +12 -4
  54. package/lib/src/stmt/wsStmt2.d.ts.map +1 -1
  55. package/lib/src/stmt/wsStmt2.js +182 -64
  56. package/lib/src/stmt/wsTableInfo.d.ts.map +1 -1
  57. package/lib/src/tmq/config.d.ts +4 -2
  58. package/lib/src/tmq/config.d.ts.map +1 -1
  59. package/lib/src/tmq/config.js +30 -13
  60. package/lib/src/tmq/constant.d.ts +4 -0
  61. package/lib/src/tmq/constant.d.ts.map +1 -1
  62. package/lib/src/tmq/constant.js +4 -0
  63. package/lib/src/tmq/tmqResponse.d.ts.map +1 -1
  64. package/lib/src/tmq/tmqResponse.js +1 -4
  65. package/lib/src/tmq/wsTmq.d.ts +4 -1
  66. package/lib/src/tmq/wsTmq.d.ts.map +1 -1
  67. package/lib/src/tmq/wsTmq.js +55 -27
  68. package/lib/test/bulkPulling/a.test.d.ts +2 -0
  69. package/lib/test/bulkPulling/a.test.d.ts.map +1 -0
  70. package/lib/test/bulkPulling/a.test.js +166 -0
  71. package/lib/test/bulkPulling/cloud.tmq.test.js +3 -2
  72. package/lib/test/bulkPulling/decimal.test.js +8 -8
  73. package/lib/test/bulkPulling/dsn.test.d.ts +2 -0
  74. package/lib/test/bulkPulling/dsn.test.d.ts.map +1 -0
  75. package/lib/test/bulkPulling/dsn.test.js +397 -0
  76. package/lib/test/bulkPulling/queryTables.test.js +1 -1
  77. package/lib/test/bulkPulling/retryConfig.test.d.ts +2 -0
  78. package/lib/test/bulkPulling/retryConfig.test.d.ts.map +1 -0
  79. package/lib/test/bulkPulling/retryConfig.test.js +34 -0
  80. package/lib/test/bulkPulling/schemaless.test.js +15 -14
  81. package/lib/test/bulkPulling/sql.failover.test.d.ts +2 -0
  82. package/lib/test/bulkPulling/sql.failover.test.d.ts.map +1 -0
  83. package/lib/test/bulkPulling/sql.failover.test.js +338 -0
  84. package/lib/test/bulkPulling/sql.test.js +116 -44
  85. package/lib/test/bulkPulling/stmt1.func.test.js +31 -30
  86. package/lib/test/bulkPulling/stmt1.type.test.js +1 -1
  87. package/lib/test/bulkPulling/stmt2.failover.test.d.ts +2 -0
  88. package/lib/test/bulkPulling/stmt2.failover.test.d.ts.map +1 -0
  89. package/lib/test/bulkPulling/stmt2.failover.test.js +313 -0
  90. package/lib/test/bulkPulling/stmt2.func.test.js +37 -36
  91. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts +2 -0
  92. package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts.map +1 -0
  93. package/lib/test/bulkPulling/stmt2.init.failover.test.js +50 -0
  94. package/lib/test/bulkPulling/stmt2.type.test.js +1 -1
  95. package/lib/test/bulkPulling/tmq.config.test.d.ts +2 -0
  96. package/lib/test/bulkPulling/tmq.config.test.d.ts.map +1 -0
  97. package/lib/test/bulkPulling/tmq.config.test.js +77 -0
  98. package/lib/test/bulkPulling/tmq.failover.test.d.ts +2 -0
  99. package/lib/test/bulkPulling/tmq.failover.test.d.ts.map +1 -0
  100. package/lib/test/bulkPulling/tmq.failover.test.js +404 -0
  101. package/lib/test/bulkPulling/tmq.test.js +135 -14
  102. package/lib/test/bulkPulling/urlParser.test.d.ts +2 -0
  103. package/lib/test/bulkPulling/urlParser.test.d.ts.map +1 -0
  104. package/lib/test/bulkPulling/urlParser.test.js +452 -0
  105. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.d.ts +2 -0
  106. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.d.ts.map +1 -0
  107. package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +184 -0
  108. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts +2 -0
  109. package/lib/test/bulkPulling/wsClient.recovery.test.d.ts.map +1 -0
  110. package/lib/test/bulkPulling/wsClient.recovery.test.js +104 -0
  111. package/lib/test/bulkPulling/wsConfig.dsn.test.d.ts +2 -0
  112. package/lib/test/bulkPulling/wsConfig.dsn.test.d.ts.map +1 -0
  113. package/lib/test/bulkPulling/wsConfig.dsn.test.js +39 -0
  114. package/lib/test/bulkPulling/wsConnectPool.test.js +7 -7
  115. package/lib/test/bulkPulling/wsConnector.failover.test.d.ts +2 -0
  116. package/lib/test/bulkPulling/wsConnector.failover.test.d.ts.map +1 -0
  117. package/lib/test/bulkPulling/wsConnector.failover.test.js +497 -0
  118. package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts +2 -0
  119. package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts.map +1 -0
  120. package/lib/test/bulkPulling/wsConnectorPool.key.test.js +52 -0
  121. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts +2 -0
  122. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts.map +1 -0
  123. package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.js +28 -0
  124. package/lib/test/bulkPulling/wsEventCallback.test.d.ts +2 -0
  125. package/lib/test/bulkPulling/wsEventCallback.test.d.ts.map +1 -0
  126. package/lib/test/bulkPulling/wsEventCallback.test.js +54 -0
  127. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts +2 -0
  128. package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts.map +1 -0
  129. package/lib/test/bulkPulling/wsProxy.failover.integration.test.js +120 -0
  130. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts +2 -0
  131. package/lib/test/bulkPulling/wsProxy.failover.test.d.ts.map +1 -0
  132. package/lib/test/bulkPulling/wsProxy.failover.test.js +465 -0
  133. package/lib/test/client/wsClient.recovery.test.d.ts +2 -0
  134. package/lib/test/client/wsClient.recovery.test.d.ts.map +1 -0
  135. package/lib/test/client/wsClient.recovery.test.js +122 -0
  136. package/lib/test/client/wsConnectPool.test.d.ts +2 -0
  137. package/lib/test/client/wsConnectPool.test.d.ts.map +1 -0
  138. package/lib/test/client/wsConnectPool.test.js +147 -0
  139. package/lib/test/client/wsConnector.failover.test.d.ts +2 -0
  140. package/lib/test/client/wsConnector.failover.test.d.ts.map +1 -0
  141. package/lib/test/client/wsConnector.failover.test.js +681 -0
  142. package/lib/test/client/wsConnector.leastConnections.test.d.ts +2 -0
  143. package/lib/test/client/wsConnector.leastConnections.test.d.ts.map +1 -0
  144. package/lib/test/client/wsConnector.leastConnections.test.js +71 -0
  145. package/lib/test/client/wsConnectorPool.key.test.d.ts +2 -0
  146. package/lib/test/client/wsConnectorPool.key.test.d.ts.map +1 -0
  147. package/lib/test/client/wsConnectorPool.key.test.js +127 -0
  148. package/lib/test/client/wsEventCallback.test.d.ts +2 -0
  149. package/lib/test/client/wsEventCallback.test.d.ts.map +1 -0
  150. package/lib/test/client/wsEventCallback.test.js +98 -0
  151. package/lib/test/common/addressConnectionTracker.test.d.ts +2 -0
  152. package/lib/test/common/addressConnectionTracker.test.d.ts.map +1 -0
  153. package/lib/test/common/addressConnectionTracker.test.js +74 -0
  154. package/lib/test/common/dsn.test.d.ts +2 -0
  155. package/lib/test/common/dsn.test.d.ts.map +1 -0
  156. package/lib/test/common/dsn.test.js +406 -0
  157. package/lib/test/common/log.test.d.ts +2 -0
  158. package/lib/test/common/log.test.d.ts.map +1 -0
  159. package/lib/test/common/log.test.js +54 -0
  160. package/lib/test/common/utils.test.d.ts +2 -0
  161. package/lib/test/common/utils.test.d.ts.map +1 -0
  162. package/lib/test/common/utils.test.js +13 -0
  163. package/lib/test/common/wsConfig.dsn.test.d.ts +2 -0
  164. package/lib/test/common/wsConfig.dsn.test.d.ts.map +1 -0
  165. package/lib/test/common/wsConfig.dsn.test.js +39 -0
  166. package/lib/test/helpers/utils.d.ts +27 -0
  167. package/lib/test/helpers/utils.d.ts.map +1 -0
  168. package/lib/test/helpers/utils.js +341 -0
  169. package/lib/test/helpers/wsFailoverProxy.d.ts +109 -0
  170. package/lib/test/helpers/wsFailoverProxy.d.ts.map +1 -0
  171. package/lib/test/helpers/wsFailoverProxy.js +420 -0
  172. package/lib/test/helpers/wsProxy.d.ts +110 -0
  173. package/lib/test/helpers/wsProxy.d.ts.map +1 -0
  174. package/lib/test/helpers/wsProxy.js +429 -0
  175. package/lib/test/sql/core/decimal.test.d.ts +2 -0
  176. package/lib/test/sql/core/decimal.test.d.ts.map +1 -0
  177. package/lib/test/sql/core/decimal.test.js +153 -0
  178. package/lib/test/sql/core/queryTables.test.d.ts +2 -0
  179. package/lib/test/sql/core/queryTables.test.d.ts.map +1 -0
  180. package/lib/test/sql/core/queryTables.test.js +506 -0
  181. package/lib/test/sql/core/schemaless.test.d.ts +2 -0
  182. package/lib/test/sql/core/schemaless.test.d.ts.map +1 -0
  183. package/lib/test/sql/core/schemaless.test.js +102 -0
  184. package/lib/test/sql/core/sql.test.d.ts +2 -0
  185. package/lib/test/sql/core/sql.test.d.ts.map +1 -0
  186. package/lib/test/sql/core/sql.test.js +324 -0
  187. package/lib/test/sql/decimal.test.d.ts +2 -0
  188. package/lib/test/sql/decimal.test.d.ts.map +1 -0
  189. package/lib/test/sql/decimal.test.js +153 -0
  190. package/lib/test/sql/failover/sql.failover.test.d.ts +2 -0
  191. package/lib/test/sql/failover/sql.failover.test.d.ts.map +1 -0
  192. package/lib/test/sql/failover/sql.failover.test.js +341 -0
  193. package/lib/test/sql/queryTables.test.d.ts +2 -0
  194. package/lib/test/sql/queryTables.test.d.ts.map +1 -0
  195. package/lib/test/sql/queryTables.test.js +506 -0
  196. package/lib/test/sql/schemaless.test.d.ts +2 -0
  197. package/lib/test/sql/schemaless.test.d.ts.map +1 -0
  198. package/lib/test/sql/schemaless.test.js +102 -0
  199. package/lib/test/sql/sql.failover.test.d.ts +2 -0
  200. package/lib/test/sql/sql.failover.test.d.ts.map +1 -0
  201. package/lib/test/sql/sql.failover.test.js +341 -0
  202. package/lib/test/sql/sql.test.d.ts +2 -0
  203. package/lib/test/sql/sql.test.d.ts.map +1 -0
  204. package/lib/test/sql/sql.test.js +324 -0
  205. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts +2 -0
  206. package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts.map +1 -0
  207. package/lib/test/stmt/failover/stmt2.failover.mock.test.js +341 -0
  208. package/lib/test/stmt/failover/stmt2.failover.test.d.ts +2 -0
  209. package/lib/test/stmt/failover/stmt2.failover.test.d.ts.map +1 -0
  210. package/lib/test/stmt/failover/stmt2.failover.test.js +384 -0
  211. package/lib/test/stmt/stmt1.func.test.d.ts +2 -0
  212. package/lib/test/stmt/stmt1.func.test.d.ts.map +1 -0
  213. package/lib/test/stmt/stmt1.func.test.js +418 -0
  214. package/lib/test/stmt/stmt1.type.test.d.ts +2 -0
  215. package/lib/test/stmt/stmt1.type.test.d.ts.map +1 -0
  216. package/lib/test/stmt/stmt1.type.test.js +399 -0
  217. package/lib/test/stmt/stmt2.failover.mock.test.d.ts +2 -0
  218. package/lib/test/stmt/stmt2.failover.mock.test.d.ts.map +1 -0
  219. package/lib/test/stmt/stmt2.failover.mock.test.js +341 -0
  220. package/lib/test/stmt/stmt2.failover.test.d.ts +2 -0
  221. package/lib/test/stmt/stmt2.failover.test.d.ts.map +1 -0
  222. package/lib/test/stmt/stmt2.failover.test.js +384 -0
  223. package/lib/test/stmt/stmt2.func.test.d.ts +2 -0
  224. package/lib/test/stmt/stmt2.func.test.d.ts.map +1 -0
  225. package/lib/test/stmt/stmt2.func.test.js +537 -0
  226. package/lib/test/stmt/stmt2.type.test.d.ts +2 -0
  227. package/lib/test/stmt/stmt2.type.test.d.ts.map +1 -0
  228. package/lib/test/stmt/stmt2.type.test.js +401 -0
  229. package/lib/test/stmt/v1/stmt1.func.test.d.ts +2 -0
  230. package/lib/test/stmt/v1/stmt1.func.test.d.ts.map +1 -0
  231. package/lib/test/stmt/v1/stmt1.func.test.js +418 -0
  232. package/lib/test/stmt/v1/stmt1.type.test.d.ts +2 -0
  233. package/lib/test/stmt/v1/stmt1.type.test.d.ts.map +1 -0
  234. package/lib/test/stmt/v1/stmt1.type.test.js +399 -0
  235. package/lib/test/stmt/v2/stmt2.func.test.d.ts +2 -0
  236. package/lib/test/stmt/v2/stmt2.func.test.d.ts.map +1 -0
  237. package/lib/test/stmt/v2/stmt2.func.test.js +537 -0
  238. package/lib/test/stmt/v2/stmt2.type.test.d.ts +2 -0
  239. package/lib/test/stmt/v2/stmt2.type.test.d.ts.map +1 -0
  240. package/lib/test/stmt/v2/stmt2.type.test.js +401 -0
  241. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts +2 -0
  242. package/lib/test/tmq/cloud/cloud.tmq.test.d.ts.map +1 -0
  243. package/lib/test/tmq/cloud/cloud.tmq.test.js +84 -0
  244. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts +2 -0
  245. package/lib/test/tmq/cloud/tmq.cloud.test.d.ts.map +1 -0
  246. package/lib/test/tmq/cloud/tmq.cloud.test.js +82 -0
  247. package/lib/test/tmq/core/tmq.config.test.d.ts +2 -0
  248. package/lib/test/tmq/core/tmq.config.test.d.ts.map +1 -0
  249. package/lib/test/tmq/core/tmq.config.test.js +83 -0
  250. package/lib/test/tmq/core/tmq.test.d.ts +2 -0
  251. package/lib/test/tmq/core/tmq.test.d.ts.map +1 -0
  252. package/lib/test/tmq/core/tmq.test.js +513 -0
  253. package/lib/test/tmq/failover/tmq.failover.test.d.ts +2 -0
  254. package/lib/test/tmq/failover/tmq.failover.test.d.ts.map +1 -0
  255. package/lib/test/tmq/failover/tmq.failover.test.js +404 -0
  256. package/lib/test/tmq/tmq.cloud.test.d.ts +2 -0
  257. package/lib/test/tmq/tmq.cloud.test.d.ts.map +1 -0
  258. package/lib/test/tmq/tmq.cloud.test.js +82 -0
  259. package/lib/test/tmq/tmq.config.test.d.ts +2 -0
  260. package/lib/test/tmq/tmq.config.test.d.ts.map +1 -0
  261. package/lib/test/tmq/tmq.config.test.js +94 -0
  262. package/lib/test/tmq/tmq.failover.test.d.ts +2 -0
  263. package/lib/test/tmq/tmq.failover.test.d.ts.map +1 -0
  264. package/lib/test/tmq/tmq.failover.test.js +404 -0
  265. package/lib/test/tmq/tmq.test.d.ts +2 -0
  266. package/lib/test/tmq/tmq.test.d.ts.map +1 -0
  267. package/lib/test/tmq/tmq.test.js +513 -0
  268. package/lib/test/unit/connectionManager.test.d.ts +2 -0
  269. package/lib/test/unit/connectionManager.test.d.ts.map +1 -0
  270. package/lib/test/unit/connectionManager.test.js +91 -0
  271. package/lib/test/utils.d.ts +4 -0
  272. package/lib/test/utils.d.ts.map +1 -1
  273. package/lib/test/utils.js +11 -17
  274. package/package.json +1 -1
  275. package/readme.md +2 -2
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const websocket_1 = require("websocket");
4
+ const wsClient_1 = require("@src/client/wsClient");
5
+ const wsConnectorPool_1 = require("@src/client/wsConnectorPool");
6
+ const dsn_1 = require("@src/common/dsn");
7
+ const wsError_1 = require("@src/common/wsError");
8
+ function createMockConnector() {
9
+ return {
10
+ readyState: jest.fn(() => websocket_1.w3cwebsocket.OPEN),
11
+ ready: jest.fn(async () => { }),
12
+ setSessionRecoveryHook: jest.fn(),
13
+ sendMsgDirect: jest.fn(async (_message) => ({
14
+ msg: { code: 0, message: "" }
15
+ })),
16
+ sendMsg: jest.fn(async () => ({ msg: { code: 0, message: "" } })),
17
+ sendMsgNoResp: jest.fn(async () => { }),
18
+ };
19
+ }
20
+ describe("WsClient recovery hook", () => {
21
+ afterEach(() => {
22
+ jest.restoreAllMocks();
23
+ });
24
+ test("uses dsn endpoint when creating connection", async () => {
25
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
26
+ dsn.endpoint = dsn_1.WS_TMQ_ENDPOINT;
27
+ const connector = createMockConnector();
28
+ const getConnectionSpy = jest
29
+ .spyOn(wsConnectorPool_1.WebSocketConnectionPool.instance(), "getConnection")
30
+ .mockResolvedValue(connector);
31
+ const client = new wsClient_1.WsClient(dsn, 4321);
32
+ await client.ready();
33
+ expect(getConnectionSpy).toHaveBeenCalledWith(dsn, 4321);
34
+ });
35
+ test("runs custom recovery hook without sql conn recovery on tmq path", async () => {
36
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
37
+ dsn.endpoint = dsn_1.WS_TMQ_ENDPOINT;
38
+ const connector = createMockConnector();
39
+ jest
40
+ .spyOn(wsConnectorPool_1.WebSocketConnectionPool.instance(), "getConnection")
41
+ .mockResolvedValue(connector);
42
+ const customRecoveryHook = jest.fn(async () => { });
43
+ const client = new wsClient_1.WsClient(dsn, 5000);
44
+ client.setSessionRecoveryHook(customRecoveryHook);
45
+ await client.ready();
46
+ const hookCalls = connector.setSessionRecoveryHook.mock.calls;
47
+ const hook = hookCalls[hookCalls.length - 1]?.[0];
48
+ expect(hook).toBeTruthy();
49
+ await hook();
50
+ expect(connector.sendMsgDirect).not.toHaveBeenCalled();
51
+ expect(customRecoveryHook).toHaveBeenCalledTimes(1);
52
+ });
53
+ test("keeps sql conn recovery and then runs custom recovery on sql endpoint", async () => {
54
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
55
+ const connector = createMockConnector();
56
+ const callOrder = [];
57
+ connector.sendMsgDirect.mockImplementation(async (message) => {
58
+ const action = JSON.parse(message).action;
59
+ callOrder.push(action);
60
+ return { msg: { code: 0, message: "" } };
61
+ });
62
+ jest
63
+ .spyOn(wsConnectorPool_1.WebSocketConnectionPool.instance(), "getConnection")
64
+ .mockResolvedValue(connector);
65
+ const client = new wsClient_1.WsClient(dsn, 5000);
66
+ client._connectedDatabase = "db_recovery";
67
+ client.setSessionRecoveryHook(async () => {
68
+ callOrder.push("custom");
69
+ });
70
+ await client.ready();
71
+ const hookCalls = connector.setSessionRecoveryHook.mock.calls;
72
+ const hook = hookCalls[hookCalls.length - 1]?.[0];
73
+ expect(hook).toBeTruthy();
74
+ await hook();
75
+ expect(connector.sendMsgDirect).toHaveBeenCalledTimes(1);
76
+ const firstCall = connector.sendMsgDirect.mock.calls[0];
77
+ const connMsg = JSON.parse(firstCall[0]);
78
+ expect(connMsg.action).toBe("conn");
79
+ expect(connMsg.args.db).toBe("db_recovery");
80
+ expect(callOrder).toEqual(["conn", "custom"]);
81
+ });
82
+ test("throws WebSocketQueryError when sql recovery direct call fails", async () => {
83
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
84
+ const connector = createMockConnector();
85
+ connector.sendMsgDirect.mockResolvedValue({
86
+ msg: {
87
+ code: 9001,
88
+ message: "conn failed",
89
+ },
90
+ });
91
+ jest
92
+ .spyOn(wsConnectorPool_1.WebSocketConnectionPool.instance(), "getConnection")
93
+ .mockResolvedValue(connector);
94
+ const customRecoveryHook = jest.fn(async () => { });
95
+ const client = new wsClient_1.WsClient(dsn, 5000);
96
+ client.setSessionRecoveryHook(customRecoveryHook);
97
+ await client.ready();
98
+ const hookCalls = connector.setSessionRecoveryHook.mock.calls;
99
+ const hook = hookCalls[hookCalls.length - 1]?.[0];
100
+ expect(hook).toBeTruthy();
101
+ await expect(hook()).rejects.toBeInstanceOf(wsError_1.WebSocketQueryError);
102
+ expect(customRecoveryHook).not.toHaveBeenCalled();
103
+ });
104
+ test("restores default information_schema during sql recovery when no db provided", async () => {
105
+ const dsn = (0, dsn_1.parse)("ws://root:taosdata@localhost:6041");
106
+ const connector = createMockConnector();
107
+ jest
108
+ .spyOn(wsConnectorPool_1.WebSocketConnectionPool.instance(), "getConnection")
109
+ .mockResolvedValue(connector);
110
+ const client = new wsClient_1.WsClient(dsn, 5000);
111
+ await client.connect();
112
+ const hookCalls = connector.setSessionRecoveryHook.mock.calls;
113
+ const hook = hookCalls[hookCalls.length - 1]?.[0];
114
+ expect(hook).toBeTruthy();
115
+ await hook();
116
+ expect(connector.sendMsgDirect).toHaveBeenCalledTimes(1);
117
+ const firstCall = connector.sendMsgDirect.mock.calls[0];
118
+ const connMsg = JSON.parse(firstCall[0]);
119
+ expect(connMsg.action).toBe("conn");
120
+ expect(connMsg.args.db).toBe("information_schema");
121
+ });
122
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wsConnectPool.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsConnectPool.test.d.ts","sourceRoot":"","sources":["../../../test/client/wsConnectPool.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const wsConnectorPool_1 = require("@src/client/wsConnectorPool");
4
+ const config_1 = require("@src/common/config");
5
+ const reqid_1 = require("@src/common/reqid");
6
+ const wsSql_1 = require("@src/sql/wsSql");
7
+ const constant_1 = require("@src/tmq/constant");
8
+ const wsTmq_1 = require("@src/tmq/wsTmq");
9
+ const utils_1 = require("@test-helpers/utils");
10
+ const log_1 = require("@src/common/log");
11
+ let dsn = `ws://${(0, utils_1.testUsername)()}:${(0, utils_1.testPassword)()}@localhost:6041`;
12
+ let tags = ["California.SanFrancisco", 3];
13
+ let multi = [
14
+ [1709183268567, 1709183268568, 1709183268569],
15
+ [10.2, 10.3, 10.4],
16
+ [292, 293, 294],
17
+ [0.32, 0.33, 0.34],
18
+ ];
19
+ let configMap = new Map([
20
+ [constant_1.TMQConstants.GROUP_ID, "gId"],
21
+ [constant_1.TMQConstants.CONNECT_USER, (0, utils_1.testUsername)()],
22
+ [constant_1.TMQConstants.CONNECT_PASS, (0, utils_1.testPassword)()],
23
+ [constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
24
+ [constant_1.TMQConstants.CLIENT_ID, "test_tmq_client"],
25
+ [constant_1.TMQConstants.WS_URL, "ws://localhost:6041"],
26
+ [constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "true"],
27
+ [constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
28
+ ]);
29
+ const stable = "meters";
30
+ const db = "power_connect";
31
+ const topics = ["pwer_meters_topic"];
32
+ let createTopic = `create topic if not exists ${topics[0]} as select * from ${db}.${stable}`;
33
+ let stmtIds = [];
34
+ (0, log_1.setLevel)("debug");
35
+ async function connect() {
36
+ let dsn = `ws://${(0, utils_1.testUsername)()}:${(0, utils_1.testPassword)()}@localhost:6041`;
37
+ let wsSql = null;
38
+ let conf = new config_1.WSConfig(dsn);
39
+ conf.setDb(db);
40
+ wsSql = await wsSql_1.WsSql.open(conf);
41
+ expect(wsSql.state()).toBeGreaterThan(0);
42
+ console.log(await wsSql.version());
43
+ await wsSql.close();
44
+ }
45
+ async function stmtConnect() {
46
+ let dsn = `ws://${(0, utils_1.testUsername)()}:${(0, utils_1.testPassword)()}@localhost:6041`;
47
+ let wsConf = new config_1.WSConfig(dsn, "100.100.100.100");
48
+ wsConf.setDb(db);
49
+ let connector = await wsSql_1.WsSql.open(wsConf);
50
+ let stmt = (await connector.stmtInit());
51
+ let id = stmt.getStmtId();
52
+ if (id) {
53
+ stmtIds.push(id);
54
+ }
55
+ expect(stmt).toBeTruthy();
56
+ await stmt.prepare(`INSERT INTO ? USING ${stable} (location, groupId) TAGS (?, ?) VALUES (?, ?, ?, ?)`);
57
+ await stmt.setTableName("d1001");
58
+ await stmt.setJsonTags(tags);
59
+ let lastTs = 0;
60
+ const allp = [];
61
+ for (let i = 0; i < 10; i++) {
62
+ for (let j = 0; j < multi[0].length; j++) {
63
+ multi[0][j] = multi[0][0] + j;
64
+ lastTs = multi[0][j];
65
+ }
66
+ allp.push(stmt.jsonBind(multi));
67
+ multi[0][0] = lastTs + 1;
68
+ }
69
+ await Promise.all(allp);
70
+ await stmt.batch();
71
+ await stmt.exec();
72
+ expect(stmt.getLastAffected()).toEqual(30);
73
+ await stmt.close();
74
+ await connector.close();
75
+ }
76
+ async function tmqConnect() {
77
+ let consumer = null;
78
+ try {
79
+ consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
80
+ await consumer.subscribe(topics);
81
+ let res = await consumer.poll(100);
82
+ for (let [key, value] of res) {
83
+ console.log(key, value.getMeta());
84
+ let data = value.getData();
85
+ if (data == null || data.length == 0) {
86
+ break;
87
+ }
88
+ for (let record of data) {
89
+ console.log(record);
90
+ }
91
+ }
92
+ await consumer.commit();
93
+ let assignment = await consumer.assignment();
94
+ console.log(assignment);
95
+ if (arguments && arguments.length > 0)
96
+ await consumer.seekToBeginning(assignment);
97
+ await consumer.unsubscribe();
98
+ }
99
+ catch (e) {
100
+ console.error(e);
101
+ }
102
+ finally {
103
+ if (consumer) {
104
+ await consumer.close();
105
+ }
106
+ }
107
+ }
108
+ beforeAll(async () => {
109
+ let conf = new config_1.WSConfig(dsn);
110
+ let ws = await wsSql_1.WsSql.open(conf);
111
+ await ws.exec(`create database if not exists ${db} KEEP 3650 DURATION 10 BUFFER 16 WAL_LEVEL 1;`);
112
+ await (0, utils_1.Sleep)(100);
113
+ await ws.exec(`CREATE STABLE if not exists ${db}.${stable} (ts timestamp, current float, voltage int, phase float) TAGS (location binary(64), groupId int);`);
114
+ await (0, utils_1.Sleep)(100);
115
+ await ws.exec(createTopic, reqid_1.ReqId.getReqID());
116
+ await ws.close();
117
+ });
118
+ describe("TDWebSocket.WsSql()", () => {
119
+ jest.setTimeout(60 * 1000);
120
+ test("ReqId", async () => {
121
+ const allp = [];
122
+ for (let i = 0; i < 10; i++) {
123
+ allp.push(console.log(reqid_1.ReqId.getReqID()));
124
+ }
125
+ await Promise.all(allp);
126
+ });
127
+ test("normal connect", async () => {
128
+ const allp = [];
129
+ for (let i = 0; i < 20; i++) {
130
+ allp.push(connect());
131
+ allp.push(stmtConnect());
132
+ allp.push(tmqConnect());
133
+ }
134
+ await Promise.all(allp);
135
+ console.log(stmtIds);
136
+ });
137
+ });
138
+ afterAll(async () => {
139
+ let conf = new config_1.WSConfig(dsn);
140
+ conf.setUser((0, utils_1.testUsername)());
141
+ conf.setPwd((0, utils_1.testPassword)());
142
+ let wsSql = await wsSql_1.WsSql.open(conf);
143
+ await wsSql.exec(`drop topic if exists ${topics[0]};`);
144
+ await wsSql.exec(`drop database if exists ${db};`);
145
+ await wsSql.close();
146
+ wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
147
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wsConnector.failover.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wsConnector.failover.test.d.ts","sourceRoot":"","sources":["../../../test/client/wsConnector.failover.test.ts"],"names":[],"mappings":""}