Skip to content

Commit f4dfb65

Browse files
committed
enhanced testing
1 parent 2a523e1 commit f4dfb65

10 files changed

Lines changed: 402 additions & 182 deletions

File tree

benchmarks/direct.js

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
var assert = require('assert');
2+
const { Chat21Client } = require('../mqttclient/chat21client.js');
3+
4+
const user1 = {
5+
userid: 'USER1',
6+
fullname: 'User 1',
7+
firstname: 'User',
8+
lastname: '1',
9+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2NzI5NDc4ZS1mOWIwLTRiODctYjNhYS03ZjU1OWExNzc5YjIiLCJzdWIiOiJVU0VSMSIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjEuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIxLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjEiLCJjaWQiOiJVU0VSMSIsImF6cCI6IlVTRVIxIiwidXNlcl9pZCI6IlVTRVIxIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjEiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.r-GBXo1fIUtl1QjOkXxcRaenVNQBElRkus3omh9YtjQ'
10+
};
11+
12+
const user2 = {
13+
userid: 'USER2',
14+
fullname: 'User 2',
15+
firstname: 'User',
16+
lastname: '2',
17+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0MmEwMjc2ZC1lODUzLTQ5YjMtOTU4ZS0xODBkMjFjZGZjNWMiLCJzdWIiOiJVU0VSMiIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjIuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIyLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjIiLCJjaWQiOiJVU0VSMiIsImF6cCI6IlVTRVIyIiwidXNlcl9pZCI6IlVTRVIyIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjIiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.Zkbr3e9MfGGDKRdVUyG4330LxeNaKYS0y3upPtS4Wgg'
18+
};
19+
20+
const user3 = {
21+
userid: 'USER3',
22+
fullname: 'User 3',
23+
firstname: 'User',
24+
lastname: '3',
25+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlMmI2Y2RhMi0yNjhmLTQxZDMtYjBjYy1kZWNjN2I0M2UwMjEiLCJzdWIiOiJVU0VSMyIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjMuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIzLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjMiLCJjaWQiOiJVU0VSMyIsImF6cCI6IlVTRVIzIiwidXNlcl9pZCI6IlVTRVIzIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjMiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.-Cio8ITPCQswv_4KnxJrRbm-5RCXMefuT91wWUNZJmU'
26+
};
27+
28+
const MQTT_ENDPOINT = 'ws://localhost:15675/ws';
29+
const APPID = 'tilechat';
30+
31+
let TOTAL_MESSAGES = 1;
32+
let starttime;
33+
let endtime;
34+
35+
startDirectBenchmark();
36+
37+
function startDirectBenchmark() {
38+
console.log("Sending " + TOTAL_MESSAGES + " direct messages from 1 user to 1 other user. Delivering a total of " + TOTAL_MESSAGES + " messages.");
39+
let messages_count = 0;
40+
let chatClient1 = new Chat21Client(
41+
{
42+
appId: APPID,
43+
MQTTendpoint: MQTT_ENDPOINT
44+
}
45+
);
46+
let chatClient2 = new Chat21Client(
47+
{
48+
appId: APPID,
49+
MQTTendpoint: MQTT_ENDPOINT
50+
}
51+
);
52+
chatClient2.connect(user2.userid, user2.token, () => {
53+
chatClient2.onMessageAdded((message, topic) => {
54+
// console.log("Received:", message.text + ' ID:' + message.message_id);
55+
assert(message != null);
56+
assert(message.text != null);
57+
messages_count += 1;
58+
if (messages_count == TOTAL_MESSAGES) {
59+
endtime = Date.now();
60+
console.log("End:" + endtime);
61+
let totaltime = endtime - starttime;
62+
console.log("TOTAL TIME:" + totaltime);
63+
chatClient2.close(() => {
64+
console.log("...TEST TERMINATED. DISCONNECTING CLIENT2. TOTAL RECEIVED MESSAGES:" + messages_count);
65+
});
66+
chatClient1.close(() => {
67+
console.log("CLIENT 1 DISCONNECTED.");
68+
});
69+
}
70+
});
71+
});
72+
73+
chatClient1.connect(user1.userid, user1.token, () => {
74+
console.log("User1 connected...");
75+
starttime = Date.now();
76+
console.log("Start:" + starttime);
77+
for (i = 0; i < TOTAL_MESSAGES; i++) {
78+
let message_text = "Message" + i;
79+
chatClient1.sendMessage(
80+
message_text,
81+
'text',
82+
user2.userid,
83+
user2.fullname,
84+
user1.fullname,
85+
null,
86+
null,
87+
'direct',
88+
() => {
89+
// console.log("Message sent.");
90+
}
91+
);
92+
}
93+
});
94+
}

