dl
Version:
DreamLab Libs
294 lines (251 loc) • 8.55 kB
JavaScript
var rewire = require('rewire');
var core = require('core');
//required libs
var Response = core.http.Response;
var Loader = core.http.Loader;
var JsonRpcResponse = core.jsonrpc.JsonRpcResponse;
var Event = core.event.Event;
var OpalLoader = require('../../lib/opal/OpalLoader.js').OpalLoader;
var OpalResponse = require('../../lib/opal/OpalResponse.js').OpalResponse;
describe("OpalCredentialsProvider", function () {
var MockOpalLoader;
var OpalCredentialsProvider;
var OpalCredentialsProviderMock;
//Example client
var ExampleCredentialClient = function (credentialsProvider) {
this.credentialsProvider = credentialsProvider;
//this.credentialsProvider.addEventListener(CredentialsProvider.Event.LOAD, this._onCredentialsLoad, this);
this._credentials = null;
}
ExampleCredentialClient.prototype._onCredentialsLoad = function (e) {
this._credentials = e.data;
//creating pool itd
};
ExampleCredentialClient.prototype.get = function (key, callback) {
//getting from pool itd
this.credentialsProvider.get(function (err, credentials) {
if (credentials) {
callback(credentials);
} else {
expect(false).toBeTruthy();
}
});
};
var load = function () {};
var exampleCredentialBase = {
"prop1": "credential",
"hosts": [{
"host": "10.177.10.20",
"port": "8080"
},{
"host": "10.177.60.60",
"port": "1234"
},{
"host": "10.177.10.20",
"port": "80"
}],
"abc": "123"
};
var exampleCredentialBaseSorted = {
"abc": "123",
"hosts": [{
"host": "10.177.10.20",
"port": "80"
},{
"host": "10.177.10.20",
"port": "8080"
},{
"host": "10.177.60.60",
"port": "1234"
}],
"prop1": "credential",
};
var exampleCredentialChanged = {
"bcd": "credential22",
"hosts": [{
"host": "10.177.30.30",
"port": "8080"
},{
"host": "10.177.30.20",
"port": "1234"
},{
"host": "10.177.30.10",
"port": "80"
}],
"abc": "123"
};
var exampleCredentialChangedSorted = {
"abc": "123",
"bcd": "credential22",
"hosts": [{
"host": "10.177.30.10",
"port": "80"
},{
"host": "10.177.30.20",
"port": "1234"
},{
"host": "10.177.30.30",
"port": "8080"
}]
};
beforeEach(function () {
OpalCredentialsProviderMock = rewire('../../lib/opal/OpalCredentialsProvider.js');
OpalCredentialsProvider = OpalCredentialsProviderMock.OpalCredentialsProvider;
OpalLoaderMock = OpalCredentialsProviderMock.__get__('OpalLoader');
spyOn(OpalLoaderMock.prototype, 'load').andCallFake(function () {
load(this);
});
//require actualy tested class
OpalCredentialsProvider.DEFAULT_REFRESH_TIME = 100;
expect(OpalCredentialsProvider).not.toBeNull();
});
it("credentials supplier problems / retrieving error but with stale credetnials / provider usage", function () {
var done = false;
load = function (that) {
setTimeout(function () {
var response = new OpalResponse({
"statusCode": 200,
"headers": {},
"httpVersion": "1.0",
"body": new JsonRpcResponse("test", exampleCredentialBase)
});
that.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, response));
}, 1);
};
var provider = new OpalCredentialsProvider(
"include-cache.membase.edgeserver.onetapi.pl",
"edgeserver.edgeserver.onetapi.pl"
);
provider.get(function (err, credentials) {
expect(err).toBeFalsy();
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialBaseSorted));
done = true;
});
waitsFor(function () {
return done == true;
});
runs(function () {
done = false;
load = function (that) {
setTimeout(function () {
var response = new Response({
"statusCode": 503,
"headers": {},
"httpVersion": "1.0",
"body": ""
});
that.dispatchEvent(new Event(Loader.Event.ERROR, response));
}, 1);
};
provider.refresh();
provider.get(function (err, credentials) {
expect(err).toBeTruthy();
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialBaseSorted));
done = true;
});
});
waitsFor(function () {
return done == true;
});
runs(function () {
provider.destroy();
});
});
it("standard provider-client usage", function () {
var done = false;
load = function (that) {
setTimeout(function () {
var response = new OpalResponse({
"statusCode": 200,
"headers": {},
"httpVersion": "1.0",
"body": new JsonRpcResponse("test", exampleCredentialBase)
});
that.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, response));
}, 1);
};
var provider = new OpalCredentialsProvider(
"include-cache.membase.edgeserver.onetapi.pl",
"edgeserver.edgeserver.onetapi.pl"
);
var exampleClient = new ExampleCredentialClient(provider);
exampleClient.get("test", function (credentials) {
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialBaseSorted));
done = true;
});
waitsFor(function () {
return done == true;
});
runs(function () {
provider.destroy();
});
});
it("provider-client usage - changed credentials", function () {
var done = false;
var response1 = new OpalResponse({
"statusCode": 200,
"headers": {},
"httpVersion": "1.0",
"body": new JsonRpcResponse("test", exampleCredentialBase)
});
var response2 = new OpalResponse({
"statusCode": 200,
"headers": {},
"httpVersion": "1.0",
"body": new JsonRpcResponse("test", exampleCredentialChanged)
});
load = function (that) {
setTimeout(function () {
that.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, response1));
}, 1);
};
//MockOpalLoader.prototype.load = function () {};
var provider = new OpalCredentialsProvider(
"example2",
"example2"
);
provider.refreshTime = 100;
var exampleClient = new ExampleCredentialClient(provider);
runs(function () {
done = false;
exampleClient.get("test", function (credentials) {
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialBaseSorted));
done = true;
});
});
waitsFor(function () {
return done == true;
});
runs(function () {
done = false;
exampleClient.get("test", function (credentials) {
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialBaseSorted));
done = true;
});
});
waitsFor(function () {
return done == true;
});
runs(function () {
done = false;
load = function (that) {
setTimeout(function () {
that.dispatchEvent(new Event(OpalLoader.Event.JSON_RESPONSE, response2));
}, 1);
};
});
waits(200);
runs(function () {
exampleClient.get("test", function (credentials) {
expect(JSON.stringify(credentials)).toEqual(JSON.stringify(exampleCredentialChangedSorted));
done = true;
});
});
waitsFor(function () {
return done == true;
});
runs(function () {
provider.destroy();
});
});
});