Added unit tests for session_keepalive / heartbeat

This commit is contained in:
Vincent Petry 2014-02-04 13:56:41 +01:00
parent 912da8d277
commit e75f7e58e9
2 changed files with 91 additions and 1 deletions

View File

@ -19,6 +19,8 @@
*
*/
/* global OC */
/**
* Simulate the variables that are normally set by PHP code
*/
@ -57,10 +59,15 @@ window.oc_webroot = location.href + '/';
window.oc_appswebroots = {
"files": window.oc_webroot + '/apps/files/'
};
window.oc_config = {
session_lifetime: 600 * 1000,
session_keepalive: false
};
// global setup for all tests
(function setupTests() {
var fakeServer = null;
var fakeServer = null,
routesRequestStub;
beforeEach(function() {
// enforce fake XHR, tests should not depend on the server and
@ -78,9 +85,18 @@ window.oc_appswebroots = {
// make it globally available, so that other tests can define
// custom responses
window.fakeServer = fakeServer;
OC.Router.routes = [];
OC.Router.routes_request = {
state: sinon.stub().returns('resolved'),
done: sinon.stub()
};
});
afterEach(function() {
OC.Router.routes_request.state.reset();
OC.Router.routes_request.done.reset();
// uncomment this to log requests
// console.log(window.fakeServer.requests);
fakeServer.restore();

View File

@ -104,4 +104,78 @@ describe('Core base tests', function() {
})).toEqual('number=123');
});
});
describe('Session heartbeat', function() {
var clock,
oldConfig,
loadedStub,
routeStub,
counter;
beforeEach(function() {
clock = sinon.useFakeTimers();
oldConfig = window.oc_config;
loadedStub = sinon.stub(OC.Router, 'registerLoadedCallback');
routeStub = sinon.stub(OC.Router, 'generate').returns('/heartbeat');
counter = 0;
fakeServer.autoRespond = true;
fakeServer.autoRespondAfter = 0;
fakeServer.respondWith(/\/heartbeat/, function(xhr) {
counter++;
xhr.respond(200, {'Content-Type': 'application/json'}, '{}');
});
});
afterEach(function() {
clock.restore();
window.oc_config = oldConfig;
loadedStub.restore();
routeStub.restore();
});
it('sends heartbeat half the session lifetime when heartbeat enabled', function() {
window.oc_config = {
session_keepalive: true,
session_lifetime: 300
};
window.initCore();
expect(loadedStub.calledOnce).toEqual(true);
loadedStub.yield();
expect(routeStub.calledWith('heartbeat')).toEqual(true);
expect(counter).toEqual(0);
// less than half, still nothing
clock.tick(100 * 1000);
expect(counter).toEqual(0);
// reach past half (160), one call
clock.tick(55 * 1000);
expect(counter).toEqual(1);
// almost there to the next, still one
clock.tick(140 * 1000);
expect(counter).toEqual(1);
// past it, second call
clock.tick(20 * 1000);
expect(counter).toEqual(2);
});
it('does no send heartbeat when heartbeat disabled', function() {
window.oc_config = {
session_keepalive: false,
session_lifetime: 300
};
window.initCore();
expect(loadedStub.notCalled).toEqual(true);
expect(routeStub.notCalled).toEqual(true);
expect(counter).toEqual(0);
clock.tick(1000000);
// still nothing
expect(counter).toEqual(0);
});
});
});