@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,401 @@
|
|
|
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 log_1 = require("@src/common/log");
|
|
6
|
+
const wsSql_1 = require("@src/sql/wsSql");
|
|
7
|
+
const wsStmt2_1 = require("@src/stmt/wsStmt2");
|
|
8
|
+
const utils_1 = require("@test-helpers/utils");
|
|
9
|
+
const stable = "ws_stmt_stb";
|
|
10
|
+
const table = "stmt_001";
|
|
11
|
+
const db = "ws_stmt2";
|
|
12
|
+
const createDB = `create database if not exists ${db} keep 3650`;
|
|
13
|
+
const useDB = `use ${db}`;
|
|
14
|
+
const dropDB = `drop database if exists ${db}`;
|
|
15
|
+
const tableCN = "stmt_cn";
|
|
16
|
+
const stableCN = "ws_stmt_stb_cn";
|
|
17
|
+
const jsonTable = "stmt_json";
|
|
18
|
+
const jsonTableCN = "stmt_json_cn";
|
|
19
|
+
const stableTags = [
|
|
20
|
+
true,
|
|
21
|
+
-1,
|
|
22
|
+
-2,
|
|
23
|
+
-3,
|
|
24
|
+
-4,
|
|
25
|
+
1,
|
|
26
|
+
2,
|
|
27
|
+
3,
|
|
28
|
+
4,
|
|
29
|
+
parseFloat((3.1415).toFixed(5)),
|
|
30
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
31
|
+
"varchar_tag_1",
|
|
32
|
+
"nchar_tag_1",
|
|
33
|
+
];
|
|
34
|
+
const stableCNTags = [
|
|
35
|
+
false,
|
|
36
|
+
-1 * 2,
|
|
37
|
+
-2 * 2,
|
|
38
|
+
-3 * 2,
|
|
39
|
+
-4 * 2,
|
|
40
|
+
1 * 2,
|
|
41
|
+
2 * 2,
|
|
42
|
+
3 * 2,
|
|
43
|
+
4 * 2,
|
|
44
|
+
parseFloat((3.1415 * 2).toFixed(5)),
|
|
45
|
+
parseFloat((3.14159265 * 2).toFixed(15)),
|
|
46
|
+
"varchar_标签_壹",
|
|
47
|
+
"nchar_标签_贰",
|
|
48
|
+
];
|
|
49
|
+
const tableValues = [
|
|
50
|
+
[1656677710000, 1656677720000, 1656677730000, 1656677740000, 1656677750000],
|
|
51
|
+
[0, -1, -2, -3, -4],
|
|
52
|
+
[-1, -2, -3, -4, -5],
|
|
53
|
+
[-3, -4, -5, -6, -7],
|
|
54
|
+
// [0, 1, 2, 3, 4],
|
|
55
|
+
[BigInt(-2), BigInt(-3), BigInt(-4), BigInt(-5), BigInt(-6)],
|
|
56
|
+
[0, 1, 2, 3, 4],
|
|
57
|
+
[1, 2, 3, 4, 5],
|
|
58
|
+
[2, 3, 4, 5, 6],
|
|
59
|
+
// [0, 1, 2, 3, 4],
|
|
60
|
+
[BigInt(3), BigInt(4), BigInt(5), BigInt(6), BigInt(7)],
|
|
61
|
+
[
|
|
62
|
+
parseFloat((3.1415).toFixed(5)),
|
|
63
|
+
parseFloat((3.1415 * 2).toFixed(5)),
|
|
64
|
+
parseFloat((3.1415 * 3).toFixed(5)),
|
|
65
|
+
parseFloat((3.1415 * 4).toFixed(5)),
|
|
66
|
+
parseFloat((3.1415 * 5).toFixed(5)),
|
|
67
|
+
],
|
|
68
|
+
[
|
|
69
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
70
|
+
parseFloat((3.14159265 * 2).toFixed(15)),
|
|
71
|
+
parseFloat((3.14159265 * 3).toFixed(15)),
|
|
72
|
+
parseFloat((3.14159265 * 4).toFixed(15)),
|
|
73
|
+
parseFloat((3.14159265 * 5).toFixed(15)),
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
"varchar_col_1",
|
|
77
|
+
"varchar_col_2",
|
|
78
|
+
"varchar_col_3",
|
|
79
|
+
"varchar_col_4",
|
|
80
|
+
"varchar_col_5",
|
|
81
|
+
],
|
|
82
|
+
["nchar_col_1", "nchar_col_2", "", "nchar_col_4", "nchar_col_5"],
|
|
83
|
+
[true, false, true, false, true],
|
|
84
|
+
[null, null, null, null, null],
|
|
85
|
+
];
|
|
86
|
+
const tableCNValues = [
|
|
87
|
+
[
|
|
88
|
+
BigInt(1656677760000),
|
|
89
|
+
BigInt(1656677770000),
|
|
90
|
+
BigInt(1656677780000),
|
|
91
|
+
BigInt(1656677790000),
|
|
92
|
+
BigInt(1656677100000),
|
|
93
|
+
],
|
|
94
|
+
[0, -1, -2, -3, -4],
|
|
95
|
+
[-1, -2, -3, -4, -5],
|
|
96
|
+
[-2, -3, -4, -5, -6],
|
|
97
|
+
[BigInt(-3), BigInt(-4), BigInt(-5), BigInt(-6), BigInt(-7)],
|
|
98
|
+
[0, 1, 2, 3, 4],
|
|
99
|
+
[1, 2, 3, 4, 5],
|
|
100
|
+
[2, 3, 4, 5, 6],
|
|
101
|
+
[BigInt(3), BigInt(4), BigInt(5), BigInt(6), BigInt(7)],
|
|
102
|
+
[
|
|
103
|
+
parseFloat((3.1415).toFixed(5)),
|
|
104
|
+
parseFloat((3.1415 * 2).toFixed(5)),
|
|
105
|
+
parseFloat((3.1415 * 3).toFixed(5)),
|
|
106
|
+
parseFloat((3.1415 * 4).toFixed(5)),
|
|
107
|
+
parseFloat((3.1415 * 5).toFixed(5)),
|
|
108
|
+
],
|
|
109
|
+
[
|
|
110
|
+
parseFloat((3.14159265).toFixed(15)),
|
|
111
|
+
parseFloat((3.14159265 * 2).toFixed(15)),
|
|
112
|
+
parseFloat((3.14159265 * 3).toFixed(15)),
|
|
113
|
+
parseFloat((3.14159265 * 4).toFixed(15)),
|
|
114
|
+
parseFloat((3.14159265 * 5).toFixed(15)),
|
|
115
|
+
],
|
|
116
|
+
[
|
|
117
|
+
"varchar_列_壹",
|
|
118
|
+
"varchar_列_贰",
|
|
119
|
+
"varchar_列_叁",
|
|
120
|
+
"varchar_列_肆",
|
|
121
|
+
"varchar_列_伍",
|
|
122
|
+
],
|
|
123
|
+
["nchar_列_甲", "nchar_列_乙", "nchar_列_丙", "nchar_列_丁", "nchar_列_戊"],
|
|
124
|
+
[true, false, true, false, true],
|
|
125
|
+
[null, null, null, null, null],
|
|
126
|
+
];
|
|
127
|
+
let geoDataArray = [];
|
|
128
|
+
let varbinary = [];
|
|
129
|
+
const encoder = new TextEncoder();
|
|
130
|
+
for (let i = 0; i < 5; i++) {
|
|
131
|
+
let data = new Uint8Array([
|
|
132
|
+
0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59,
|
|
133
|
+
0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40,
|
|
134
|
+
]);
|
|
135
|
+
geoDataArray.push(data.buffer);
|
|
136
|
+
let vdata = encoder.encode(`varchar_col_${i + 1}`);
|
|
137
|
+
varbinary.push(vdata.buffer);
|
|
138
|
+
}
|
|
139
|
+
const jsonTags = [
|
|
140
|
+
'{"key1":"taos","key2":null,"key3":"TDengine","key4":0,"key5":false}',
|
|
141
|
+
];
|
|
142
|
+
const jsonTagsCN = [
|
|
143
|
+
'{"key1":"taosdata","key2":null,"key3":"TDengine涛思数据","key4":1,"key5":true}',
|
|
144
|
+
];
|
|
145
|
+
const selectStable = `select * from ${stable}`;
|
|
146
|
+
const selectStableCN = `select * from ${stableCN}`;
|
|
147
|
+
const selectTable = `select * from ${table}`;
|
|
148
|
+
const selectTableCN = `select * from ${tableCN}`;
|
|
149
|
+
const selectJsonTable = `select * from ${jsonTable}`;
|
|
150
|
+
const selectJsonTableCN = `select * from ${jsonTableCN}`;
|
|
151
|
+
let dsn = `ws://${(0, utils_1.testUsername)()}:${(0, utils_1.testPassword)()}@localhost:6041`;
|
|
152
|
+
(0, log_1.setLevel)("debug");
|
|
153
|
+
beforeAll(async () => {
|
|
154
|
+
let conf = new config_1.WSConfig(dsn);
|
|
155
|
+
let ws = await wsSql_1.WsSql.open(conf);
|
|
156
|
+
await ws.exec(dropDB);
|
|
157
|
+
await ws.exec(createDB);
|
|
158
|
+
await ws.exec(useDB);
|
|
159
|
+
await ws.exec((0, utils_1.createBaseSTable)(stable));
|
|
160
|
+
await ws.exec((0, utils_1.createSTableJSON)(jsonTable));
|
|
161
|
+
await ws.close();
|
|
162
|
+
});
|
|
163
|
+
describe("TDWebSocket.Stmt()", () => {
|
|
164
|
+
jest.setTimeout(20 * 1000);
|
|
165
|
+
test("normal BindParam", async () => {
|
|
166
|
+
let wsConf = new config_1.WSConfig(dsn);
|
|
167
|
+
wsConf.setDb(db);
|
|
168
|
+
let connector = await wsSql_1.WsSql.open(wsConf);
|
|
169
|
+
let stmt = await connector.stmtInit();
|
|
170
|
+
expect(stmt).toBeTruthy();
|
|
171
|
+
expect(stmt).toBeInstanceOf(wsStmt2_1.WsStmt2);
|
|
172
|
+
expect(connector.state()).toBeGreaterThan(0);
|
|
173
|
+
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, stableTags.length, db, stable));
|
|
174
|
+
await stmt.setTableName(table);
|
|
175
|
+
let tagParams = stmt.newStmtParam();
|
|
176
|
+
tagParams.setBoolean([stableTags[0]]);
|
|
177
|
+
tagParams.setTinyInt([stableTags[1]]);
|
|
178
|
+
tagParams.setSmallInt([stableTags[2]]);
|
|
179
|
+
tagParams.setInt([stableTags[3]]);
|
|
180
|
+
tagParams.setBigint([BigInt(stableTags[4])]);
|
|
181
|
+
tagParams.setUTinyInt([stableTags[5]]);
|
|
182
|
+
tagParams.setUSmallInt([stableTags[6]]);
|
|
183
|
+
tagParams.setUInt([stableTags[7]]);
|
|
184
|
+
tagParams.setUBigint([BigInt(stableTags[8])]);
|
|
185
|
+
tagParams.setFloat([stableTags[9]]);
|
|
186
|
+
tagParams.setDouble([stableTags[10]]);
|
|
187
|
+
tagParams.setBinary([stableTags[11]]);
|
|
188
|
+
tagParams.setNchar([stableTags[12]]);
|
|
189
|
+
await stmt.setTags(tagParams);
|
|
190
|
+
let bindParams = stmt.newStmtParam();
|
|
191
|
+
bindParams.setTimestamp(tableValues[0]);
|
|
192
|
+
bindParams.setTinyInt(tableValues[1]);
|
|
193
|
+
bindParams.setSmallInt(tableValues[2]);
|
|
194
|
+
bindParams.setInt(tableValues[3]);
|
|
195
|
+
bindParams.setBigint(tableValues[4]);
|
|
196
|
+
bindParams.setUTinyInt(tableValues[5]);
|
|
197
|
+
bindParams.setUSmallInt(tableValues[6]);
|
|
198
|
+
bindParams.setUInt(tableValues[7]);
|
|
199
|
+
bindParams.setUBigint(tableValues[8]);
|
|
200
|
+
bindParams.setFloat(tableValues[9]);
|
|
201
|
+
bindParams.setDouble(tableValues[10]);
|
|
202
|
+
bindParams.setBinary(tableValues[11]);
|
|
203
|
+
bindParams.setNchar(tableValues[12]);
|
|
204
|
+
bindParams.setBoolean(tableValues[13]);
|
|
205
|
+
bindParams.setInt(tableValues[14]);
|
|
206
|
+
bindParams.setGeometry(geoDataArray);
|
|
207
|
+
bindParams.setVarBinary(varbinary);
|
|
208
|
+
await stmt.bind(bindParams);
|
|
209
|
+
await stmt.batch();
|
|
210
|
+
await stmt.exec();
|
|
211
|
+
expect(stmt.getLastAffected()).toEqual(5);
|
|
212
|
+
await stmt.close();
|
|
213
|
+
let result = await connector.exec(`select * from ${db}.${stable}`);
|
|
214
|
+
console.log(result);
|
|
215
|
+
await connector.close();
|
|
216
|
+
});
|
|
217
|
+
test("normal CN BindParam", async () => {
|
|
218
|
+
let wsConf = new config_1.WSConfig(dsn);
|
|
219
|
+
wsConf.setDb(db);
|
|
220
|
+
let connector = await wsSql_1.WsSql.open(wsConf);
|
|
221
|
+
let stmt = await (await connector).stmtInit();
|
|
222
|
+
expect(stmt).toBeTruthy();
|
|
223
|
+
expect(stmt).toBeInstanceOf(wsStmt2_1.WsStmt2);
|
|
224
|
+
expect(connector.state()).toBeGreaterThan(0);
|
|
225
|
+
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, stableTags.length, db, stable));
|
|
226
|
+
await stmt.setTableName(table);
|
|
227
|
+
let tagParams = stmt.newStmtParam();
|
|
228
|
+
tagParams.setBoolean([stableCNTags[0]]);
|
|
229
|
+
tagParams.setTinyInt([stableCNTags[1]]);
|
|
230
|
+
tagParams.setSmallInt([stableCNTags[2]]);
|
|
231
|
+
tagParams.setInt([stableCNTags[3]]);
|
|
232
|
+
tagParams.setBigint([BigInt(stableCNTags[4])]);
|
|
233
|
+
tagParams.setUTinyInt([stableCNTags[5]]);
|
|
234
|
+
tagParams.setUSmallInt([stableCNTags[6]]);
|
|
235
|
+
tagParams.setUInt([stableCNTags[7]]);
|
|
236
|
+
tagParams.setUBigint([BigInt(stableCNTags[8])]);
|
|
237
|
+
tagParams.setFloat([stableCNTags[9]]);
|
|
238
|
+
tagParams.setDouble([stableCNTags[10]]);
|
|
239
|
+
tagParams.setBinary([stableCNTags[11]]);
|
|
240
|
+
tagParams.setNchar([stableCNTags[12]]);
|
|
241
|
+
await stmt.setTags(tagParams);
|
|
242
|
+
let bindParams = stmt.newStmtParam();
|
|
243
|
+
bindParams.setTimestamp(tableCNValues[0]);
|
|
244
|
+
bindParams.setTinyInt(tableCNValues[1]);
|
|
245
|
+
bindParams.setSmallInt(tableCNValues[2]);
|
|
246
|
+
bindParams.setInt(tableCNValues[3]);
|
|
247
|
+
bindParams.setBigint(tableCNValues[4]);
|
|
248
|
+
bindParams.setUTinyInt(tableCNValues[5]);
|
|
249
|
+
bindParams.setUSmallInt(tableCNValues[6]);
|
|
250
|
+
bindParams.setUInt(tableCNValues[7]);
|
|
251
|
+
bindParams.setUBigint(tableCNValues[8]);
|
|
252
|
+
bindParams.setFloat(tableCNValues[9]);
|
|
253
|
+
bindParams.setDouble(tableCNValues[10]);
|
|
254
|
+
bindParams.setBinary(tableCNValues[11]);
|
|
255
|
+
bindParams.setNchar(tableCNValues[12]);
|
|
256
|
+
bindParams.setBoolean(tableCNValues[13]);
|
|
257
|
+
bindParams.setInt(tableCNValues[14]);
|
|
258
|
+
bindParams.setGeometry(geoDataArray);
|
|
259
|
+
bindParams.setVarBinary(varbinary);
|
|
260
|
+
await stmt.bind(bindParams);
|
|
261
|
+
await stmt.batch();
|
|
262
|
+
await stmt.exec();
|
|
263
|
+
expect(stmt.getLastAffected()).toEqual(5);
|
|
264
|
+
await stmt.close();
|
|
265
|
+
let result = await connector.exec(`select count(*) from ${db}.${stable}`);
|
|
266
|
+
console.log(result);
|
|
267
|
+
await connector.close();
|
|
268
|
+
});
|
|
269
|
+
test("normal json tag BindParam", async () => {
|
|
270
|
+
let wsConf = new config_1.WSConfig(dsn);
|
|
271
|
+
wsConf.setDb(db);
|
|
272
|
+
let connector = await wsSql_1.WsSql.open(wsConf);
|
|
273
|
+
let stmt = await (await connector).stmtInit();
|
|
274
|
+
expect(stmt).toBeTruthy();
|
|
275
|
+
expect(stmt).toBeInstanceOf(wsStmt2_1.WsStmt2);
|
|
276
|
+
expect(connector.state()).toBeGreaterThan(0);
|
|
277
|
+
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, jsonTags.length, db, jsonTable));
|
|
278
|
+
await stmt.setTableName(`${jsonTable}_001`);
|
|
279
|
+
let tagParams = stmt.newStmtParam();
|
|
280
|
+
tagParams.setJson(jsonTags);
|
|
281
|
+
await stmt.setTags(tagParams);
|
|
282
|
+
let bindParams = stmt.newStmtParam();
|
|
283
|
+
bindParams.setTimestamp(tableCNValues[0]);
|
|
284
|
+
bindParams.setTinyInt(tableCNValues[1]);
|
|
285
|
+
bindParams.setSmallInt(tableCNValues[2]);
|
|
286
|
+
bindParams.setInt(tableCNValues[3]);
|
|
287
|
+
bindParams.setBigint(tableCNValues[4]);
|
|
288
|
+
bindParams.setUTinyInt(tableCNValues[5]);
|
|
289
|
+
bindParams.setUSmallInt(tableCNValues[6]);
|
|
290
|
+
bindParams.setUInt(tableCNValues[7]);
|
|
291
|
+
bindParams.setUBigint(tableCNValues[8]);
|
|
292
|
+
bindParams.setFloat(tableCNValues[9]);
|
|
293
|
+
bindParams.setDouble(tableCNValues[10]);
|
|
294
|
+
bindParams.setBinary(tableCNValues[11]);
|
|
295
|
+
bindParams.setNchar(tableCNValues[12]);
|
|
296
|
+
bindParams.setBoolean(tableCNValues[13]);
|
|
297
|
+
bindParams.setInt(tableCNValues[14]);
|
|
298
|
+
bindParams.setGeometry(geoDataArray);
|
|
299
|
+
bindParams.setVarBinary(varbinary);
|
|
300
|
+
await stmt.bind(bindParams);
|
|
301
|
+
await stmt.batch();
|
|
302
|
+
await stmt.exec();
|
|
303
|
+
expect(stmt.getLastAffected()).toEqual(5);
|
|
304
|
+
await stmt.close();
|
|
305
|
+
let result = await connector.exec(`select * from ${db}.${jsonTable}`);
|
|
306
|
+
console.log(result);
|
|
307
|
+
await connector.close();
|
|
308
|
+
});
|
|
309
|
+
test("normal json cn tag BindParam", async () => {
|
|
310
|
+
let wsConf = new config_1.WSConfig(dsn);
|
|
311
|
+
wsConf.setDb(db);
|
|
312
|
+
let connector = await wsSql_1.WsSql.open(wsConf);
|
|
313
|
+
let stmt = await connector.stmtInit();
|
|
314
|
+
expect(stmt).toBeTruthy();
|
|
315
|
+
expect(stmt).toBeInstanceOf(wsStmt2_1.WsStmt2);
|
|
316
|
+
expect(connector.state()).toBeGreaterThan(0);
|
|
317
|
+
await stmt.prepare((0, utils_1.getInsertBind)(tableValues.length + 2, jsonTags.length, db, jsonTable));
|
|
318
|
+
await stmt.setTableName(`${jsonTable}_001`);
|
|
319
|
+
let tagParams = stmt.newStmtParam();
|
|
320
|
+
tagParams.setJson(jsonTagsCN);
|
|
321
|
+
await stmt.setTags(tagParams);
|
|
322
|
+
let bindParams = stmt.newStmtParam();
|
|
323
|
+
bindParams.setTimestamp(tableCNValues[0]);
|
|
324
|
+
bindParams.setTinyInt(tableCNValues[1]);
|
|
325
|
+
bindParams.setSmallInt(tableCNValues[2]);
|
|
326
|
+
bindParams.setInt(tableCNValues[3]);
|
|
327
|
+
bindParams.setBigint(tableCNValues[4]);
|
|
328
|
+
bindParams.setUTinyInt(tableCNValues[5]);
|
|
329
|
+
bindParams.setUSmallInt(tableCNValues[6]);
|
|
330
|
+
bindParams.setUInt(tableCNValues[7]);
|
|
331
|
+
bindParams.setUBigint(tableCNValues[8]);
|
|
332
|
+
bindParams.setFloat(tableCNValues[9]);
|
|
333
|
+
bindParams.setDouble(tableCNValues[10]);
|
|
334
|
+
bindParams.setBinary(tableCNValues[11]);
|
|
335
|
+
bindParams.setNchar(tableCNValues[12]);
|
|
336
|
+
bindParams.setBoolean(tableCNValues[13]);
|
|
337
|
+
bindParams.setInt(tableCNValues[14]);
|
|
338
|
+
bindParams.setGeometry(geoDataArray);
|
|
339
|
+
bindParams.setVarBinary(varbinary);
|
|
340
|
+
await stmt.bind(bindParams);
|
|
341
|
+
await stmt.batch();
|
|
342
|
+
await stmt.exec();
|
|
343
|
+
expect(stmt.getLastAffected()).toEqual(5);
|
|
344
|
+
await stmt.close();
|
|
345
|
+
let result = await connector.exec(`select * from ${db}.${jsonTable}`);
|
|
346
|
+
console.log(result);
|
|
347
|
+
await connector.close();
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
test("test bind exception cases", async () => {
|
|
351
|
+
let wsConf = new config_1.WSConfig(dsn);
|
|
352
|
+
let connector = await wsSql_1.WsSql.open(wsConf);
|
|
353
|
+
let stmt = await connector.stmtInit();
|
|
354
|
+
expect(stmt).toBeInstanceOf(wsStmt2_1.WsStmt2);
|
|
355
|
+
const params = stmt.newStmtParam();
|
|
356
|
+
const emptyArrayMethods = [
|
|
357
|
+
{ method: "setBoolean", name: "SetBooleanColumn" },
|
|
358
|
+
{ method: "setTinyInt", name: "SetTinyIntColumn" },
|
|
359
|
+
{ method: "setUTinyInt", name: "SetUTinyIntColumn" },
|
|
360
|
+
{ method: "setSmallInt", name: "SetSmallIntColumn" },
|
|
361
|
+
{ method: "setUSmallInt", name: "SetSmallIntColumn" },
|
|
362
|
+
{ method: "setInt", name: "SetIntColumn" },
|
|
363
|
+
{ method: "setUInt", name: "SetUIntColumn" },
|
|
364
|
+
{ method: "setBigint", name: "SetBigIntColumn" },
|
|
365
|
+
{ method: "setUBigint", name: "SetUBigIntColumn" },
|
|
366
|
+
{ method: "setFloat", name: "SetFloatColumn" },
|
|
367
|
+
{ method: "setDouble", name: "SetDoubleColumn" },
|
|
368
|
+
{ method: "setTimestamp", name: "SeTimestampColumn" },
|
|
369
|
+
];
|
|
370
|
+
emptyArrayMethods.forEach(({ method, name }) => {
|
|
371
|
+
expect(() => {
|
|
372
|
+
params[method]([]);
|
|
373
|
+
}).toThrow(`${name} params is invalid!`);
|
|
374
|
+
expect(() => {
|
|
375
|
+
params[method](null);
|
|
376
|
+
}).toThrow(`${name} params is invalid!`);
|
|
377
|
+
expect(() => {
|
|
378
|
+
params[method](undefined);
|
|
379
|
+
}).toThrow(`${name} params is invalid!`);
|
|
380
|
+
});
|
|
381
|
+
expect(() => {
|
|
382
|
+
params.setBoolean(["not boolean"]);
|
|
383
|
+
params.encode();
|
|
384
|
+
}).toThrow("SetTinyIntColumn params is invalid!");
|
|
385
|
+
expect(() => {
|
|
386
|
+
params.setTinyInt(["not number"]);
|
|
387
|
+
params.encode();
|
|
388
|
+
}).toThrow("SetTinyIntColumn params is invalid!");
|
|
389
|
+
expect(() => {
|
|
390
|
+
params.setBigint(["not bigint"]);
|
|
391
|
+
params.encode();
|
|
392
|
+
}).toThrow("SetTinyIntColumn params is invalid!");
|
|
393
|
+
await connector.close();
|
|
394
|
+
});
|
|
395
|
+
afterAll(async () => {
|
|
396
|
+
let conf = new config_1.WSConfig(dsn);
|
|
397
|
+
let ws = await wsSql_1.WsSql.open(conf);
|
|
398
|
+
await ws.exec(dropDB);
|
|
399
|
+
await ws.close();
|
|
400
|
+
wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
|
|
401
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud.tmq.test.d.ts","sourceRoot":"","sources":["../../../../test/tmq/cloud/cloud.tmq.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 wsConnectorPool_1 = require("@src/client/wsConnectorPool");
|
|
6
|
+
const log_1 = require("@src/common/log");
|
|
7
|
+
const config_1 = require("@src/common/config");
|
|
8
|
+
const wsSql_1 = require("@src/sql/wsSql");
|
|
9
|
+
const utils_1 = require("@test-helpers/utils");
|
|
10
|
+
const cloudWsUrl = (0, utils_1.testCloudWsUrl)();
|
|
11
|
+
const testWithCloudEnv = utils_1.testCloudEnv;
|
|
12
|
+
beforeAll(async () => {
|
|
13
|
+
if (!cloudWsUrl) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let wsSql = null;
|
|
17
|
+
try {
|
|
18
|
+
const conf = new config_1.WSConfig(cloudWsUrl);
|
|
19
|
+
conf.setUser((0, utils_1.testUsername)());
|
|
20
|
+
conf.setPwd((0, utils_1.testPassword)());
|
|
21
|
+
wsSql = await wsSql_1.WsSql.open(conf);
|
|
22
|
+
let sql = `INSERT INTO dmeters.d1001 USING dmeters.meters (groupid, location) TAGS(2, 'SanFrancisco')
|
|
23
|
+
VALUES (NOW + 1a, 10.30000, 219, 0.31000) (NOW + 2a, 12.60000, 218, 0.33000) (NOW + 3a, 12.30000, 221, 0.31000)
|
|
24
|
+
dmeters.d1002 USING dmeters.meters (groupid, location) TAGS(3, 'SanFrancisco')
|
|
25
|
+
VALUES (NOW + 1a, 10.30000, 218, 0.25000)`;
|
|
26
|
+
let res = await wsSql.exec(sql);
|
|
27
|
+
console.log(res);
|
|
28
|
+
expect(res.getAffectRows()).toBeGreaterThanOrEqual(3);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
throw err;
|
|
32
|
+
}
|
|
33
|
+
finally {
|
|
34
|
+
if (wsSql) {
|
|
35
|
+
await wsSql.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
describe("TDWebSocket.Tmq()", () => {
|
|
40
|
+
jest.setTimeout(20 * 1000);
|
|
41
|
+
testWithCloudEnv("normal connect", async () => {
|
|
42
|
+
const url = cloudWsUrl;
|
|
43
|
+
const topic = "topic_meters";
|
|
44
|
+
const topics = [topic];
|
|
45
|
+
const groupId = "group1";
|
|
46
|
+
const clientId = "client1";
|
|
47
|
+
let configMap = new Map([
|
|
48
|
+
[constant_1.TMQConstants.GROUP_ID, groupId],
|
|
49
|
+
[constant_1.TMQConstants.CLIENT_ID, clientId],
|
|
50
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
|
|
51
|
+
[constant_1.TMQConstants.WS_URL, url],
|
|
52
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "true"],
|
|
53
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
|
|
54
|
+
]);
|
|
55
|
+
(0, log_1.setLevel)("debug");
|
|
56
|
+
// create consumer
|
|
57
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
58
|
+
console.log(`Create consumer successfully, host: ${url}, groupId: ${groupId}, clientId: ${clientId}`);
|
|
59
|
+
// subscribe
|
|
60
|
+
await consumer.subscribe(topics);
|
|
61
|
+
console.log(`Subscribe topics successfully, topics: ${topics}`);
|
|
62
|
+
let res = new Map();
|
|
63
|
+
while (res.size == 0) {
|
|
64
|
+
// poll
|
|
65
|
+
res = await consumer.poll(1000);
|
|
66
|
+
for (let [key, value] of res) {
|
|
67
|
+
// Add your data processing logic here
|
|
68
|
+
console.log(`data: ${key} ${value}`);
|
|
69
|
+
}
|
|
70
|
+
// commit
|
|
71
|
+
await consumer.commit();
|
|
72
|
+
}
|
|
73
|
+
// seek
|
|
74
|
+
let assignment = await consumer.assignment();
|
|
75
|
+
await consumer.seekToBeginning(assignment);
|
|
76
|
+
console.log("Assignment seek to beginning successfully");
|
|
77
|
+
// clean
|
|
78
|
+
await consumer.unsubscribe();
|
|
79
|
+
await consumer.close();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
afterAll(async () => {
|
|
83
|
+
wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
|
|
84
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmq.cloud.test.d.ts","sourceRoot":"","sources":["../../../../test/tmq/cloud/tmq.cloud.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 wsConnectorPool_1 = require("@src/client/wsConnectorPool");
|
|
6
|
+
const log_1 = require("@src/common/log");
|
|
7
|
+
const config_1 = require("@src/common/config");
|
|
8
|
+
const wsSql_1 = require("@src/sql/wsSql");
|
|
9
|
+
const utils_1 = require("@test-helpers/utils");
|
|
10
|
+
const url = (0, utils_1.testCloudWsUrl)();
|
|
11
|
+
beforeAll(async () => {
|
|
12
|
+
if (!url) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let wsSql = null;
|
|
16
|
+
try {
|
|
17
|
+
const conf = new config_1.WSConfig(url);
|
|
18
|
+
conf.setUser((0, utils_1.testUsername)());
|
|
19
|
+
conf.setPwd((0, utils_1.testPassword)());
|
|
20
|
+
wsSql = await wsSql_1.WsSql.open(conf);
|
|
21
|
+
let sql = `INSERT INTO dmeters.d1001 USING dmeters.meters (groupid, location) TAGS(2, 'SanFrancisco')
|
|
22
|
+
VALUES (NOW + 1a, 10.30000, 219, 0.31000) (NOW + 2a, 12.60000, 218, 0.33000) (NOW + 3a, 12.30000, 221, 0.31000)
|
|
23
|
+
dmeters.d1002 USING dmeters.meters (groupid, location) TAGS(3, 'SanFrancisco')
|
|
24
|
+
VALUES (NOW + 1a, 10.30000, 218, 0.25000)`;
|
|
25
|
+
let res = await wsSql.exec(sql);
|
|
26
|
+
console.log(res);
|
|
27
|
+
expect(res.getAffectRows()).toBeGreaterThanOrEqual(3);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
throw err;
|
|
31
|
+
}
|
|
32
|
+
finally {
|
|
33
|
+
if (wsSql) {
|
|
34
|
+
await wsSql.close();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
describe("TDWebSocket.Tmq()", () => {
|
|
39
|
+
jest.setTimeout(20 * 1000);
|
|
40
|
+
(0, utils_1.testCloud)("normal connect", async () => {
|
|
41
|
+
const topic = "topic_meters";
|
|
42
|
+
const topics = [topic];
|
|
43
|
+
const groupId = "group1";
|
|
44
|
+
const clientId = "client1";
|
|
45
|
+
let configMap = new Map([
|
|
46
|
+
[constant_1.TMQConstants.GROUP_ID, groupId],
|
|
47
|
+
[constant_1.TMQConstants.CLIENT_ID, clientId],
|
|
48
|
+
[constant_1.TMQConstants.AUTO_OFFSET_RESET, "earliest"],
|
|
49
|
+
[constant_1.TMQConstants.WS_URL, url],
|
|
50
|
+
[constant_1.TMQConstants.ENABLE_AUTO_COMMIT, "true"],
|
|
51
|
+
[constant_1.TMQConstants.AUTO_COMMIT_INTERVAL_MS, "1000"],
|
|
52
|
+
]);
|
|
53
|
+
(0, log_1.setLevel)("debug");
|
|
54
|
+
// create consumer
|
|
55
|
+
let consumer = await wsTmq_1.WsConsumer.newConsumer(configMap);
|
|
56
|
+
console.log(`Create consumer successfully, host: ${url}, groupId: ${groupId}, clientId: ${clientId}`);
|
|
57
|
+
// subscribe
|
|
58
|
+
await consumer.subscribe(topics);
|
|
59
|
+
console.log(`Subscribe topics successfully, topics: ${topics}`);
|
|
60
|
+
let res = new Map();
|
|
61
|
+
while (res.size == 0) {
|
|
62
|
+
// poll
|
|
63
|
+
res = await consumer.poll(1000);
|
|
64
|
+
for (let [key, value] of res) {
|
|
65
|
+
// Add your data processing logic here
|
|
66
|
+
console.log(`data: ${key} ${value}`);
|
|
67
|
+
}
|
|
68
|
+
// commit
|
|
69
|
+
await consumer.commit();
|
|
70
|
+
}
|
|
71
|
+
// seek
|
|
72
|
+
let assignment = await consumer.assignment();
|
|
73
|
+
await consumer.seekToBeginning(assignment);
|
|
74
|
+
console.log("Assignment seek to beginning successfully");
|
|
75
|
+
// clean
|
|
76
|
+
await consumer.unsubscribe();
|
|
77
|
+
await consumer.close();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
afterAll(async () => {
|
|
81
|
+
wsConnectorPool_1.WebSocketConnectionPool.instance().destroyed();
|
|
82
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmq.config.test.d.ts","sourceRoot":"","sources":["../../../../test/tmq/core/tmq.config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const config_1 = require("@src/tmq/config");
|
|
4
|
+
const constant_1 = require("@src/tmq/constant");
|
|
5
|
+
const utils_1 = require("@test-helpers/utils");
|
|
6
|
+
const dsn_1 = require("@src/common/dsn");
|
|
7
|
+
describe("TmqConfig with dsn", () => {
|
|
8
|
+
const baseDsn = "ws://localhost:6041";
|
|
9
|
+
test("token field is null when CONNECT_TOKEN is not provided", () => {
|
|
10
|
+
const configMap = new Map([
|
|
11
|
+
[constant_1.TMQConstants.WS_URL, baseDsn],
|
|
12
|
+
[constant_1.TMQConstants.CONNECT_USER, (0, utils_1.testUsername)()],
|
|
13
|
+
[constant_1.TMQConstants.CONNECT_PASS, (0, utils_1.testPassword)()],
|
|
14
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
15
|
+
]);
|
|
16
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
17
|
+
expect(cfg.token).toBeNull();
|
|
18
|
+
});
|
|
19
|
+
test("token field is set when CONNECT_TOKEN is provided", () => {
|
|
20
|
+
const configMap = new Map([
|
|
21
|
+
[constant_1.TMQConstants.WS_URL, baseDsn],
|
|
22
|
+
[constant_1.TMQConstants.CONNECT_TOKEN, "mytoken123"],
|
|
23
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
24
|
+
]);
|
|
25
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
26
|
+
expect(cfg.token).toBe("mytoken123");
|
|
27
|
+
});
|
|
28
|
+
test("writes token into dsn params for both tmq and sql dsn", () => {
|
|
29
|
+
const configMap = new Map([
|
|
30
|
+
[constant_1.TMQConstants.WS_URL, baseDsn],
|
|
31
|
+
[constant_1.TMQConstants.CONNECT_TOKEN, "mytoken123"],
|
|
32
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
33
|
+
]);
|
|
34
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
35
|
+
expect(cfg.dsn?.params.get("bearer_token")).toBe("mytoken123");
|
|
36
|
+
expect(cfg.sqlDsn?.params.get("bearer_token")).toBe("mytoken123");
|
|
37
|
+
});
|
|
38
|
+
test("parses multi-address dsn and keeps connector-level params", () => {
|
|
39
|
+
const configMap = new Map([
|
|
40
|
+
[
|
|
41
|
+
constant_1.TMQConstants.WS_URL,
|
|
42
|
+
"ws://u:p@host1:6041,host2:6042/topicdb?retries=5&retry_backoff_ms=120"
|
|
43
|
+
],
|
|
44
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
45
|
+
]);
|
|
46
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
47
|
+
expect(cfg.dsn?.addresses).toEqual([
|
|
48
|
+
{ host: "host1", port: 6041 },
|
|
49
|
+
{ host: "host2", port: 6042 },
|
|
50
|
+
]);
|
|
51
|
+
expect(cfg.dsn?.endpoint).toBe(dsn_1.WS_TMQ_ENDPOINT);
|
|
52
|
+
expect(cfg.sqlDsn?.endpoint).toBe(dsn_1.WS_SQL_ENDPOINT);
|
|
53
|
+
expect(cfg.dsn?.params.get("retries")).toBe("5");
|
|
54
|
+
expect(cfg.dsn?.params.get("retry_backoff_ms")).toBe("120");
|
|
55
|
+
});
|
|
56
|
+
test("applies CONNECT_USER and CONNECT_PASS overrides on top of dsn", () => {
|
|
57
|
+
const configMap = new Map([
|
|
58
|
+
[constant_1.TMQConstants.WS_URL, "ws://raw_user:raw_pass@localhost:6041"],
|
|
59
|
+
[constant_1.TMQConstants.CONNECT_USER, "override_user"],
|
|
60
|
+
[constant_1.TMQConstants.CONNECT_PASS, "override_pass"],
|
|
61
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
62
|
+
]);
|
|
63
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
64
|
+
expect(cfg.user).toBe("override_user");
|
|
65
|
+
expect(cfg.password).toBe("override_pass");
|
|
66
|
+
expect(cfg.dsn?.username).toBe("override_user");
|
|
67
|
+
expect(cfg.dsn?.password).toBe("override_pass");
|
|
68
|
+
expect(cfg.sqlDsn?.username).toBe("override_user");
|
|
69
|
+
expect(cfg.sqlDsn?.password).toBe("override_pass");
|
|
70
|
+
});
|
|
71
|
+
test("loads bearer_token from ws.url when CONNECT_TOKEN is absent", () => {
|
|
72
|
+
const configMap = new Map([
|
|
73
|
+
[constant_1.TMQConstants.WS_URL, "ws://localhost:6041?bearer_token=url_token"],
|
|
74
|
+
[constant_1.TMQConstants.GROUP_ID, "g1"],
|
|
75
|
+
]);
|
|
76
|
+
const cfg = new config_1.TmqConfig(configMap);
|
|
77
|
+
expect(cfg.token).toBe("url_token");
|
|
78
|
+
expect(cfg.otherConfigs.get(constant_1.TMQConstants.CONNECT_TOKEN)).toBe("url_token");
|
|
79
|
+
});
|
|
80
|
+
test("CONNECT_TOKEN constant value is td.connect.token", () => {
|
|
81
|
+
expect(constant_1.TMQConstants.CONNECT_TOKEN).toBe("td.connect.token");
|
|
82
|
+
});
|
|
83
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmq.test.d.ts","sourceRoot":"","sources":["../../../../test/tmq/core/tmq.test.ts"],"names":[],"mappings":""}
|