Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Attempts to deflakify the joining test #4313

Merged
merged 4 commits into from Jun 15, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 7 additions & 5 deletions test/app-tests/joining.js
Expand Up @@ -68,7 +68,7 @@ describe('joining a room', function () {
}
});

it('should not get stuck at a spinner', function(done) {
it('should not get stuck at a spinner', function() {
var ROOM_ALIAS = '#alias:localhost';
var ROOM_ID = '!id:localhost';

Expand Down Expand Up @@ -119,8 +119,8 @@ describe('joining a room', function () {
httpBackend.when('POST', '/publicRooms').respond(200, {chunk: []});
httpBackend.when('GET', '/thirdparty/protocols').respond(200, {});
return q.all([
httpBackend.flush('/publicRooms'),
httpBackend.flush('/thirdparty/protocols'),
httpBackend.flush('/publicRooms'),
]);
}).then(() => {
var roomDir = ReactTestUtils.findRenderedComponentWithType(
Expand All @@ -140,12 +140,14 @@ describe('joining a room', function () {
.respond(401, {errcode: 'M_GUEST_ACCESS_FORBIDDEN'});

return q.all([
httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS)),
httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync"),
httpBackend.flush('/directory/room/'+encodeURIComponent(ROOM_ALIAS), 1, 200),
httpBackend.flush('/rooms/'+encodeURIComponent(ROOM_ID)+"/initialSync", 1, 200),
]);
}).then(() => {
httpBackend.verifyNoOutstandingExpectation();

return q.delay(1);
}).then(() => {
// we should now have a roomview, with a preview bar
roomView = ReactTestUtils.findRenderedComponentWithType(
matrixChat, RoomView);
Expand Down Expand Up @@ -208,7 +210,7 @@ describe('joining a room', function () {
}).then(() => {
// now the room should have loaded
expect(roomView.state.room).toExist();
}).done(done, done);
});
});
});
});
45 changes: 21 additions & 24 deletions test/mock-request.js
Expand Up @@ -13,7 +13,7 @@ function HttpBackend() {
// the request function dependency that the SDK needs.
this.requestFn = function(opts, callback) {
const req = new Request(opts, callback);
console.log("HTTP backend received request: " + req);
console.log(`${Date.now()} HTTP backend received request: ${req}`);
self.requests.push(req);

const abort = function() {
Expand All @@ -37,7 +37,7 @@ HttpBackend.prototype = {
* @param {string} path The path to flush (optional) default: all.
* @param {integer} numToFlush The number of things to flush (optional), default: all.
* @param {integer=} waitTime The time (in ms) to wait for a request to happen.
* default: 5
* default: 100
*
* @return {Promise} resolves when there is nothing left to flush, with the
* number of requests flushed
Expand All @@ -46,49 +46,46 @@ HttpBackend.prototype = {
const defer = q.defer();
const self = this;
let flushed = 0;
let triedWaiting = false;
if (waitTime === undefined) {
waitTime = 5;
waitTime = 100;
}
console.log(
"HTTP backend flushing... (path=" + path

function log(msg) {
console.log(`${Date.now()} flush[${path || ''}]: ${msg}`);
}

log("HTTP backend flushing... (path=" + path
+ " numToFlush=" + numToFlush
+ " waitTime=" + waitTime
+ ")",
);
const endTime = waitTime + Date.now();

const tryFlush = function() {
// if there's more real requests and more expected requests, flush 'em.
console.log(
" trying to flush queue => reqs=[" + self.requests
+ "] expected=[" + self.expectedRequests
+ "]",
log(` trying to flush => reqs=[${self.requests}] ` +
`expected=[${self.expectedRequests}]`,
);
if (self._takeFromQueue(path)) {
// try again on the next tick.
flushed += 1;
if (numToFlush && flushed === numToFlush) {
console.log(" Flushed assigned amount:", numToFlush);
log(`Flushed assigned amount: ${numToFlush}`);
defer.resolve(flushed);
} else {
console.log(" flushed. Trying for more.");
log(` flushed. Trying for more.`);
setTimeout(tryFlush, 0);
}
} else if (flushed === 0 && !triedWaiting) {
} else if (flushed === 0 && Date.now() < endTime) {
// we may not have made the request yet, wait a generous amount of
// time before giving up.
console.log(
" nothing to flush yet; waiting " + waitTime +
"ms for requests.")
setTimeout(tryFlush, waitTime);
triedWaiting = true;
log(` nothing to flush yet; waiting for requests.`);
setTimeout(tryFlush, 5);
} else {
if (flushed === 0) {
console.log(" nothing to flush; giving up");
log("nothing to flush; giving up");
} else {
console.log(
" no more flushes after flushing", flushed,
"requests",
);
log(`no more flushes after flushing ${flushed} requests`);
}
defer.resolve(flushed);
}
Expand Down Expand Up @@ -138,7 +135,7 @@ HttpBackend.prototype = {
matchingReq.checks[j](req);
}
testResponse = matchingReq.response;
console.log(" responding to %s", matchingReq.path);
console.log(`${Date.now()} responding to ${matchingReq.path}`);
let body = testResponse.body;
if (Object.prototype.toString.call(body) == "[object Function]") {
body = body(req.path, req.data);
Expand Down