splunk-sdk
Version:
SDK for usage with the Splunk REST API
433 lines (408 loc) • 25 kB
JavaScript
exports.setup = function (svc) {
var assert = require('chai').assert;
var splunkjs = require('../../index');
var options = require('../cmdline');
var parser = new options.create();
var cmdline = parser.parse(process.argv);
var idCounter = 0;
var getNextId = function () {
return "id" + (idCounter++) + "_" + ((new Date()).valueOf());
};
return (
describe("Storage Password Tests", () => {
beforeEach(function () {
this.service = svc;
});
it("Create", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create with backslashes", async function () {
let startcount = -1;
let name = "\\delete-me-" + getNextId();
let realm = "\\delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual("\\" + realm + ":\\" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create with slashes", async function () {
let startcount = -1;
let name = "/delete-me-" + getNextId();
let realm = "/delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create without realm", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual("", storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create should fail without user, or realm", async function () {
var that = this;
let storagePasswords = that.service.storagePasswords().fetch();
try {
let res = await storagePasswords.create({ name: null, password: "changed!" });
assert.ok(!res);
} catch (error) {
assert.ok(error);
}
})
it("Create should fail without password", async function () {
var that = this;
let storagePasswords = that.service.storagePasswords().fetch();
try {
let res = await storagePasswords.create({ name: "something", password: null });
assert.ok(!res);
} catch (error) {
assert.ok(error);
}
})
it("Create should fail without user, realm, or password", async function () {
var that = this;
let storagePasswords = that.service.storagePasswords().fetch();
try {
let res = await storagePasswords.create({ name: null, password: null });
assert.ok(!res);
} catch (error) {
assert.ok(error);
}
})
it("Create should fail if app or owner have wildcard", async function () {
var service = new splunkjs.Service({
scheme: cmdline.opts.scheme,
host: cmdline.opts.host,
port: cmdline.opts.port,
username: cmdline.opts.username,
password: cmdline.opts.password,
version: cmdline.opts.version,
app:'-',
owner:'-'
});
var storagePasswords = service.storagePasswords();
assert.throws(function (){
storagePasswords.create({ name: "delete-me-" + getNextId(), password: 'changed!' })
});
})
it("Create with colons", async function () {
let startcount = -1;
let name = ":delete-me-" + getNextId();
let realm = ":delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual("\\" + realm + ":\\" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create crazy", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({
name: name + ":end!@#$%^&*()_+{}:|<>?",
realm: ":start::!@#$%^&*()_+{}:|<>?" + realm,
password: "changed!"
});
assert.strictEqual(name + ":end!@#$%^&*()_+{}:|<>?", storagePassword.properties().username);
assert.strictEqual("\\:start\\:\\:!@#$%^&*()_+{}\\:|<>?" + realm + ":" + name + "\\:end!@#$%^&*()_+{}\\:|<>?:", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(":start::!@#$%^&*()_+{}:|<>?" + realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create with unicode chars", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({
name: name + ":end!@#$%^&*()_+{}:|<>?쎼 and 쎶 and <&> für",
realm: ":start::!@#$%^&*()_+{}:|<>?" + encodeURIComponent("쎼 and 쎶 and <&> für") + realm,
password: decodeURIComponent(encodeURIComponent("쎼 and 쎶 and <&> für"))
});
assert.strictEqual(name + ":end!@#$%^&*()_+{}:|<>?쎼 and 쎶 and <&> für", storagePassword.properties().username);
assert.strictEqual("\\:start\\:\\:!@#$%^&*()_+{}\\:|<>?" + encodeURIComponent("쎼 and 쎶 and <&> für") + realm + ":" + name + "\\:end!@#$%^&*()_+{}\\:|<>?쎼 and 쎶 and <&> für:", storagePassword.name);
assert.strictEqual(decodeURIComponent(encodeURIComponent("쎼 and 쎶 and <&> für")), storagePassword.properties().clear_password);
assert.strictEqual(":start::!@#$%^&*()_+{}:|<>?" + encodeURIComponent("쎼 and 쎶 and <&> für") + realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Create Or Replace StoragePassword", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePasswordOld = await storagePasswords.createOrReplace({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePasswordOld.properties().username);
let storagePassword = await storagePasswords.createOrReplace({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
})
it("Read", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.ok(!!storagePasswords.item(realm + ":" + name + ":"));
let list = storagePasswords.list();
let found = false;
assert.strictEqual(startcount + 1, list.length);
for (let i = 0; i < list.length; i++) {
if (realm + ":" + name + ":" === list[i].name) {
found = true;
}
}
assert.ok(found);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
it("Read with slashes", async function () {
let startcount = -1;
let name = "/delete-me-" + getNextId();
let realm = "/delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.ok(!!storagePasswords.item(realm + ":" + name + ":"));
let list = storagePasswords.list();
let found = false;
assert.strictEqual(startcount + 1, list.length);
for (let i = 0; i < list.length; i++) {
if (realm + ":" + name + ":" === list[i].name) {
found = true;
}
}
assert.ok(found);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
// Disabling this test because clear_password field has been removed in Splunk 8.2
//
//
// it("Callback#Update": function(done) {
// var startcount = -1;
// var name = "delete-me-" + getNextId();
// var realm = "delete-me-" + getNextId();
// var that = this;
// Async.chain([
// function(done) {
// that.service.storagePasswords().fetch(done);
// },
// function(storagePasswords, done) {
// startcount = storagePasswords.list().length;
// storagePasswords.create({name: name, realm: realm, password: "changed!"}, done);
// },
// function(storagePassword, done) {
// assert.strictEqual(name, storagePassword.properties().username);
// assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
// assert.strictEqual("changed!", storagePassword.properties().clear_password);
// assert.strictEqual(realm, storagePassword.properties().realm);
// that.service.storagePasswords().fetch(Async.augment(done, storagePassword));
// },
// function(storagePasswords, storagePassword, done) {
// assert.strictEqual(startcount + 1, storagePasswords.list().length);
// storagePassword.update({password: "changed"}, done);
// },
// function(storagePassword, done) {
// assert.strictEqual(name, storagePassword.properties().username);
// assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
// assert.strictEqual("changed", storagePassword.properties().clear_password);
// assert.strictEqual(realm, storagePassword.properties().realm);
// that.service.storagePasswords().fetch(done);
// },
// function(storagePasswords, done) {
// var list = storagePasswords.list();
// var found = false;
// var index = -1;
// assert.strictEqual(startcount + 1, list.length);
// for (var i = 0; i < list.length; i ++) {
// if (realm + ":" + name + ":" === list[i].name) {
// found = true;
// index = i;
// assert.strictEqual(name, list[i].properties().username);
// assert.strictEqual(realm + ":" + name + ":", list[i].name);
// assert.strictEqual("changed", list[i].properties().clear_password);
// assert.strictEqual(realm, list[i].properties().realm);
// }
// }
// assert.ok(found);
// if (!found) {
// done(new Error("Didn't find the created password"));
// }
// else {
// list[index].remove(done);
// }
// },
// function(done) {
// that.service.storagePasswords().fetch(done);
// },
// function(storagePasswords, done) {
// assert.strictEqual(startcount, storagePasswords.list().length);
// done();
// }
// ],
// function(err) {
// assert.ok(!err);
// done();
// }
// );
// },
it("Delete", async function () {
let startcount = -1;
let name = "delete-me-" + getNextId();
let realm = "delete-me-" + getNextId();
var that = this;
let storagePasswords = await that.service.storagePasswords().fetch();
startcount = storagePasswords.list().length;
let storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
assert.strictEqual(realm + ":" + name + ":", storagePassword.name);
assert.strictEqual("changed!", storagePassword.properties().clear_password);
assert.strictEqual(realm, storagePassword.properties().realm);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
await storagePassword.remove();
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
storagePassword = await storagePasswords.create({ name: name, realm: realm, password: "changed!" });
assert.strictEqual(name, storagePassword.properties().username);
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount + 1, storagePasswords.list().length);
let list = storagePasswords.list();
let found = false;
let index = -1;
assert.strictEqual(startcount + 1, list.length);
for (let i = 0; i < list.length; i++) {
if (realm + ":" + name + ":" === list[i].name) {
found = true;
index = i;
assert.strictEqual(name, list[i].properties().username);
assert.strictEqual(realm + ":" + name + ":", list[i].name);
assert.strictEqual("changed!", list[i].properties().clear_password);
assert.strictEqual(realm, list[i].properties().realm);
}
}
assert.ok(found);
if (!found) {
throw new Error("Didn't find the created password");
}
else {
await list[index].remove();
}
storagePasswords = await that.service.storagePasswords().fetch();
assert.strictEqual(startcount, storagePasswords.list().length);
})
})
);
};
if (module.id === __filename && module.parent.id.includes('mocha')) {
var splunkjs = require('../../index');
var options = require('../cmdline');
let cmdline = options.create().parse(process.argv);
// If there is no command line, we should return
if (!cmdline) {
throw new Error("Error in parsing command line parameters");
}
let svc = new splunkjs.Service({
scheme: cmdline.opts.scheme,
host: cmdline.opts.host,
port: cmdline.opts.port,
username: cmdline.opts.username,
password: cmdline.opts.password,
version: cmdline.opts.version
});
// Exports tests on a successful login
module.exports = new Promise(async (resolve, reject) => {
try {
await svc.login();
return resolve(exports.setup(svc))
} catch (error) {
throw new Error("Login failed - not running tests", error || "");
}
});
}