benchmarks/groups.js

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
var assert = require('assert');
2+
const { uuid } = require('uuidv4');
3+
const { Chat21Client } = require('../mqttclient/chat21client.js');
4+
5+
const user1 = {
6+
userid: 'USER1',
7+
fullname: 'User 1',
8+
firstname: 'User',
9+
lastname: '1',
10+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI2NzI5NDc4ZS1mOWIwLTRiODctYjNhYS03ZjU1OWExNzc5YjIiLCJzdWIiOiJVU0VSMSIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjEuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIxLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjEiLCJjaWQiOiJVU0VSMSIsImF6cCI6IlVTRVIxIiwidXNlcl9pZCI6IlVTRVIxIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjEiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.r-GBXo1fIUtl1QjOkXxcRaenVNQBElRkus3omh9YtjQ'
11+
};
12+
13+
const user2 = {
14+
userid: 'USER2',
15+
fullname: 'User 2',
16+
firstname: 'User',
17+
lastname: '2',
18+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0MmEwMjc2ZC1lODUzLTQ5YjMtOTU4ZS0xODBkMjFjZGZjNWMiLCJzdWIiOiJVU0VSMiIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjIuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIyLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjIiLCJjaWQiOiJVU0VSMiIsImF6cCI6IlVTRVIyIiwidXNlcl9pZCI6IlVTRVIyIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjIiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.Zkbr3e9MfGGDKRdVUyG4330LxeNaKYS0y3upPtS4Wgg'
19+
};
20+
21+
const user3 = {
22+
userid: 'USER3',
23+
fullname: 'User 3',
24+
firstname: 'User',
25+
lastname: '3',
26+
token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlMmI2Y2RhMi0yNjhmLTQxZDMtYjBjYy1kZWNjN2I0M2UwMjEiLCJzdWIiOiJVU0VSMyIsInNjb3BlIjpbInJhYmJpdG1xLnJlYWQ6Ki8qL2FwcHMudGlsZWNoYXQudXNlcnMuVVNFUjMuKiIsInJhYmJpdG1xLndyaXRlOiovKi9hcHBzLnRpbGVjaGF0LnVzZXJzLlVTRVIzLioiLCJyYWJiaXRtcS5jb25maWd1cmU6Ki8qLyoiXSwiY2xpZW50X2lkIjoiVVNFUjMiLCJjaWQiOiJVU0VSMyIsImF6cCI6IlVTRVIzIiwidXNlcl9pZCI6IlVTRVIzIiwiYXBwX2lkIjoidGlsZWNoYXQiLCJpYXQiOjE2MjM3Njc1MjAsImV4cCI6MTkzNDgwNzUyMCwiYXVkIjpbInJhYmJpdG1xIiwiVVNFUjMiXSwia2lkIjoidGlsZWRlc2sta2V5IiwidGlsZWRlc2tfYXBpX3JvbGVzIjoidXNlciJ9.-Cio8ITPCQswv_4KnxJrRbm-5RCXMefuT91wWUNZJmU'
27+
};
28+
const MQTT_ENDPOINT = 'ws://localhost:15675/ws';
29+
const API_ENDPOINT = 'http://localhost:8004/api'
30+
const APPID = 'tilechat';
31+
32+
let TOTAL_SENT_MESSAGES = 100;
33+
let TOTAL_DELIVERED_MESSAGES = TOTAL_SENT_MESSAGES * 3;
34+
let starttime;
35+
let endtime;
36+
37+
startBenchmark();
38+
39+
function startBenchmark() {
40+
console.log("Sending " + TOTAL_SENT_MESSAGES + " messages to 3 users. Delivering a total of " + TOTAL_DELIVERED_MESSAGES + " messages.");
41+
let messages_count = 0;
42+
const group_id = "group-" + uuid();
43+
const group_name = "test send message group";
44+
const group_members = {}
45+
group_members[user1.userid] = 1;
46+
group_members[user2.userid] = 1;
47+
group_members[user3.userid] = 1;
48+
let received_messages = {}
49+
const USER1_RECEIVED_KEY = 'user1';
50+
const USER2_RECEIVED_KEY = 'user2';
51+
const USER3_RECEIVED_KEY = 'user3';
52+
const SENT_MESSAGE = "Welcome everybody 2";
53+
let chatClient1 = new Chat21Client( // group creator
54+
{
55+
appId: APPID,
56+
MQTTendpoint: MQTT_ENDPOINT,
57+
APIendpoint: API_ENDPOINT
58+
}
59+
);
60+
let chatClient2 = new Chat21Client( // group member, will receive sent message
61+
{
62+
appId: APPID,
63+
MQTTendpoint: MQTT_ENDPOINT
64+
}
65+
);
66+
let chatClient3 = new Chat21Client( // group member, will receive sent message
67+
{
68+
appId: APPID,
69+
MQTTendpoint: MQTT_ENDPOINT
70+
}
71+
);
72+
chatClient2.connect(user2.userid, user2.token, () => {
73+
console.log("User2 connected...");
74+
chatClient2.onMessageAdded((message, topic) => {
75+
console.log("user2 message added:", message.text);
76+
if (
77+
message &&
78+
message.text &&
79+
!message.attributes
80+
) {
81+
messages_count += 1;
82+
console.log("user2: " + messages_count);
83+
}
84+
check_finish(messages_count, chatClient1, chatClient2, chatClient3);
85+
});
86+
chatClient3.connect(user3.userid, user3.token, () => {
87+
console.log("User3 connected...");
88+
chatClient3.onMessageAdded((message, topic) => {
89+
console.log("user3 message added:", message.text);
90+
if (
91+
message &&
92+
message.text &&
93+
!message.attributes
94+
) {
95+
messages_count += 1;
96+
console.log("user3: " + messages_count);
97+
}
98+
check_finish(messages_count, chatClient1, chatClient2, chatClient3);
99+
});
100+
chatClient1.connect(user1.userid, user1.token, () => {
101+
console.log("User1 (group owner) connected...");
102+
chatClient1.createGroup(
103+
group_name,
104+
group_id,
105+
group_members,
106+
(err, result) => {
107+
assert(err == null);
108+
assert(result != null);
109+
assert(result.success == true);
110+
assert(result.group.name === group_name);
111+
chatClient1.onMessageAdded((message, topic) => {
112+
console.log("user1 message added:", message.text);
113+
if (
114+
message &&
115+
message.text &&
116+
!message.attributes
117+
) {
118+
messages_count += 1;
119+
console.log("user1: " + messages_count);
120+
}
121+
check_finish(messages_count, chatClient1, chatClient2, chatClient3);
122+
});
123+
starttime = Date.now();
124+
console.log("Start:" + starttime);
125+
for (i = 0; i < TOTAL_SENT_MESSAGES; i++) {
126+
let message_text = "Message" + i;
127+
chatClient1.sendMessage(
128+
message_text,
129+
'text',
130+
group_id,
131+
group_name,
132+
user1.fullname,
133+
null,
134+
null,
135+
'group',
136+
() => {
137+
//console.log("Message sent to group", group_name);
138+
}
139+
);
140+
}
141+
}
142+
);
143+
});
144+
});
145+
});
146+
}
147+
148+
function check_finish(messages_count, chatClient1, chatClient2, chatClient3) {
149+
if (messages_count == TOTAL_DELIVERED_MESSAGES) {
150+
endtime = Date.now();
151+
console.log("End:" + endtime);
152+
let totaltime = endtime - starttime;
153+
console.log("TOTAL TIME:" + totaltime);
154+
chatClient1.close(() => {
155+
chatClient2.close(() => {
156+
chatClient3.close(() => {
157+
console.log("BENCHMARK END. TOTAL MESSAGES DELIVERED:", messages_count);
158+
});
159+
});
160+
});
161+
}
162+
}

