Fix unhandled error exception thrown by Bluebirds in tests
parent
e93b98c1ec
commit
e3e1235755
|
@ -70,7 +70,7 @@
|
||||||
"@types/request": "^2.0.5",
|
"@types/request": "^2.0.5",
|
||||||
"@types/request-promise": "^4.1.38",
|
"@types/request-promise": "^4.1.38",
|
||||||
"@types/selenium-webdriver": "^3.0.4",
|
"@types/selenium-webdriver": "^3.0.4",
|
||||||
"@types/sinon": "^2.2.1",
|
"@types/sinon": "^2.3.7",
|
||||||
"@types/tmp": "0.0.33",
|
"@types/tmp": "0.0.33",
|
||||||
"@types/winston": "^2.3.2",
|
"@types/winston": "^2.3.2",
|
||||||
"@types/yamljs": "^0.2.30",
|
"@types/yamljs": "^0.2.30",
|
||||||
|
@ -101,8 +101,7 @@
|
||||||
"request-promise": "^4.2.2",
|
"request-promise": "^4.2.2",
|
||||||
"selenium-webdriver": "^3.5.0",
|
"selenium-webdriver": "^3.5.0",
|
||||||
"should": "^11.1.1",
|
"should": "^11.1.1",
|
||||||
"sinon": "^2.3.8",
|
"sinon": "^4.0.2",
|
||||||
"sinon-promise": "^0.1.3",
|
|
||||||
"tmp": "0.0.31",
|
"tmp": "0.0.31",
|
||||||
"ts-node": "^3.3.0",
|
"ts-node": "^3.3.0",
|
||||||
"tslint": "^5.2.0",
|
"tslint": "^5.2.0",
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
import BluebirdPromise = require("bluebird");
|
|
||||||
import exceptions = require("../Exceptions");
|
|
||||||
import ldapjs = require("ldapjs");
|
|
||||||
import { IClient } from "./IClient";
|
|
||||||
|
|
||||||
import { IClientFactory } from "./IClientFactory";
|
|
||||||
import { IGroupsRetriever } from "./IGroupsRetriever";
|
|
||||||
import { LdapConfiguration } from "../configuration/Configuration";
|
|
||||||
|
|
||||||
|
|
||||||
export class GroupsRetriever implements IGroupsRetriever {
|
|
||||||
private options: LdapConfiguration;
|
|
||||||
private clientFactory: IClientFactory;
|
|
||||||
|
|
||||||
constructor(options: LdapConfiguration, clientFactory: IClientFactory) {
|
|
||||||
this.options = options;
|
|
||||||
this.clientFactory = clientFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
retrieve(username: string, client?: IClient): BluebirdPromise<string[]> {
|
|
||||||
client = this.clientFactory.create(this.options.user, this.options.password);
|
|
||||||
let groups: string[];
|
|
||||||
|
|
||||||
return client.open()
|
|
||||||
.then(function () {
|
|
||||||
return client.searchGroups(username);
|
|
||||||
})
|
|
||||||
.then(function (groups_: string[]) {
|
|
||||||
groups = groups_;
|
|
||||||
return client.close();
|
|
||||||
})
|
|
||||||
.then(function () {
|
|
||||||
return BluebirdPromise.resolve(groups);
|
|
||||||
})
|
|
||||||
.catch(function (err: Error) {
|
|
||||||
return BluebirdPromise.reject(new exceptions.LdapError("Failed during groups retrieval: " + err.message));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
import BluebirdPromise = require("bluebird");
|
|
||||||
import { IClient } from "./IClient";
|
|
||||||
|
|
||||||
export interface IGroupsRetriever {
|
|
||||||
retrieve(username: string): BluebirdPromise<string[]>;
|
|
||||||
}
|
|
|
@ -17,8 +17,10 @@ export class PasswordUpdater implements IPasswordUpdater {
|
||||||
this.clientFactory = clientFactory;
|
this.clientFactory = clientFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePassword(username: string, newPassword: string): BluebirdPromise<void> {
|
updatePassword(username: string, newPassword: string)
|
||||||
const adminClient = this.clientFactory.create(this.options.user, this.options.password);
|
: BluebirdPromise<void> {
|
||||||
|
const adminClient = this.clientFactory.create(this.options.user,
|
||||||
|
this.options.password);
|
||||||
|
|
||||||
return adminClient.open()
|
return adminClient.open()
|
||||||
.then(function () {
|
.then(function () {
|
||||||
|
@ -27,8 +29,10 @@ export class PasswordUpdater implements IPasswordUpdater {
|
||||||
.then(function () {
|
.then(function () {
|
||||||
return adminClient.close();
|
return adminClient.close();
|
||||||
})
|
})
|
||||||
.error(function (err: Error) {
|
.catch(function (err: Error) {
|
||||||
return BluebirdPromise.reject(new exceptions.LdapError("Failed during password update: " + err.message));
|
return BluebirdPromise.reject(
|
||||||
|
new exceptions.LdapError(
|
||||||
|
"Error while updating password: " + err.message));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,11 +87,13 @@ describe("test ldap authentication", function () {
|
||||||
.returns(BluebirdPromise.resolve("cn=" + USERNAME + ",ou=users,dc=example,dc=com"));
|
.returns(BluebirdPromise.resolve("cn=" + USERNAME + ",ou=users,dc=example,dc=com"));
|
||||||
|
|
||||||
// user connects successfully
|
// user connects successfully
|
||||||
userClientStub.openStub.returns(BluebirdPromise.reject(new Error("Error while binding")));
|
userClientStub.openStub.rejects(new Error("Error while binding"));
|
||||||
userClientStub.closeStub.returns(BluebirdPromise.resolve());
|
userClientStub.closeStub.returns(BluebirdPromise.resolve());
|
||||||
|
|
||||||
return authenticator.authenticate(USERNAME, PASSWORD)
|
return authenticator.authenticate(USERNAME, PASSWORD)
|
||||||
.then(function () { return BluebirdPromise.reject("Should not be here!"); })
|
.then(function () {
|
||||||
|
return BluebirdPromise.reject("Should not be here!");
|
||||||
|
})
|
||||||
.catch(function () {
|
.catch(function () {
|
||||||
return BluebirdPromise.resolve();
|
return BluebirdPromise.resolve();
|
||||||
});
|
});
|
||||||
|
@ -118,10 +120,12 @@ describe("test ldap authentication", function () {
|
||||||
adminClientStub.searchEmailsStub.returns(BluebirdPromise.resolve(["group1"]));
|
adminClientStub.searchEmailsStub.returns(BluebirdPromise.resolve(["group1"]));
|
||||||
// admin retrieves emails and groups of user
|
// admin retrieves emails and groups of user
|
||||||
adminClientStub.searchGroupsStub
|
adminClientStub.searchGroupsStub
|
||||||
.returns(BluebirdPromise.reject(new Error("Error while retrieving emails and groups")));
|
.rejects(new Error("Error while retrieving emails and groups"));
|
||||||
|
|
||||||
return authenticator.authenticate(USERNAME, PASSWORD)
|
return authenticator.authenticate(USERNAME, PASSWORD)
|
||||||
.then(function () { return BluebirdPromise.reject("Should not be here!"); })
|
.then(function () {
|
||||||
|
return BluebirdPromise.reject("Should not be here!");
|
||||||
|
})
|
||||||
.catch(function () {
|
.catch(function () {
|
||||||
return BluebirdPromise.resolve();
|
return BluebirdPromise.resolve();
|
||||||
});
|
});
|
||||||
|
|
|
@ -56,20 +56,25 @@ describe("test emails retriever", function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("failure", function () {
|
describe("failure", function () {
|
||||||
it("should fail retrieving emails when search operation fails", function () {
|
it("should fail retrieving emails when search operation fails",
|
||||||
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
function () {
|
||||||
.returns(adminClientStub);
|
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
||||||
|
.returns(adminClientStub);
|
||||||
|
|
||||||
// admin connects successfully
|
// admin connects successfully
|
||||||
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
||||||
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
||||||
|
|
||||||
adminClientStub.searchEmailsStub.withArgs(USERNAME)
|
adminClientStub.searchEmailsStub.withArgs(USERNAME)
|
||||||
.returns(BluebirdPromise.reject(new Error("Error while searching emails")));
|
.rejects(new Error("Error while searching emails"));
|
||||||
|
|
||||||
return emailsRetriever.retrieve(USERNAME)
|
return emailsRetriever.retrieve(USERNAME)
|
||||||
.then(function () { return BluebirdPromise.reject(new Error("Should not be here")); })
|
.then(function () {
|
||||||
.catch(function () { return BluebirdPromise.resolve(); });
|
return BluebirdPromise.reject(new Error("Should not be here"));
|
||||||
});
|
})
|
||||||
|
.catch(function () {
|
||||||
|
return BluebirdPromise.resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -1,75 +0,0 @@
|
||||||
|
|
||||||
import { GroupsRetriever } from "../../src/lib/ldap/GroupsRetriever";
|
|
||||||
import { LdapConfiguration } from "../../src/lib/configuration/Configuration";
|
|
||||||
|
|
||||||
import Sinon = require("sinon");
|
|
||||||
import BluebirdPromise = require("bluebird");
|
|
||||||
import Assert = require("assert");
|
|
||||||
|
|
||||||
import { ClientFactoryStub } from "../mocks/ldap/ClientFactoryStub";
|
|
||||||
import { ClientStub } from "../mocks/ldap/ClientStub";
|
|
||||||
|
|
||||||
describe("test groups retriever", function () {
|
|
||||||
const USERNAME = "username";
|
|
||||||
const ADMIN_USER_DN = "cn=admin,dc=example,dc=com";
|
|
||||||
const ADMIN_PASSWORD = "password";
|
|
||||||
|
|
||||||
let clientFactoryStub: ClientFactoryStub;
|
|
||||||
let adminClientStub: ClientStub;
|
|
||||||
|
|
||||||
let groupsRetriever: GroupsRetriever;
|
|
||||||
let ldapConfig: LdapConfiguration;
|
|
||||||
|
|
||||||
beforeEach(function () {
|
|
||||||
clientFactoryStub = new ClientFactoryStub();
|
|
||||||
adminClientStub = new ClientStub();
|
|
||||||
|
|
||||||
ldapConfig = {
|
|
||||||
url: "http://ldap",
|
|
||||||
user: ADMIN_USER_DN,
|
|
||||||
password: ADMIN_PASSWORD,
|
|
||||||
users_dn: "ou=users,dc=example,dc=com",
|
|
||||||
groups_dn: "ou=groups,dc=example,dc=com",
|
|
||||||
group_name_attribute: "cn",
|
|
||||||
groups_filter: "member=cn={0},ou=users,dc=example,dc=com",
|
|
||||||
mail_attribute: "mail",
|
|
||||||
users_filter: "cn={0}"
|
|
||||||
};
|
|
||||||
|
|
||||||
groupsRetriever = new GroupsRetriever(ldapConfig, clientFactoryStub);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("success", function () {
|
|
||||||
it("should retrieve groups successfully", function () {
|
|
||||||
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
|
||||||
.returns(adminClientStub);
|
|
||||||
|
|
||||||
// admin connects successfully
|
|
||||||
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
|
||||||
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
|
||||||
|
|
||||||
adminClientStub.searchGroupsStub.withArgs(USERNAME)
|
|
||||||
.returns(BluebirdPromise.resolve(["user@example.com"]));
|
|
||||||
|
|
||||||
return groupsRetriever.retrieve(USERNAME);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe("failure", function () {
|
|
||||||
it("should fail retrieving groups when search operation fails", function () {
|
|
||||||
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
|
||||||
.returns(adminClientStub);
|
|
||||||
|
|
||||||
// admin connects successfully
|
|
||||||
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
|
||||||
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
|
||||||
|
|
||||||
adminClientStub.searchGroupsStub.withArgs(USERNAME)
|
|
||||||
.returns(BluebirdPromise.reject(new Error("Error while searching groups")));
|
|
||||||
|
|
||||||
return groupsRetriever.retrieve(USERNAME)
|
|
||||||
.then(function () { return BluebirdPromise.reject(new Error("Should not be here")); })
|
|
||||||
.catch(function () { return BluebirdPromise.resolve(); });
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -37,6 +37,9 @@ describe("test password update", function () {
|
||||||
};
|
};
|
||||||
|
|
||||||
ssha512HashGenerator = Sinon.stub(HashGenerator, "ssha512");
|
ssha512HashGenerator = Sinon.stub(HashGenerator, "ssha512");
|
||||||
|
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
||||||
|
.returns(adminClientStub);
|
||||||
|
|
||||||
passwordUpdater = new PasswordUpdater(ldapConfig, clientFactoryStub);
|
passwordUpdater = new PasswordUpdater(ldapConfig, clientFactoryStub);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -46,11 +49,10 @@ describe("test password update", function () {
|
||||||
|
|
||||||
describe("success", function () {
|
describe("success", function () {
|
||||||
it("should update the password successfully", function () {
|
it("should update the password successfully", function () {
|
||||||
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
ssha512HashGenerator
|
||||||
.returns(adminClientStub);
|
.returns("{CRYPT}$6$abcdefghijklm$AQmxaKfobGY9HSQa6aDYkAWOgPGNhGYn");
|
||||||
|
adminClientStub.modifyPasswordStub.withArgs(USERNAME, NEW_PASSWORD)
|
||||||
ssha512HashGenerator.returns("{CRYPT}$6$abcdefghijklm$AQmxaKfobGY9HSQa6aDYkAWOgPGNhGYn");
|
.returns(BluebirdPromise.resolve());
|
||||||
adminClientStub.modifyPasswordStub.withArgs(USERNAME, NEW_PASSWORD).returns(BluebirdPromise.resolve());
|
|
||||||
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
||||||
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
||||||
|
|
||||||
|
@ -59,19 +61,22 @@ describe("test password update", function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("failure", function () {
|
describe("failure", function () {
|
||||||
it("should fail updating password when modify operation fails", function () {
|
it("should fail updating password when modify operation fails",
|
||||||
clientFactoryStub.createStub.withArgs(ADMIN_USER_DN, ADMIN_PASSWORD)
|
function () {
|
||||||
.returns(adminClientStub);
|
ssha512HashGenerator
|
||||||
|
.returns("{CRYPT}$6$abcdefghijklm$AQmxaKfobGY9HSQa6aDYkAWOgPGNhGYn");
|
||||||
|
adminClientStub.modifyPasswordStub.withArgs(USERNAME, NEW_PASSWORD)
|
||||||
|
.rejects(new Error("Error while updating password"));
|
||||||
|
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
||||||
|
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
||||||
|
|
||||||
ssha512HashGenerator.returns("{CRYPT}$6$abcdefghijklm$AQmxaKfobGY9HSQa6aDYkAWOgPGNhGYn");
|
return passwordUpdater.updatePassword(USERNAME, NEW_PASSWORD)
|
||||||
adminClientStub.modifyPasswordStub.withArgs(USERNAME, NEW_PASSWORD)
|
.then(function () {
|
||||||
.returns(BluebirdPromise.reject(new Error("Error while updating password")));
|
return BluebirdPromise.reject(new Error("should not be here"));
|
||||||
adminClientStub.openStub.returns(BluebirdPromise.resolve());
|
})
|
||||||
adminClientStub.closeStub.returns(BluebirdPromise.resolve());
|
.catch(function(err: Error) {
|
||||||
|
return BluebirdPromise.resolve();
|
||||||
return passwordUpdater.updatePassword(USERNAME, NEW_PASSWORD)
|
});
|
||||||
.then(function () { return BluebirdPromise.reject(new Error("should not be here")); })
|
});
|
||||||
.catch(function () { return BluebirdPromise.resolve(); });
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
Loading…
Reference in New Issue