8000 added test cases (#15091) · open-bigdata/arangodb@b74b5aa · GitHub
[go: up one dir, main page]

Skip to content

Commit b74b5aa

Browse files
authored
added test cases (arangodb#15091)
1 parent f76e7b2 commit b74b5aa

File tree

1 file changed

+141
-22
lines changed

1 file changed

+141
-22
lines changed

tests/js/client/shell/shell-transaction-dropped-followers-cluster.js

Lines changed: 141 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* jshint globalstrict:false, strict:false, maxlen: 200 */
2-
/* global fail, assertEqual, assertNotEqual */
2+
/* global fail, assertEqual, assertNotEqual, assertTrue */
33

44
// //////////////////////////////////////////////////////////////////////////////
55
// / DISCLAIMER
@@ -31,6 +31,24 @@ const db = arangodb.db;
3131
const { getEndpointById, getEndpointsByType, getMetric } = require('@arangodb/test-helper');
3232
const request = require('@arangodb/request');
3333

34+
function getDroppedFollowers(servers) {
35+
let droppedFollowers = {};
36+
servers.forEach((serverId) => {
37+
let endpoint = getEndpointById(serverId);
38+
droppedFollowers[serverId] = getMetric(endpoint, "arangodb_dropped_followers_total");
39+
});
40+
return droppedFollowers;
41+
}
42+
43+
function getIntermediateCommits(servers) {
44+
let intermediateCommits = {};
45+
servers.forEach((serverId) => {
46+
let endpoint = getEndpointById(serverId);
47+
intermediateCommits[serverId] = getMetric(endpoint, "arangodb_intermediate_commits_total");
48+
});
49+
return intermediateCommits;
50+
}
51+
3452
function transactionDroppedFollowersSuite() {
3553
'use strict';
3654
const cn = 'UnitTestsTransaction';
@@ -44,6 +62,48 @@ function transactionDroppedFollowersSuite() {
4462
tearDown: function () {
4563
db._drop(cn);
4664
},
65+
66+
testInsertSameFollower: function () {
67+
let c = db._create(cn, { numberOfShards: 40, replicationFactor: 3 });
68+
let docs = [];
69+
for (let i = 0; i < 1000; ++i) {
70+
docs.push({});
71+
}
72+
73+
let shards = db._collection(cn ).shards(true);
74+
let servers = shards[Object.keys(shards)[0]];
75+
76+
let droppedFollowersBefore = getDroppedFollowers(servers);
77+
78+
for (let i = 0; i < 50; ++i) {
79+
c.insert(docs);
80+
}
81+
82+
assertEqual(1000 * 50, c.count());
83+
84+
// follower must not have been dropped
85+
let droppedFollowersAfter = getDroppedFollowers(servers);
86+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
87+
},
88+
89+
testInsertAQLSameFollower: function () {
90+
let c = db._create(cn, { numberOfShards: 40, replicationFactor: 3 });
91+
92+
let shards = db._collection(cn ).shards(true);
93+
let servers = shards[Object.keys(shards)[0]];
94+
95+
let droppedFollowersBefore = getDroppedFollowers(servers);
96+
97+
for (let i = 0; i < 50; ++i) {
98+
db._query("FOR i IN 1..1000 INSERT {} INTO " + cn);
99+
}
100+
101+
assertEqual(1000 * 50, c.count());
102+
103+
// follower must not have been dropped
104+
let droppedFollowersAfter = getDroppedFollowers(servers);
105+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
106+
},
47107

48108
testTransactionWritesSameFollower: function () {
49109
let c = db._create(cn, { numberOfShards: 40, replicationFactor: 3 });
@@ -60,11 +120,7 @@ function transactionDroppedFollowersSuite() {
60120
let shards = db._collection(cn ).shards(true);
61121
let servers = shards[Object.keys(shards)[0]];
62122

63-
let droppedFollowers = {};
64-
servers.forEach((serverId) => {
65-
let endpoint = getEndpointById(serverId);
66-
droppedFollowers[serverId] = getMetric(endpoint, "arangodb_dropped_followers_total");
67-
});
123+
let droppedFollowersBefore = getDroppedFollowers(servers);
68124

69125
for (let i = 0; i < 50; ++i) {
70126
const trx = db._createTransaction(opts);
@@ -74,13 +130,11 @@ function transactionDroppedFollowersSuite() {
74130
assertEqual("committed", result.status);
75131
}
76132

77-
// follower must not have been dropped
78-
servers.forEach((serverId) => {
79-
let endpoint = getEndpointById(serverId);
80-
assertEqual(droppedFollowers[serverId], getMetric(endpoint, "arangodb_dropped_followers_total"));
81-
});
82-
83133
assertEqual(1000 * 50, c.count());
134+
135+
// follower must not have been dropped
136+
let droppedFollowersAfter = getDroppedFollowers(servers);
137+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
84138
},
85139

86140
testTransactionExclusiveSameFollower: function () {
@@ -98,11 +152,7 @@ function transactionDroppedFollowersSuite() {
98152
let shards = db._collection(cn ).shards(true);
99153
let servers = shards[Object.keys(shards)[0]];
100154

101-
let droppedFollowers = {};
102-
servers.forEach((serverId) => {
103-
let endpoint = getEndpointById(serverId);
104-
droppedFollowers[serverId] = getMetric(endpoint, "arangodb_dropped_followers_total");
105-
});
155+
let droppedFollowersBefore = getDroppedFollowers(servers);
106156

107157
for (let i = 0; i < 50; ++i) {
108158
const trx = db._createTransaction(opts);
@@ -112,15 +162,84 @@ function transactionDroppedFollowersSuite() {
112162
assertEqual("committed", result.status);
113163
}
114164

165+
assertEqual(1000 * 50, c.count());
166+
115167
// follower must not have been dropped
116-
servers.forEach((serverId) => {
117-
let endpoint = getEndpointById(serverId);
118-
assertEqual(droppedFollowers[serverId], getMetric(endpoint, "arangodb_dropped_followers_total"));
119-
});
168+
let droppedFollowersAfter = getDroppedFollowers(servers);
169+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
170+
},
171+
172+
testTransactionAbortsSameFollower: function () {
173+
let c = db._create(cn, { numberOfShards: 40, replicationFactor: 3 });
174+
let docs = [];
175+
for (let i = 0; i < 1000; ++i) {
176+
docs.push({});
177+
}
178+
const opts = {
179+
collections: {
180+
write: [ cn ]
181+
}
182+
};
183+
184+
let shards = db._collection(cn ).shards(true);
185+
let servers = shards[Object.keys(shards)[0]];
186+
187+
let droppedFollowersBefore = getDroppedFollowers(servers);
188+
189+
for (let i = 0; i < 50; ++i) {
190+
const trx = db._createTransaction(opts);
191+
const tc = trx.collection(cn);
192+
tc.insert(docs);
193+
let result = trx.abort();
194+
assertEqual("aborted", result.status);
195+
}
196+
197+
assertEqual(0, c.count());
120198

121-
assertEqual(1000 * 50, c.count());
199+
// follower must not have been dropped
200+
let droppedFollowersAfter = getDroppedFollowers(servers);
201+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
122202
},
123203

204+
testTransactionWritesSameFollowerIntermediateCommit: function () {
205+
let c = db._create(cn, { numberOfShards: 40, replicationFactor: 3 });
206+
let docs = [];
207+
for (let i = 0; i < 2000; ++i) {
208+
docs.push({});
209+
}
210+
const opts = {
211+
collections: {
212+
write: [ cn ]
213+
},
214+
intermediateCommitCount: 50
215+
};
216+
217+
let shards = db._collection(cn ).shards(true);
218+
let servers = shards[Object.keys(shards)[0]];
219+
220+
let droppedFollowersBefore = getDroppedFollowers(servers);
221+
let intermediateCommitsBefore = getIntermediateCommits(servers);
222+
223+
for (let i = 0; i < 10; ++i) {
224+
const trx = db._createTransaction(opts);
225+
const tc = trx.collection(cn);
226+
tc.insert(docs);
227+
let result = trx.commit();
228+
assertEqual("committed", result.status);
229+
}
230+
231+
assertEqual(2000 * 10, c.count());
232+
233+
// follower must not have been dropped
234+
let droppedFollowersAfter = getDroppedFollowers(servers);
235+
assertEqual(droppedFollowersBefore, droppedFollowersAfter);
236+
237+
let intermediateCommitsAfter = getIntermediateCommits(servers);
238+
239+
Object.keys(intermediateCommitsBefore).forEach((s) => {
240+
assertTrue(intermediateCommitsBefore[s] + 5 < intermediateCommitsAfter[s]);
241+
});
242+
},
124243
};
125244
}
126245

0 commit comments

Comments
 (0)
0