chatdb/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class ChatDB {
4343
delete message['_id'] // if present (message is coming from a mongodb query?) it is illegal. It produces: MongoError: E11000 duplicate key error collection: tiledesk-dialogflow-proxy.messages index: _id_ dup key: { : "5ef72c2494e08ffec88a033a" }
4444
this.db.collection(this.messages_collection).updateOne({timelineOf: message.timelineOf, message_id: message.message_id}, { $set: message }, { upsert: true }, function(err, doc) {
4545
if (err) {
46-
logger.error("db error...", err)
46+
console.error("db error...", err)
4747
if (callback) {
4848
callback(err, null)
4949
}

chatservermq.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,11 @@ if (webhook_enabled == undefined || webhook_enabled === "true" || webhook_enable
2121
}else {
2222
webhook_enabled = false;
2323
}
24-
logger.info("webhook_enabled: " + webhook_enabled);
24+
logger.debug("webhook_enabled: " + webhook_enabled);
2525

2626

2727
var webhook_endpoint = process.env.WEBHOOK_ENDPOINT;
28-
logger.info("webhook_endpoint: " + webhook_endpoint);
28+
logger.debug("webhook_endpoint: " + webhook_endpoint);
2929

3030

3131
let webhook_events_array = null;
@@ -44,6 +44,7 @@ async function start() {
4444
observer.setWebHookEnabled(webhook_enabled);
4545
observer.setWebHookEndpoint(webhook_endpoint);
4646
observer.setWebHookEvents(webhook_events_array);
47+
// observer.setPersistentMessages(true);
4748

4849
await startServer({app_id: process.env.APP_ID, exchange: 'amq.topic', rabbitmq_uri:process.env.RABBITMQ_URI, mongo_uri: process.env.MONGODB_URI});
4950
}

0 commit comments

Comments
 (0)