@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.
- package/lib/package.json +64 -0
- package/lib/src/client/retryConfig.d.ts +10 -0
- package/lib/src/client/retryConfig.d.ts.map +1 -0
- package/lib/src/client/retryConfig.js +46 -0
- package/lib/src/client/wsClient.d.ts +24 -7
- package/lib/src/client/wsClient.d.ts.map +1 -1
- package/lib/src/client/wsClient.js +164 -137
- 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 +522 -102
- 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 +67 -52
- 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/client/wsResponse.d.ts +0 -3
- package/lib/src/client/wsResponse.d.ts.map +1 -1
- package/lib/src/client/wsResponse.js +0 -3
- 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/config.d.ts +3 -0
- package/lib/src/common/config.d.ts.map +1 -1
- package/lib/src/common/config.js +6 -0
- package/lib/src/common/constant.d.ts +1 -0
- package/lib/src/common/constant.d.ts.map +1 -1
- package/lib/src/common/constant.js +6 -1
- package/lib/src/common/dsn.d.ts +30 -0
- package/lib/src/common/dsn.d.ts.map +1 -0
- package/lib/src/common/dsn.js +221 -0
- 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 +6 -1
- package/lib/src/common/utils.d.ts.map +1 -1
- package/lib/src/common/utils.js +74 -22
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/sql/wsSql.d.ts.map +1 -1
- 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 +4 -2
- package/lib/src/tmq/config.d.ts.map +1 -1
- package/lib/src/tmq/config.js +30 -13
- package/lib/src/tmq/constant.d.ts +4 -0
- package/lib/src/tmq/constant.d.ts.map +1 -1
- package/lib/src/tmq/constant.js +4 -0
- package/lib/src/tmq/tmqResponse.d.ts.map +1 -1
- package/lib/src/tmq/tmqResponse.js +1 -4
- 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 +55 -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/cloud.tmq.test.js +3 -2
- package/lib/test/bulkPulling/decimal.test.js +8 -8
- package/lib/test/bulkPulling/dsn.test.d.ts +2 -0
- package/lib/test/bulkPulling/dsn.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/dsn.test.js +397 -0
- package/lib/test/bulkPulling/queryTables.test.js +1 -1
- package/lib/test/bulkPulling/retryConfig.test.d.ts +2 -0
- package/lib/test/bulkPulling/retryConfig.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/retryConfig.test.js +34 -0
- package/lib/test/bulkPulling/schemaless.test.js +15 -14
- 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/sql.test.js +116 -44
- package/lib/test/bulkPulling/stmt1.func.test.js +31 -30
- package/lib/test/bulkPulling/stmt1.type.test.js +1 -1
- 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.func.test.js +37 -36
- 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/stmt2.type.test.js +1 -1
- package/lib/test/bulkPulling/tmq.config.test.d.ts +2 -0
- package/lib/test/bulkPulling/tmq.config.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/tmq.config.test.js +77 -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/tmq.test.js +135 -14
- 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.d.ts +2 -0
- package/lib/test/bulkPulling/wsClient.reconnect.integration.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsClient.reconnect.integration.test.js +184 -0
- 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.d.ts +2 -0
- package/lib/test/bulkPulling/wsConfig.dsn.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsConfig.dsn.test.js +39 -0
- package/lib/test/bulkPulling/wsConnectPool.test.js +7 -7
- package/lib/test/bulkPulling/wsConnector.failover.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsConnector.failover.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsConnector.failover.test.js +497 -0
- package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsConnectorPool.key.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsConnectorPool.key.test.js +52 -0
- 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/wsEventCallback.test.d.ts +2 -0
- package/lib/test/bulkPulling/wsEventCallback.test.d.ts.map +1 -0
- package/lib/test/bulkPulling/wsEventCallback.test.js +54 -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/lib/test/utils.d.ts +4 -0
- package/lib/test/utils.d.ts.map +1 -1
- package/lib/test/utils.js +11 -17
- 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/lib/test/utils.d.ts
CHANGED
|
@@ -15,4 +15,8 @@ export declare function expectStableData(rows: Array<Array<any>>, tags: Array<an
|
|
|
15
15
|
export declare function hexToBytes(hex: string): ArrayBuffer;
|
|
16
16
|
export declare function compareUint8Arrays(arr1: Uint8Array, arr2: Uint8Array): boolean;
|
|
17
17
|
export declare function Sleep(ms: number): Promise<void>;
|
|
18
|
+
export declare function testUsername(): string;
|
|
19
|
+
export declare function testPassword(): string;
|
|
20
|
+
export declare const testEnterprise: jest.It;
|
|
21
|
+
export declare const testNon3360: jest.It;
|
|
18
22
|
//# sourceMappingURL=utils.d.ts.map
|
package/lib/test/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../test/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,wBAAgB,aAAa,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACf,MAAM,CAcR;AAED,wBAAgB,YAAY,CACxB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAgB,GACxB,MAAM,CAkCR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqB7E;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,YAAY,CAsFzC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,YAAY,CAMxC,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../test/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,wBAAgB,aAAa,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,GACf,MAAM,CAcR;AAED,wBAAgB,YAAY,CACxB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAgB,GACxB,MAAM,CAkCR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAqB7E;AAED,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,YAAY,CAsFzC,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,YAAY,CAMxC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAK,CAAC,YAAY,CAkEvC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AACD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK3D;AACD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKnD;AACD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKvD;AACD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACvB,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GACjB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAMnB;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAQnD;AAED,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,GACjB,OAAO,CAYT;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,eAAO,MAAM,cAAc,SAA2E,CAAC;AACvG,eAAO,MAAM,WAAW,SAAqE,CAAC"}
|
package/lib/test/utils.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.tagMeta = exports.jsonMeta = exports.tableMeta = void 0;
|
|
6
|
+
exports.testNon3360 = exports.testEnterprise = exports.tagMeta = exports.jsonMeta = exports.tableMeta = void 0;
|
|
7
7
|
exports.getInsertBind = getInsertBind;
|
|
8
8
|
exports.insertStable = insertStable;
|
|
9
9
|
exports.insertNTable = insertNTable;
|
|
@@ -17,6 +17,8 @@ exports.expectStableData = expectStableData;
|
|
|
17
17
|
exports.hexToBytes = hexToBytes;
|
|
18
18
|
exports.compareUint8Arrays = compareUint8Arrays;
|
|
19
19
|
exports.Sleep = Sleep;
|
|
20
|
+
exports.testUsername = testUsername;
|
|
21
|
+
exports.testPassword = testPassword;
|
|
20
22
|
const log_1 = __importDefault(require("../src/common/log"));
|
|
21
23
|
function getInsertBind(valuesLen, tagsLen, db, stable) {
|
|
22
24
|
let sql = `insert into ? using ${db}.${stable} tags ( ?`;
|
|
@@ -289,22 +291,6 @@ function hexToBytes(hex) {
|
|
|
289
291
|
}
|
|
290
292
|
return a.buffer;
|
|
291
293
|
}
|
|
292
|
-
// export function createStmtData(varbinary:string = "ab",
|
|
293
|
-
// geoHex:string = "0101000020E6100000000000000000F03F0000000000000040"):Array<Array<any>> {
|
|
294
|
-
// let multi:any[][] = [
|
|
295
|
-
// [1709183268567, 1709183268568, 1709183268569],
|
|
296
|
-
// [10.2, 10.3, 10.4],
|
|
297
|
-
// [292, 293, 294],
|
|
298
|
-
// [0.32, 0.33, 0.34],
|
|
299
|
-
// ];
|
|
300
|
-
// let res = hexToBytes(geoHex)
|
|
301
|
-
// let geom = Array.from(new Uint8Array(res))
|
|
302
|
-
// multi.push([geom, geom, geom])
|
|
303
|
-
// res = new TextEncoder().encode(varbinary)
|
|
304
|
-
// let binary = Array.from(new Uint8Array(res))
|
|
305
|
-
// multi.push([binary, binary, binary])
|
|
306
|
-
// return multi
|
|
307
|
-
// }
|
|
308
294
|
function compareUint8Arrays(arr1, arr2) {
|
|
309
295
|
if (arr1.length !== arr2.length) {
|
|
310
296
|
log_1.default.debug(`${arr1.length} !== ${arr2.length}`);
|
|
@@ -321,3 +307,11 @@ function compareUint8Arrays(arr1, arr2) {
|
|
|
321
307
|
function Sleep(ms) {
|
|
322
308
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
323
309
|
}
|
|
310
|
+
function testUsername() {
|
|
311
|
+
return process.env.TDENGINE_TEST_USERNAME || "root";
|
|
312
|
+
}
|
|
313
|
+
function testPassword() {
|
|
314
|
+
return process.env.TDENGINE_TEST_PASSWORD || "taosdata";
|
|
315
|
+
}
|
|
316
|
+
exports.testEnterprise = process.env.TEST_ENTERPRISE?.toLowerCase() === "true" ? test : test.skip;
|
|
317
|
+
exports.testNon3360 = process.env.TEST_3360?.toLowerCase() === "true" ? test.skip : test;
|
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",
|