99 lines
2.2 KiB
JavaScript
99 lines
2.2 KiB
JavaScript
/* @flow */
|
|
/*eslint-env browser,jasmine */
|
|
|
|
/***
|
|
This is "just" a compilation of functions that help to test this library!
|
|
***/
|
|
|
|
|
|
// returns a random element of o
|
|
// works on Object, and Array
|
|
function getRandom (o) {
|
|
if (o instanceof Array) {
|
|
return o[Math.floor(Math.random() * o.length)];
|
|
} else if (o.constructor === Object) {
|
|
var ks = [];
|
|
for (var key in o) {
|
|
ks.push(key);
|
|
}
|
|
return o[getRandom(ks)];
|
|
}
|
|
}
|
|
function getRandomNumber(n) {//eslint-disable-line
|
|
if (n == null) {
|
|
n = 9999;
|
|
}
|
|
return Math.floor(Math.random() * n);
|
|
}
|
|
|
|
function applyRandomTransactions (users, objects, transactions, numberOfTransactions) {//eslint-disable-line
|
|
function randomTransaction (root) {
|
|
var f = getRandom(transactions);
|
|
f(root);
|
|
}
|
|
for(var i = 0; i < numberOfTransactions; i++) {
|
|
var r = Math.random();
|
|
if (r >= 0.9) {
|
|
// 10% chance to flush
|
|
users[0].connector.flushOne();
|
|
} else {
|
|
randomTransaction(getRandom(objects));
|
|
}
|
|
}
|
|
}
|
|
|
|
function compareAllUsers(users){//eslint-disable-line
|
|
var s1, s2;
|
|
function* t1(){
|
|
s1 = yield* this.getStateSet();
|
|
}
|
|
function* t2(){
|
|
s2 = yield* this.getStateSet();
|
|
}
|
|
users[0].connector.flushAll();
|
|
for (var uid = 0; uid + 1 < users.length; uid++) {
|
|
var u1 = users[uid];
|
|
var u2 = users[uid + 1];
|
|
u1.db.requestTransaction(t1);
|
|
u2.db.requestTransaction(t2);
|
|
expect(s1).toEqual(s2);
|
|
var db1 = [];
|
|
var db2 = [];
|
|
u1.db.os.iterate(null, null, function(o){//eslint-disable-line
|
|
db1.push(o);
|
|
});
|
|
u2.db.os.iterate(null, null, function(o){//eslint-disable-line
|
|
db2.push(o);
|
|
});
|
|
|
|
for (var key in db1) {
|
|
expect(db1[key]).toEqual(db2[key]);
|
|
}
|
|
}
|
|
}
|
|
|
|
function createUsers(self, numberOfUsers, done) {//eslint-disable-line
|
|
//destroy old users
|
|
for (var u in globalRoom.users) {//eslint-disable-line
|
|
globalRoom.users[u].y.destroy()//eslint-disable-line
|
|
}
|
|
self.users = [];
|
|
|
|
var promises = [];
|
|
for (var i = 0; i < numberOfUsers; i++) {
|
|
promises.push(Y({
|
|
db: {
|
|
name: "Memory"
|
|
},
|
|
connector: {
|
|
name: "Test",
|
|
debug: false
|
|
}
|
|
}));
|
|
}
|
|
Promise.all(promises).then( users => {
|
|
self.users = users;
|
|
done();
|
|
});
|
|
}
|