@tdengine/websocket 3.2.3 → 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.
- package/lib/package.json +1 -1
- package/lib/src/client/wsClient.d.ts +23 -7
- package/lib/src/client/wsClient.d.ts.map +1 -1
- package/lib/src/client/wsClient.js +154 -139
- package/lib/src/client/wsConnector.d.ts +55 -9
- package/lib/src/client/wsConnector.d.ts.map +1 -1
- package/lib/src/client/wsConnector.js +519 -100
- package/lib/src/client/wsConnectorPool.d.ts +5 -1
- package/lib/src/client/wsConnectorPool.d.ts.map +1 -1
- package/lib/src/client/wsConnectorPool.js +61 -43
- package/lib/src/client/wsEventCallback.d.ts +3 -0
- package/lib/src/client/wsEventCallback.d.ts.map +1 -1
- package/lib/src/client/wsEventCallback.js +67 -8
- package/lib/src/common/addressConnectionTracker.d.ts +11 -0
- package/lib/src/common/addressConnectionTracker.d.ts.map +1 -0
- package/lib/src/common/addressConnectionTracker.js +53 -0
- package/lib/src/common/dsn.d.ts +14 -2
- package/lib/src/common/dsn.d.ts.map +1 -1
- package/lib/src/common/dsn.js +91 -22
- package/lib/src/common/taosResult.d.ts.map +1 -1
- package/lib/src/common/taosResult.js +0 -5
- package/lib/src/common/urlParser.d.ts +32 -0
- package/lib/src/common/urlParser.d.ts.map +1 -0
- package/lib/src/common/urlParser.js +201 -0
- package/lib/src/common/utils.d.ts +2 -1
- package/lib/src/common/utils.d.ts.map +1 -1
- package/lib/src/common/utils.js +35 -34
- package/lib/src/sql/wsSql.js +2 -2
- package/lib/src/stmt/FieldBindParams.d.ts.map +1 -1
- package/lib/src/stmt/wsColumnInfo.d.ts.map +1 -1
- package/lib/src/stmt/wsParams1.d.ts.map +1 -1
- package/lib/src/stmt/wsParams1.js +26 -26
- package/lib/src/stmt/wsParams2.d.ts.map +1 -1
- package/lib/src/stmt/wsParams2.js +0 -3
- package/lib/src/stmt/wsParamsBase.d.ts.map +1 -1
- package/lib/src/stmt/wsProto.d.ts.map +1 -1
- package/lib/src/stmt/wsProto.js +16 -16
- package/lib/src/stmt/wsStmt1.d.ts.map +1 -1
- package/lib/src/stmt/wsStmt2.d.ts +12 -4
- package/lib/src/stmt/wsStmt2.d.ts.map +1 -1
- package/lib/src/stmt/wsStmt2.js +182 -64
- package/lib/src/stmt/wsTableInfo.d.ts.map +1 -1
- package/lib/src/tmq/config.d.ts +3 -2
- package/lib/src/tmq/config.d.ts.map +1 -1
- package/lib/src/tmq/config.js +15 -15
- package/lib/src/tmq/wsTmq.d.ts +4 -1
- package/lib/src/tmq/wsTmq.d.ts.map +1 -1
- package/lib/src/tmq/wsTmq.js +50 -27
- package/lib/test/bulkPulling/a.test.d.ts +2 -0
- package/lib/test/bulkPulling/a.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/a.test.js +166 -0
- package/lib/test/bulkPulling/dsn.test.js +19 -0
- package/lib/test/bulkPulling/retryConfig.test.js +11 -11
- package/lib/test/bulkPulling/sql.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/sql.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/sql.failover.test.js +338 -0
- package/lib/test/bulkPulling/stmt2.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/stmt2.failover.test.js +313 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/stmt2.init.failover.test.js +50 -0
- package/lib/test/bulkPulling/tmq.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/tmq.failover.test.js +404 -0
- package/lib/test/bulkPulling/urlParser.test.d.ts +2 -0
- package/lib/test/bulkPulling/urlParser.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/urlParser.test.js +452 -0
- package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +2 -2
- package/lib/test/bulkPulling/wsClient.recovery.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsClient.recovery.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsClient.recovery.test.js +104 -0
- package/lib/test/bulkPulling/wsConfig.dsn.test.js +2 -0
- package/lib/test/bulkPulling/wsConnector.failover.test.js +396 -27
- package/lib/test/bulkPulling/wsConnectorPool.key.test.js +12 -10
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsConnectorPool.keyAuth.test.js +28 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsProxy.failover.integration.test.js +120 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsProxy.failover.test.js +465 -0
- package/lib/test/client/wsClient.recovery.test.d.ts +2 -0
- package/lib/test/client/wsClient.recovery.test.d.ts.map +1 -0
- package/lib/test/client/wsClient.recovery.test.js +122 -0
- package/lib/test/client/wsConnectPool.test.d.ts +2 -0
- package/lib/test/client/wsConnectPool.test.d.ts.map +1 -0
- package/lib/test/client/wsConnectPool.test.js +147 -0
- package/lib/test/client/wsConnector.failover.test.d.ts +2 -0
- package/lib/test/client/wsConnector.failover.test.d.ts.map +1 -0
- package/lib/test/client/wsConnector.failover.test.js +681 -0
- package/lib/test/client/wsConnector.leastConnections.test.d.ts +2 -0
- package/lib/test/client/wsConnector.leastConnections.test.d.ts.map +1 -0
- package/lib/test/client/wsConnector.leastConnections.test.js +71 -0
- package/lib/test/client/wsConnectorPool.key.test.d.ts +2 -0
- package/lib/test/client/wsConnectorPool.key.test.d.ts.map +1 -0
- package/lib/test/client/wsConnectorPool.key.test.js +127 -0
- package/lib/test/client/wsEventCallback.test.d.ts +2 -0
- package/lib/test/client/wsEventCallback.test.d.ts.map +1 -0
- package/lib/test/client/wsEventCallback.test.js +98 -0
- package/lib/test/common/addressConnectionTracker.test.d.ts +2 -0
- package/lib/test/common/addressConnectionTracker.test.d.ts.map +1 -0
- package/lib/test/common/addressConnectionTracker.test.js +74 -0
- package/lib/test/common/dsn.test.d.ts +2 -0
- package/lib/test/common/dsn.test.d.ts.map +1 -0
- package/lib/test/common/dsn.test.js +406 -0
- package/lib/test/common/log.test.d.ts +2 -0
- package/lib/test/common/log.test.d.ts.map +1 -0
- package/lib/test/common/log.test.js +54 -0
- package/lib/test/common/utils.test.d.ts +2 -0
- package/lib/test/common/utils.test.d.ts.map +1 -0
- package/lib/test/common/utils.test.js +13 -0
- package/lib/test/common/wsConfig.dsn.test.d.ts +2 -0
- package/lib/test/common/wsConfig.dsn.test.d.ts.map +1 -0
- package/lib/test/common/wsConfig.dsn.test.js +39 -0
- package/lib/test/helpers/utils.d.ts +27 -0
- package/lib/test/helpers/utils.d.ts.map +1 -0
- package/lib/test/helpers/utils.js +341 -0
- package/lib/test/helpers/wsFailoverProxy.d.ts +109 -0
- package/lib/test/helpers/wsFailoverProxy.d.ts.map +1 -0
- package/lib/test/helpers/wsFailoverProxy.js +420 -0
- package/lib/test/helpers/wsProxy.d.ts +110 -0
- package/lib/test/helpers/wsProxy.d.ts.map +1 -0
- package/lib/test/helpers/wsProxy.js +429 -0
- package/lib/test/sql/core/decimal.test.d.ts +2 -0
- package/lib/test/sql/core/decimal.test.d.ts.map +1 -0
- package/lib/test/sql/core/decimal.test.js +153 -0
- package/lib/test/sql/core/queryTables.test.d.ts +2 -0
- package/lib/test/sql/core/queryTables.test.d.ts.map +1 -0
- package/lib/test/sql/core/queryTables.test.js +506 -0
- package/lib/test/sql/core/schemaless.test.d.ts +2 -0
- package/lib/test/sql/core/schemaless.test.d.ts.map +1 -0
- package/lib/test/sql/core/schemaless.test.js +102 -0
- package/lib/test/sql/core/sql.test.d.ts +2 -0
- package/lib/test/sql/core/sql.test.d.ts.map +1 -0
- package/lib/test/sql/core/sql.test.js +324 -0
- package/lib/test/sql/decimal.test.d.ts +2 -0
- package/lib/test/sql/decimal.test.d.ts.map +1 -0
- package/lib/test/sql/decimal.test.js +153 -0
- package/lib/test/sql/failover/sql.failover.test.d.ts +2 -0
- package/lib/test/sql/failover/sql.failover.test.d.ts.map +1 -0
- package/lib/test/sql/failover/sql.failover.test.js +341 -0
- package/lib/test/sql/queryTables.test.d.ts +2 -0
- package/lib/test/sql/queryTables.test.d.ts.map +1 -0
- package/lib/test/sql/queryTables.test.js +506 -0
- package/lib/test/sql/schemaless.test.d.ts +2 -0
- package/lib/test/sql/schemaless.test.d.ts.map +1 -0
- package/lib/test/sql/schemaless.test.js +102 -0
- package/lib/test/sql/sql.failover.test.d.ts +2 -0
- package/lib/test/sql/sql.failover.test.d.ts.map +1 -0
- package/lib/test/sql/sql.failover.test.js +341 -0
- package/lib/test/sql/sql.test.d.ts +2 -0
- package/lib/test/sql/sql.test.d.ts.map +1 -0
- package/lib/test/sql/sql.test.js +324 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts +2 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.d.ts.map +1 -0
- package/lib/test/stmt/failover/stmt2.failover.mock.test.js +341 -0
- package/lib/test/stmt/failover/stmt2.failover.test.d.ts +2 -0
- package/lib/test/stmt/failover/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/stmt/failover/stmt2.failover.test.js +384 -0
- package/lib/test/stmt/stmt1.func.test.d.ts +2 -0
- package/lib/test/stmt/stmt1.func.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt1.func.test.js +418 -0
- package/lib/test/stmt/stmt1.type.test.d.ts +2 -0
- package/lib/test/stmt/stmt1.type.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt1.type.test.js +399 -0
- package/lib/test/stmt/stmt2.failover.mock.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.failover.mock.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.failover.mock.test.js +341 -0
- package/lib/test/stmt/stmt2.failover.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.failover.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.failover.test.js +384 -0
- package/lib/test/stmt/stmt2.func.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.func.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.func.test.js +537 -0
- package/lib/test/stmt/stmt2.type.test.d.ts +2 -0
- package/lib/test/stmt/stmt2.type.test.d.ts.map +1 -0
- package/lib/test/stmt/stmt2.type.test.js +401 -0
- package/lib/test/stmt/v1/stmt1.func.test.d.ts +2 -0
- package/lib/test/stmt/v1/stmt1.func.test.d.ts.map +1 -0
- package/lib/test/stmt/v1/stmt1.func.test.js +418 -0
- package/lib/test/stmt/v1/stmt1.type.test.d.ts +2 -0
- package/lib/test/stmt/v1/stmt1.type.test.d.ts.map +1 -0
- package/lib/test/stmt/v1/stmt1.type.test.js +399 -0
- package/lib/test/stmt/v2/stmt2.func.test.d.ts +2 -0
- package/lib/test/stmt/v2/stmt2.func.test.d.ts.map +1 -0
- package/lib/test/stmt/v2/stmt2.func.test.js +537 -0
- package/lib/test/stmt/v2/stmt2.type.test.d.ts +2 -0
- package/lib/test/stmt/v2/stmt2.type.test.d.ts.map +1 -0
- package/lib/test/stmt/v2/stmt2.type.test.js +401 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.d.ts +2 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/cloud/cloud.tmq.test.js +84 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.d.ts +2 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.d.ts.map +1 -0
- package/lib/test/tmq/cloud/tmq.cloud.test.js +82 -0
- package/lib/test/tmq/core/tmq.config.test.d.ts +2 -0
- package/lib/test/tmq/core/tmq.config.test.d.ts.map +1 -0
- package/lib/test/tmq/core/tmq.config.test.js +83 -0
- package/lib/test/tmq/core/tmq.test.d.ts +2 -0
- package/lib/test/tmq/core/tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/core/tmq.test.js +513 -0
- package/lib/test/tmq/failover/tmq.failover.test.d.ts +2 -0
- package/lib/test/tmq/failover/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/tmq/failover/tmq.failover.test.js +404 -0
- package/lib/test/tmq/tmq.cloud.test.d.ts +2 -0
- package/lib/test/tmq/tmq.cloud.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.cloud.test.js +82 -0
- package/lib/test/tmq/tmq.config.test.d.ts +2 -0
- package/lib/test/tmq/tmq.config.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.config.test.js +94 -0
- package/lib/test/tmq/tmq.failover.test.d.ts +2 -0
- package/lib/test/tmq/tmq.failover.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.failover.test.js +404 -0
- package/lib/test/tmq/tmq.test.d.ts +2 -0
- package/lib/test/tmq/tmq.test.d.ts.map +1 -0
- package/lib/test/tmq/tmq.test.js +513 -0
- package/lib/test/unit/connectionManager.test.d.ts +2 -0
- package/lib/test/unit/connectionManager.test.d.ts.map +1 -0
- package/lib/test/unit/connectionManager.test.js +91 -0
- package/package.json +1 -1
- package/readme.md +2 -2
|
@@ -0,0 +1,513 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constant_1 = require("@src/tmq/constant");
|
|
4
|
+
const wsTmq_1 = require("@src/tmq/wsTmq");
|
|
5
|
+
const config_1 = require("@src/common/config");
|
|
6
|
+
const wsSql_1 = require("@src/sql/wsSql");
|
|
7
|
+
const utils_1 = require("@test-helpers/utils");
|
|
8
|
+
const wsConnectorPool_1 = require("@src/client/wsConnectorPool");
|
|
9
|
+
const log_1 = require("@src/common/log");
|
|
10
|
+
(0, log_1.setLevel)("debug");
|
|
11
|
+
const stable = "st";
|
|
12
|
+
const db = "ws_tmq_test";
|
|
13
|
+
const topics = ["topic_ws_bean"];
|
|
14
|
+
const tokenTopic = "topic_token_test";
|
|
15
|
+
let createTopic = `create topic if not exists ${topics[0]} as select * from ${db}.${stable}`;
|
|
16
|
+
let dropTopic = `DROP TOPIC IF EXISTS ${topics[0]};`;
|
|
17
|
+
let dsn = `ws://${(0, utils_1.testUsername)()}:${(0, utils_1.testPassword)()}@localhost:6041`;
|
|
18
|
+
let tmqDsn = "ws://localhost:6041";
|
|
19
|
+
beforeAll(async () => {
|
|
20
|
+
let conf = new config_1.WSConfig(dsn);
|
|
21
|
+
const createDB = `create database if not exists ${db} keep 3650`;
|
|
22
|
+
const dropDB = `drop database if exists ${db}`;
|
|
23
|
+
const useDB = `use ${db}`;
|
|
24
|
+
const stableTags = [
|
|
25
|
+
true,
|
|
26
|
+
-1,
|
|
27
|
+
-2,
|
|
28
|
+
-3,
|
|
29
|
+
BigInt(-4),
|
|
30
|
+
1,
|
|
31
|
+
2,
|
|
32
|
+
3,
|
|
33
|
+
BigInt(4),
|
|
34
|
+
parseFloat((3.1415).toFixed(5)),
|
|
35
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
36
|
+
"varchar_tag_1",
|
|
37
|
+
"nchar_tag_1",
|
|
38
|
+
];
|
|
39
|
+
const tableValues = [
|
|
40
|
+
[
|
|
41
|
+
BigInt(1656677710000),
|
|
42
|
+
0,
|
|
43
|
+
-1,
|
|
44
|
+
-2,
|
|
45
|
+
BigInt(-3),
|
|
46
|
+
0,
|
|
47
|
+
1,
|
|
48
|
+
2,
|
|
49
|
+
BigInt(3),
|
|
50
|
+
parseFloat((3.1415).toFixed(5)),
|
|
51
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
52
|
+
"varchar_col_1",
|
|
53
|
+
"nchar_col_1",
|
|
54
|
+
true,
|
|
55
|
+
"NULL",
|
|
56
|
+
"POINT (4.0 8.0)",
|
|
57
|
+
"0x7661726332",
|
|
58
|
+
],
|
|
59
|
+
[
|
|
60
|
+
BigInt(1656677720000),
|
|
61
|
+
-1,
|
|
62
|
+
-2,
|
|
63
|
+
-3,
|
|
64
|
+
BigInt(-4),
|
|
65
|
+
1,
|
|
66
|
+
2,
|
|
67
|
+
3,
|
|
68
|
+
BigInt(4),
|
|
69
|
+
parseFloat((3.1415 * 2).toFixed(5)),
|
|
70
|
+
parseFloat((3.14159265 * 2).toFixed(15)),
|
|
71
|
+
"varchar_col_2",
|
|
72
|
+
"nchar_col_2",
|
|
73
|
+
false,
|
|
74
|
+
"NULL",
|
|
75
|
+
"POINT (3.0 5.0)",
|
|
76
|
+
"0x7661726333",
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
BigInt(1656677730000),
|
|
80
|
+
-2,
|
|
81
|
+
-3,
|
|
82
|
+
-4,
|
|
83
|
+
BigInt(-5),
|
|
84
|
+
2,
|
|
85
|
+
3,
|
|
86
|
+
4,
|
|
87
|
+
BigInt(5),
|
|
88
|
+
parseFloat((3.1415 * 3).toFixed(5)),
|
|
89
|
+
parseFloat((3.14159265 * 3).toFixed(15)),
|
|
90
|
+
"varchar_col_3",
|
|
91
|
+
"nchar_col_3",
|
|
92
|
+
true,
|
|
93
|
+
"NULL",
|
|
94
|
+
"LINESTRING (1.000000 1.000000, 2.000000 2.000000, 5.000000 5.000000)",
|
|
95
|
+
"0x7661726334",
|
|
96
|
+
],
|
|
97
|
+
[
|
|
98
|
+
BigInt(1656677740000),
|
|
99
|
+
-3,
|
|
100
|
+
-4,
|
|
101
|
+
-5,
|
|
102
|
+
BigInt(-6),
|
|
103
|
+
3,
|
|
104
|
+
4,
|
|
105
|
+
5,
|
|
106
|
+
BigInt(6),
|
|
107
|
+
parseFloat((3.1415 * 4).toFixed(5)),
|
|
108
|
+
parseFloat((3.14159265 * 4).toFixed(15)),
|
|
109
|
+
"varchar_col_4",
|
|
110
|
+
"nchar_col_4",
|
|
111
|
+
false,
|
|
112
|
+
"NULL",
|
|
113
|
+
"POLYGON ((3.000000 6.000000, 5.000000 6.000000, 5.000000 8.000000, 3.000000 8.000000, 3.000000 6.000000))",
|
|
114
|
+
"0x7661726335",
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
BigInt(1656677750000),
|
|
118
|
+
-4,
|
|
119
|
+
-5,
|
|
120
|
+
-6,
|
|
121
|
+
BigInt(-7),
|
|
122
|
+
4,
|
|
123
|
+
5,
|
|
124
|
+
6,
|
|
125
|
+
BigInt(7),
|
|
126
|
+
parseFloat((3.1415 * 5).toFixed(5)),
|
|
127
|
+
parseFloat((3.14159265 * 5).toFixed(15)),
|
|
128
|
+
"varchar_col_5",
|
|
129
|
+
"nchar_col_5",
|
|
130
|
+
true,
|
|
131
|
+
"NULL",
|
|
132
|
+
"POINT (7.0 9.0)",
|
|
133
|
+
"0x7661726335",
|
|
134
|
+
],
|
|
135
|
+
];
|
|
136
|
+
const tableCNValues = [
|
|
137
|
+
[
|
|
138
|
+
BigInt(1656677760000),
|
|
139
|
+
0,
|
|
140
|
+
-1,
|
|
141
|
+
-2,
|
|
142
|
+
BigInt(-3),
|
|
143
|
+
0,
|
|
144
|
+
1,
|
|
145
|
+
2,
|
|
146
|
+
BigInt(3),
|
|
147
|
+
parseFloat((3.1415).toFixed(5)),
|
|
148
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
149
|
+
"varchar_列_壹",
|
|
150
|
+
"nchar_列_甲",
|
|
151
|
+
true,
|
|
152
|
+
"NULL",
|
|
153
|
+
"POINT (4.0 8.0)",
|
|
154
|
+
"0x7661726332",
|
|
155
|
+
],
|
|
156
|
+
[
|
|
157
|
+
BigInt(1656677770000),
|
|
158
|
+
-1,
|
|
159
|
+
-2,
|
|
160
|
+
-3,
|
|
161
|
+
BigInt(-4),
|
|
162
|
+
1,
|
|
163
|
+
2,
|
|
164
|
+
3,
|
|
165
|
+
BigInt(4),
|
|
166
|
+
parseFloat((3.1415 * 2).toFixed(5)),
|
|
167
|
+
parseFloat((3.14159265 * 2).toFixed(15)),
|
|
168
|
+
"varchar_列_贰",
|
|
169
|
+
"nchar_列_乙",
|
|
170
|
+
false,
|
|
171
|
+
"NULL",
|
|
172
|
+
"POINT (3.0 5.0)",
|
|
173
|
+
"0x7661726333",
|
|
174
|
+
],
|
|
175
|
+
[
|
|
176
|
+
BigInt(1656677780000),
|
|
177
|
+
-2,
|
|
178
|
+
-3,
|
|
179
|
+
-4,
|
|
180
|
+
BigInt(-5),
|
|
181
|
+
2,
|
|
182
|
+
3,
|
|
183
|
+
4,
|
|
184
|
+
BigInt(5),
|
|
185
|
+
parseFloat((3.1415 * 3).toFixed(5)),
|
|
186
|
+
parseFloat((3.14159265 * 3).toFixed(15)),
|
|
187
|
+
"varchar_列_叁",
|
|
188
|
+
"nchar_列_丙",
|
|
189
|
+
true,
|
|
190
|
+
"NULL",
|
|
191
|
+
"LINESTRING (1.000000 1.000000, 2.000000 2.000000, 5.000000 5.000000)",
|
|
192
|
+
"0x7661726334",
|
|
193
|
+
],
|
|
194
|
+
[
|
|
195
|
+
BigInt(1656677790000),
|
|
196
|
+
-3,
|
|
197
|
+
-4,
|
|
198
|
+
-5,
|
|
199
|
+
BigInt(-6),
|
|
200
|
+
3,
|
|
201
|
+
4,
|
|
202
|
+
5,
|
|
203
|
+
BigInt(6),
|
|
204
|
+
parseFloat((3.1415 * 4).toFixed(5)),
|
|
205
|
+
parseFloat((3.14159265 * 4).toFixed(15)),
|
|
206
|
+
"varchar_列_肆",
|
|
207
|
+
"nchar_列_丁",
|
|
208
|
+
false,
|
|
209
|
+
"NULL",
|
|
210
|
+
"POLYGON ((3.000000 6.000000, 5.000000 6.000000, 5.000000 8.000000, 3.000000 8.000000, 3.000000 6.000000))",
|
|
211
|
+
"0x7661726335",
|
|
212
|
+
],
|
|
213
|
+
[
|
|
214
|
+
BigInt(1656677800000),
|
|
215
|
+
-4,
|
|
216
|
+
-5,
|
|
217
|
+
-6,
|
|
218
|
+
BigInt(-7),
|
|
219
|
+
4,
|
|
220
|
+
5,
|
|
221
|
+
6,
|
|
222
|
+
BigInt(7),
|
|
223
|
+
parseFloat((3.1415 * 5).toFixed(5)),
|
|
224
|
+
parseFloat((3.14159265 * 5).toFixed(15)),
|
|
225
|
+
"varchar_列_伍",
|
|
226
|
+
"nchar_列_戊",
|
|
227
|
+
true,
|
|
228
|
+
"NULL",
|
|
229
|
+
"POINT (7.0 9.0)",
|
|
230
|
+
"0x7661726335",
|
|
231
|
+
],
|
|
232
|
+
];
|
|
233
|
+
let ws = await wsSql_1.WsSql.open(conf);
|
|
234
|
+
await ws.exec(dropTopic);
|
|
235
|
+
await ws.exec(dropDB);
|
|
236
|
+
await ws.exec(createDB);
|
|
237
|
+
await ws.exec(useDB);
|
|
238
|
+
await ws.exec((0, utils_1.createSTable)(stable));
|
|
239
|
+
await ws.exec(createTopic);
|
|
240
|
+
let insert = (0, utils_1.insertStable)(tableValues, stableTags, stable);
|
|
241
|
+
let insertRes = await ws.exec(insert);
|
|
242
|
+
insert = (0, utils_1.insertStable)(tableCNValues, stableTags, stable);
|
|
243
|
+
insertRes = await ws.exec(insert);
|
|
244
|
+
await ws.exec(`create topic if not exists ${tokenTopic} as select * from ${db}.${stable}`);
|
|
245
|
+
await ws.close();
|
|
246
|
+
});
|
|
247
|
+
describe("TDWebSocket.Tmq()", () => {
|
|
248
|
+
jest.setTimeout(20 * 1000);
|
|
249
|
+
let configMap = new Map([
|
|
250
|
+
[constant_1.TMQConstants.GROUP_ID, "gId"],
|
|
251
|
+
[constant_1.TMQConstants.CONNECT_USER, (0, utils_1.testUsername)()],
|
|
252
|
+
[constant_1.TMQConstants.CONNECT_PASS, (0, utils_1.testPassword)()],
|
|
253
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
|
|
254
|
+
[constant_1.TMQConstants.CLIENT_ID, "test_tmq_client"],
|
|
255
|
+
[constant_1.TMQConstants.WS_URL, tmqDsn],
|
|
256
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "true"],
|
|
257
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
|
|
258
|
+
["session.timeout.ms", "10000"],
|
|
259
|
+
["max.poll.interval.ms", "30000"],
|
|
260
|
+
["msg.with.table.name", "true"],
|
|
261
|
+
]);
|
|
262
|
+
console.log(configMap);
|
|
263
|
+
test("normal connect", async () => {
|
|
264
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
265
|
+
await consumer.close();
|
|
266
|
+
});
|
|
267
|
+
test("connect error", async () => {
|
|
268
|
+
expect.assertions(1);
|
|
269
|
+
let consumer = null;
|
|
270
|
+
let errConfigMap = new Map([
|
|
271
|
+
[constant_1.TMQConstants.GROUP_ID, "test"],
|
|
272
|
+
[constant_1.TMQConstants.CONNECT_USER, "root"],
|
|
273
|
+
[constant_1.TMQConstants.CONNECT_PASS, "test"],
|
|
274
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest1"],
|
|
275
|
+
[constant_1.TMQConstants.CLIENT_ID, "test_tmq_client"],
|
|
276
|
+
[constant_1.TMQConstants.WS_URL, tmqDsn],
|
|
277
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "true"],
|
|
278
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
|
|
279
|
+
["session.timeout.ms", "10000"],
|
|
280
|
+
["max.poll.interval.ms", "30000"],
|
|
281
|
+
["msg.with.table.name", "true"],
|
|
282
|
+
]);
|
|
283
|
+
try {
|
|
284
|
+
consumer = await wsTmq_1.WsConsumer.newConsumer(errConfigMap);
|
|
285
|
+
await consumer.subscribe(topics);
|
|
286
|
+
}
|
|
287
|
+
catch (e) {
|
|
288
|
+
console.log(e);
|
|
289
|
+
expect([104]).toContain(e.code);
|
|
290
|
+
}
|
|
291
|
+
finally {
|
|
292
|
+
if (consumer) {
|
|
293
|
+
await consumer.close();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
test("normal Subscribe", async () => {
|
|
298
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
299
|
+
await consumer.subscribe(topics);
|
|
300
|
+
let assignment = await consumer.assignment();
|
|
301
|
+
console.log(assignment);
|
|
302
|
+
let counts = 0;
|
|
303
|
+
let useTime = [];
|
|
304
|
+
for (let i = 0; i < 5; i++) {
|
|
305
|
+
let startTime = new Date().getTime();
|
|
306
|
+
let res = await consumer.poll(500);
|
|
307
|
+
let currTime = new Date().getTime();
|
|
308
|
+
useTime.push(Math.abs(currTime - startTime));
|
|
309
|
+
for (let [key, value] of res) {
|
|
310
|
+
console.log(key, value.getMeta());
|
|
311
|
+
let data = value.getData();
|
|
312
|
+
if (data == null || data.length == 0) {
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
for (let record of data) {
|
|
316
|
+
console.log("-----===>>", record);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
await consumer.seekToBeginning(assignment);
|
|
321
|
+
for (let i = 0; i < 5; i++) {
|
|
322
|
+
let startTime = new Date().getTime();
|
|
323
|
+
let res = await consumer.poll(500);
|
|
324
|
+
let currTime = new Date().getTime();
|
|
325
|
+
useTime.push(Math.abs(currTime - startTime));
|
|
326
|
+
for (let [key, value] of res) {
|
|
327
|
+
console.log(key, value.getMeta());
|
|
328
|
+
let data = value.getData();
|
|
329
|
+
if (data == null || data.length == 0) {
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
counts += data.length;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
let topicArray = await consumer.subscription();
|
|
336
|
+
expect(topics.length).toEqual(topicArray.length);
|
|
337
|
+
for (let index = 0; index < topicArray.length; index++) {
|
|
338
|
+
expect(topics[index]).toEqual(topicArray[index]);
|
|
339
|
+
}
|
|
340
|
+
assignment = await consumer.commit();
|
|
341
|
+
console.log(assignment);
|
|
342
|
+
assignment = await consumer.committed(assignment);
|
|
343
|
+
assignment = await consumer.commitOffsets(assignment);
|
|
344
|
+
console.log(assignment);
|
|
345
|
+
await consumer.unsubscribe();
|
|
346
|
+
await consumer.close();
|
|
347
|
+
console.log("------------->", useTime);
|
|
348
|
+
console.log("------------->", counts);
|
|
349
|
+
expect(counts).toEqual(10);
|
|
350
|
+
});
|
|
351
|
+
test("Topic not exist", async () => {
|
|
352
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
353
|
+
try {
|
|
354
|
+
await consumer.subscribe(["aaa"]);
|
|
355
|
+
}
|
|
356
|
+
catch (e) {
|
|
357
|
+
expect(e.message).toMatch("Topic not exist");
|
|
358
|
+
}
|
|
359
|
+
await consumer.close();
|
|
360
|
+
});
|
|
361
|
+
test("normal seek", async () => {
|
|
362
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
363
|
+
await consumer.subscribe(topics);
|
|
364
|
+
let assignment = await consumer.assignment();
|
|
365
|
+
console.log("------START--------", assignment);
|
|
366
|
+
await consumer.seekToEnd(assignment);
|
|
367
|
+
await consumer.seekToBeginning(assignment);
|
|
368
|
+
await consumer.seekToEnd(assignment);
|
|
369
|
+
assignment = await consumer.assignment();
|
|
370
|
+
console.log("------END--------", assignment);
|
|
371
|
+
for (let i = 0; i < assignment.length; i++) {
|
|
372
|
+
expect(assignment[i].offset).toEqual(assignment[i].end);
|
|
373
|
+
}
|
|
374
|
+
await consumer.unsubscribe();
|
|
375
|
+
await consumer.close();
|
|
376
|
+
});
|
|
377
|
+
(0, utils_1.testEnterprise)("connect with token", async () => {
|
|
378
|
+
const conf = new config_1.WSConfig(dsn);
|
|
379
|
+
const wsSql = await wsSql_1.WsSql.open(conf);
|
|
380
|
+
await wsSql.exec("drop token if exists test_tmq_token");
|
|
381
|
+
const wsRows = await wsSql.query(`create token test_tmq_token from user ${(0, utils_1.testUsername)()}`);
|
|
382
|
+
await wsRows.next();
|
|
383
|
+
const token = wsRows.getData()?.[0];
|
|
384
|
+
expect(token).toBeTruthy();
|
|
385
|
+
await wsRows.close();
|
|
386
|
+
const tmqConf = new Map([
|
|
387
|
+
[constant_1.TMQConstants.WS_URL, "ws://localhost:6041"],
|
|
388
|
+
[constant_1.TMQConstants.CONNECT_USER, "invalid_user"],
|
|
389
|
+
[constant_1.TMQConstants.CONNECT_PASS, "invalid_pass"],
|
|
390
|
+
[constant_1.TMQConstants.CONNECT_TOKEN, token],
|
|
391
|
+
[constant_1.TMQConstants.GROUP_ID, "g1101"],
|
|
392
|
+
[constant_1.TMQConstants.CLIENT_ID, "c1101"],
|
|
393
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
|
|
394
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "false"],
|
|
395
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
|
|
396
|
+
]);
|
|
397
|
+
const consumer = await wsTmq_1.WsConsumer.newConsumer(tmqConf);
|
|
398
|
+
await consumer.subscribe([tokenTopic]);
|
|
399
|
+
let count = 0;
|
|
400
|
+
for (let i = 0; i < 5; i++) {
|
|
401
|
+
const res = await consumer.poll(500);
|
|
402
|
+
for (const [, value] of res) {
|
|
403
|
+
const data = value.getData();
|
|
404
|
+
if (data == null || data.length == 0) {
|
|
405
|
+
break;
|
|
406
|
+
}
|
|
407
|
+
count += data.length;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
expect(count).toEqual(10);
|
|
411
|
+
await (0, utils_1.Sleep)(3000);
|
|
412
|
+
await consumer.unsubscribe();
|
|
413
|
+
await consumer.close();
|
|
414
|
+
await wsSql.exec("drop token if exists test_tmq_token");
|
|
415
|
+
await wsSql.close();
|
|
416
|
+
});
|
|
417
|
+
(0, utils_1.testEnterprise)("connect with token url", async () => {
|
|
418
|
+
const conf = new config_1.WSConfig(dsn);
|
|
419
|
+
const wsSql = await wsSql_1.WsSql.open(conf);
|
|
420
|
+
await wsSql.exec("drop token if exists test_tmq_token_url");
|
|
421
|
+
const wsRows = await wsSql.query(`create token test_tmq_token_url from user ${(0, utils_1.testUsername)()}`);
|
|
422
|
+
await wsRows.next();
|
|
423
|
+
const token = wsRows.getData()?.[0];
|
|
424
|
+
expect(token).toBeTruthy();
|
|
425
|
+
await wsRows.close();
|
|
426
|
+
const tmqConf = new Map([
|
|
427
|
+
[constant_1.TMQConstants.WS_URL, `ws://localhost:6041?bearer_token=${token}`],
|
|
428
|
+
[constant_1.TMQConstants.CONNECT_USER, "invalid_user"],
|
|
429
|
+
[constant_1.TMQConstants.CONNECT_PASS, "invalid_pass"],
|
|
430
|
+
[constant_1.TMQConstants.GROUP_ID, "g1103"],
|
|
431
|
+
[constant_1.TMQConstants.CLIENT_ID, "c1103"],
|
|
432
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
|
|
433
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, false],
|
|
434
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, 1000],
|
|
435
|
+
]);
|
|
436
|
+
const consumer = await wsTmq_1.WsConsumer.newConsumer(tmqConf);
|
|
437
|
+
await consumer.subscribe([tokenTopic]);
|
|
438
|
+
let count = 0;
|
|
439
|
+
for (let i = 0; i < 5; i++) {
|
|
440
|
+
const res = await consumer.poll(500);
|
|
441
|
+
for (const [, value] of res) {
|
|
442
|
+
const data = value.getData();
|
|
443
|
+
if (data == null || data.length == 0) {
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
count += data.length;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
expect(count).toEqual(10);
|
|
450
|
+
await (0, utils_1.Sleep)(3000);
|
|
451
|
+
await consumer.unsubscribe();
|
|
452
|
+
await consumer.close();
|
|
453
|
+
await wsSql.exec("drop token if exists test_tmq_token_url");
|
|
454
|
+
await wsSql.close();
|
|
455
|
+
});
|
|
456
|
+
(0, utils_1.testEnterprise)("connect with invalid token", async () => {
|
|
457
|
+
const conf = new Map([
|
|
458
|
+
[constant_1.TMQConstants.GROUP_ID, "g1102"],
|
|
459
|
+
[constant_1.TMQConstants.CLIENT_ID, "c1102"],
|
|
460
|
+
[constant_1.TMQConstants.WS_URL, "ws://localhost:6041?bearer_token=invalid_token"],
|
|
461
|
+
]);
|
|
462
|
+
await expect(wsTmq_1.WsConsumer.newConsumer(conf)).rejects.toMatchObject({
|
|
463
|
+
message: expect.stringMatching(/invalid token/i),
|
|
464
|
+
});
|
|
465
|
+
conf.set(constant_1.TMQConstants.WS_URL, "ws://localhost:6041");
|
|
466
|
+
conf.set(constant_1.TMQConstants.CONNECT_TOKEN, "invalid_token1");
|
|
467
|
+
await expect(wsTmq_1.WsConsumer.newConsumer(conf)).rejects.toMatchObject({
|
|
468
|
+
message: expect.stringMatching(/invalid token/i),
|
|
469
|
+
});
|
|
470
|
+
conf.set(constant_1.TMQConstants.WS_URL, "ws://localhost:6041?bearer_token=");
|
|
471
|
+
conf.delete(constant_1.TMQConstants.CONNECT_TOKEN);
|
|
472
|
+
await expect(wsTmq_1.WsConsumer.newConsumer(conf)).rejects.toMatchObject({
|
|
473
|
+
message: expect.stringMatching(/invalid url/i),
|
|
474
|
+
});
|
|
475
|
+
conf.set(constant_1.TMQConstants.WS_URL, "ws://localhost:6041");
|
|
476
|
+
conf.set(constant_1.TMQConstants.CONNECT_TOKEN, "");
|
|
477
|
+
await expect(wsTmq_1.WsConsumer.newConsumer(conf)).rejects.toMatchObject({
|
|
478
|
+
message: expect.stringMatching(/invalid url/i),
|
|
479
|
+
});
|
|
480
|
+
});
|
|
481
|
+
(0, utils_1.testNon3360)("connector version info", async () => {
|
|
482
|
+
const consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
483
|
+
await consumer.subscribe(topics);
|
|
484
|
+
const conf = new config_1.WSConfig("ws://localhost:6041");
|
|
485
|
+
conf.setUser((0, utils_1.testUsername)());
|
|
486
|
+
conf.setPwd((0, utils_1.testPassword)());
|
|
487
|
+
const wsSql = await wsSql_1.WsSql.open(conf);
|
|
488
|
+
await (0, utils_1.Sleep)(2000);
|
|
489
|
+
const wsRows = await wsSql.query("show connections");
|
|
490
|
+
let count = 0;
|
|
491
|
+
while (await wsRows.next()) {
|
|
492
|
+
const data = wsRows.getData();
|
|
493
|
+
if (Array.isArray(data) && data.some(v => typeof v === "string" && v.includes("nodejs-ws"))) {
|
|
494
|
+
count++;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
expect(count).toBeGreaterThanOrEqual(2);
|
|
498
|
+
await wsRows.close();
|
|
499
|
+
await wsSql.close();
|
|
500
|
+
await consumer.unsubscribe();
|
|
501
|
+
await consumer.close();
|
|
502
|
+
});
|
|
503
|
+
});
|
|
504
|
+
afterAll(async () => {
|
|
505
|
+
const dropDB = `drop database if exists ${db}`;
|
|
506
|
+
const conf = new config_1.WSConfig(dsn);
|
|
507
|
+
const ws = await wsSql_1.WsSql.open(conf);
|
|
508
|
+
await ws.exec(dropTopic);
|
|
509
|
+
await ws.exec(`drop topic if exists ${tokenTopic}`);
|
|
510
|
+
await ws.exec(dropDB);
|
|
511
|
+
await ws.close();
|
|
512
|
+
wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
|
|
513
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectionManager.test.d.ts","sourceRoot":"","sources":["../../../test/unit/connectionManager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const wsConnectionManager_1 = require("../../src/client/wsConnectionManager");
|
|
4
|
+
function makeParsedUrl(hosts) {
|
|
5
|
+
return {
|
|
6
|
+
hosts,
|
|
7
|
+
scheme: "ws",
|
|
8
|
+
username: "root",
|
|
9
|
+
password: "taosdata",
|
|
10
|
+
database: "testdb",
|
|
11
|
+
params: new Map(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function makeAuthInfo() {
|
|
15
|
+
return {
|
|
16
|
+
username: "root",
|
|
17
|
+
password: "taosdata",
|
|
18
|
+
database: "testdb",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
describe("ConnectionManager", () => {
|
|
22
|
+
describe("constructor", () => {
|
|
23
|
+
test("initializes with CLOSED state", () => {
|
|
24
|
+
const parsed = makeParsedUrl([{ host: "host1", port: 6041 }]);
|
|
25
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo());
|
|
26
|
+
expect(cm.state).toBe(wsConnectionManager_1.ConnectionState.CLOSED);
|
|
27
|
+
});
|
|
28
|
+
test("random initial host selection is within range", () => {
|
|
29
|
+
const hosts = [
|
|
30
|
+
{ host: "host1", port: 6041 },
|
|
31
|
+
{ host: "host2", port: 6042 },
|
|
32
|
+
{ host: "host3", port: 6043 },
|
|
33
|
+
];
|
|
34
|
+
const parsed = makeParsedUrl(hosts);
|
|
35
|
+
// Run multiple times to verify randomness stays in bounds
|
|
36
|
+
for (let i = 0; i < 20; i++) {
|
|
37
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo());
|
|
38
|
+
const current = cm.currentHost;
|
|
39
|
+
expect(current).toBeDefined();
|
|
40
|
+
expect(hosts).toContainEqual(current);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
test("applies custom retry options", () => {
|
|
44
|
+
const parsed = makeParsedUrl([{ host: "host1", port: 6041 }]);
|
|
45
|
+
const opts = {
|
|
46
|
+
retries: 5,
|
|
47
|
+
retryBackoffMs: 500,
|
|
48
|
+
retryBackoffMaxMs: 10000,
|
|
49
|
+
resendWrite: true,
|
|
50
|
+
};
|
|
51
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo(), opts);
|
|
52
|
+
expect(cm.state).toBe(wsConnectionManager_1.ConnectionState.CLOSED);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("state management", () => {
|
|
56
|
+
test("cannot connect when not in CLOSED state", async () => {
|
|
57
|
+
const parsed = makeParsedUrl([{ host: "localhost", port: 1 }]);
|
|
58
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo(), { retries: 0 }, 2000);
|
|
59
|
+
// First connect will fail (no server), putting us back to CLOSED
|
|
60
|
+
try {
|
|
61
|
+
await cm.connect();
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
// expected
|
|
65
|
+
}
|
|
66
|
+
expect(cm.state).toBe(wsConnectionManager_1.ConnectionState.CLOSED);
|
|
67
|
+
}, 15000);
|
|
68
|
+
test("close on already closed is a no-op", async () => {
|
|
69
|
+
const parsed = makeParsedUrl([{ host: "host1", port: 6041 }]);
|
|
70
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo());
|
|
71
|
+
await cm.close(); // Should not throw
|
|
72
|
+
expect(cm.state).toBe(wsConnectionManager_1.ConnectionState.CLOSED);
|
|
73
|
+
});
|
|
74
|
+
test("getReadyState returns -1 when not connected", () => {
|
|
75
|
+
const parsed = makeParsedUrl([{ host: "host1", port: 6041 }]);
|
|
76
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo());
|
|
77
|
+
expect(cm.getReadyState()).toBe(-1);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
describe("connection failure", () => {
|
|
81
|
+
test("throws ERR_ALL_HOSTS_EXHAUSTED after all retries", async () => {
|
|
82
|
+
const parsed = makeParsedUrl([
|
|
83
|
+
{ host: "nonexistent1", port: 1 },
|
|
84
|
+
{ host: "nonexistent2", port: 2 },
|
|
85
|
+
]);
|
|
86
|
+
const cm = new wsConnectionManager_1.ConnectionManager(parsed, makeAuthInfo(), { retries: 0, retryBackoffMs: 1, retryBackoffMaxMs: 1 });
|
|
87
|
+
await expect(cm.connect()).rejects.toThrow("All hosts exhausted");
|
|
88
|
+
expect(cm.state).toBe(wsConnectionManager_1.ConnectionState.CLOSED);
|
|
89
|
+
}, 30000);
|
|
90
|
+
});
|
|
91
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tdengine/websocket",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "The websocket Node.js connector for TDengine. TDengine versions 3.3.2.0 and above are recommended to use this connector.",
|
|
5
5
|
"source": "index.ts",
|
|
6
6
|
"main": "lib/index.js",
|
package/readme.md
CHANGED
|
@@ -58,7 +58,7 @@ Execute `tsc` to build the project in the 'nodejs' directory.
|
|
|
58
58
|
|
|
59
59
|
### 5.1 Test Execution
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
In the `nodejs` directory of your project, execute the command `npm run test` to run all test cases in the `test` directory. The test cases will connect to the local TDengine server and taosAdapter for testing.
|
|
62
62
|
After running the tests, the result similar to the following will be printed eventually. If all test cases pass, without any failures or errors.
|
|
63
63
|
|
|
64
64
|
```text
|
|
@@ -71,7 +71,7 @@ Ran all test suites.
|
|
|
71
71
|
|
|
72
72
|
### 5.2 Test Case Addition
|
|
73
73
|
|
|
74
|
-
All tests are
|
|
74
|
+
All tests are organized by functional domain in the `nodejs/test` directory. You can add new test files in the corresponding directory or add test cases to existing test files.
|
|
75
75
|
The test cases use the jest framework. Generally, a connection is established and a database is created in the `beforeAll` method, and the database is droped and the connection is released in the `afterAll` method.
|
|
76
76
|
|
|
77
77
|
### 5.3 Performance Testing
|