splunk-sdk
Version:
SDK for usage with the Splunk REST API
160 lines (135 loc) • 5.88 kB
JavaScript
var assert = require('chai').assert;
var splunkjs = require('../../index');
var utils = splunkjs.Utils;
var idCounter = 0;
var getNextId = function () {
return "id" + (idCounter++) + "_" + ((new Date()).valueOf());
};
exports.setup = function (svc) {
return (
describe("App tests", () => {
beforeEach(function (){
this.service = svc;
});
it("List applications", async function () {
let apps = this.service.apps();
let response = await apps.fetch();
let appList = response.list()
assert.ok(appList.length > 0);
});
it("Contains applications", async function () {
let apps = this.service.apps();
let response = await apps.fetch();
let app = response.item("search");
assert.ok(app);
});
it("Create, contains app", async function () {
let name = "jssdk_testapp_" + getNextId();
let apps = this.service.apps();
let app = await apps.create({ name: name });
let appName = app.name;
let response = await apps.fetch();
let entity = response.item(appName);
assert.ok(entity);
await app.remove();
});
it("Create, modify app", async function () {
let DESCRIPTION = "TEST DESCRIPTION";
let VERSION = "1.1.0";
let name = "jssdk_testapp_" + getNextId();
let apps = this.service.apps();
let app = await apps.create({ name: name });
assert.ok(app);
assert.strictEqual(app.name, name);
let versionMatches = app.properties().version === "1.0" ||
app.properties().version === "1.0.0";
assert.ok(versionMatches);
app = await app.update({
description: DESCRIPTION,
version: VERSION
});
assert.ok(app);
let properties = app.properties();
assert.strictEqual(properties.description, DESCRIPTION);
assert.strictEqual(properties.version, VERSION);
await app.remove();
});
it("Delete test applications", async function () {
let apps = this.service.apps();
let response = await apps.fetch();
let appList = response.list();
let err = await utils.parallelEach(
appList,
async function (app, idx) {
if (utils.startsWith(app.name, "jssdk_")) {
await app.remove();
}
}
);
assert.ok(!err);
});
it("list applications with cookies as authentication", async function () {
let info = await this.service.serverInfo();
let majorVersion = parseInt(info.properties().version.split(".")[0], 10);
let minorVersion = parseInt(info.properties().version.split(".")[1], 10);
// Skip cookie test if Splunk older than 6.2
if (majorVersion < 6 || (majorVersion === 6 && minorVersion < 2)) {
splunkjs.Logger.log("Skipping cookie test...");
return;
}
let service = new splunkjs.Service({
scheme: svc.scheme,
host: svc.host,
port: svc.port,
username: svc.username,
password: svc.password,
version: svc.version
});
let service2 = new splunkjs.Service({
scheme: svc.scheme,
host: svc.host,
port: svc.port,
version: svc.version
});
await service.login();
// Save the cookie store
let cookieStore = service.http._cookieStore;
// Test that there are cookies
assert.ok(!utils.isEmpty(cookieStore));
// Add the cookies to a service with no other authenitcation information
service2.http._cookieStore = cookieStore;
let apps = service2.apps();
let response = await apps.fetch();
let appList = response.list();
assert.ok(appList.length > 0);
assert.ok(!utils.isEmpty(service2.http._cookieStore));
})
})
)
};
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 || "");
}
});
}