@mindconnect/mindconnect-nodejs
Version:
MindConnect Library for NodeJS (community based)
220 lines • 12.8 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
// Copyright (C), Siemens AG 2017
const chai = require("chai");
const debug = require("debug");
require("url-search-params-polyfill");
const src_1 = require("../src");
const sdk_1 = require("../src/api/sdk");
const utils_1 = require("../src/api/utils");
const test_agent_setup_utils_1 = require("./test-agent-setup-utils");
const log = debug("mindconnect-setup-test");
chai.should();
describe("MindConnect Setup", () => {
const auth = utils_1.loadAuth();
const gateway = auth.gateway;
const tenant = auth.tenant;
const basicAuth = utils_1.decrypt(auth, "passkey.4.unit.test");
const sdk = new sdk_1.MindSphereSdk({
gateway: auth.gateway,
basicAuth: utils_1.decrypt(auth, "passkey.4.unit.test"),
tenant: auth.tenant
});
let sharedSecretConfig = {};
let unitTestConfiguration = {};
before(() => __awaiter(void 0, void 0, void 0, function* () {
unitTestConfiguration = yield test_agent_setup_utils_1.unitTestSetup(sdk, sdk_1.AgentManagementModels.AgentUpdate.SecurityProfileEnum.SHAREDSECRET);
sharedSecretConfig = unitTestConfiguration.agentConfig;
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield test_agent_setup_utils_1.tearDownAgents(sdk, unitTestConfiguration);
}));
it("should instantiate", () => {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
log(mcsetup);
mcsetup.should.exist;
});
it("should throw an error with invalid setup", () => {
chai
.expect(() => new src_1.MindConnectSetup(gateway, "invalid setup", tenant))
.to.throw("You have to pass the basic authentication header");
chai
.expect(() => new src_1.MindConnectSetup("not.an.url", basicAuth, tenant))
.to.throw("the gateway must be an URL");
});
it("should acquire the public key for validation", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const testObject = mcsetup;
testObject.should.exist;
testObject.AcquirePublicKey.should.exist;
yield testObject.AcquirePublicKey();
testObject._oauthResponse.should.exist;
testObject._oauthResponse.keys[0].should.exist;
testObject._oauthResponse.keys[0].value.should.exist;
log(testObject._oauthResponse.keys[0].value);
}));
it("should acquire token via basic auth", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const testObject = mcsetup;
testObject.should.exist;
testObject.AcquireToken.should.exist;
yield testObject.AcquireToken();
testObject._accessToken.should.exist;
}));
it("should validate token", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const testObject = mcsetup;
testObject.should.exist;
testObject.AcquireToken.should.exist;
yield testObject.AcquireToken();
testObject.ValidateToken.should.exist;
yield testObject.ValidateToken();
testObject._accessToken.should.exist;
}));
it("should validate token also on certificate change", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const testObject = mcsetup;
testObject.should.exist;
testObject.AcquireToken.should.exist;
yield testObject.AcquireToken();
testObject.ValidateToken.should.exist;
// console.log(testObject._accessToken);
yield testObject.ValidateToken();
testObject._accessToken.should.exist;
// * This is an expired token which can't be used, signed with self-created certificate
testObject._accessToken.access_token =
"eyJraWQiOiJrZXktaWQtMSIsImFsZyI6IlJTMjU2IiwidHlwIjoiSldUIn0.eyJqdGkiOiI1ZWJkODg4MGQyZGY0Yzg5OTQzMjIzYTRlYzU3N2FjMCIsInN1YiI6InNjcmVkXzAwMiIsInNjb3BlIjpbIm1kc3A6Y29yZTpBZG1pbjNyZFBhcnR5VGVjaFVzZXIiXSwiY2xpZW50X2lkIjoic2NyZWRfMDAyIiwiY2lkIjoic2NyZWRfMDAyIiwiYXpwIjoic2NyZWRfMDAyIiwiZ3JhbnRfdHlwZSI6ImNsaWVudF9jcmVkZW50aWFscyIsInJldl9zaWciOiIxOGJjMDNlZSIsImlhdCI6MTU1NDE1NjcxNCwiZXhwIjoxNTU0MTU4NTE0LCJpc3MiOiJodHRwczovL2Nhc3RpZGV2LnBpYW0uZXUxLm1pbmRzcGhlcmUuaW8vb2F1dGgvdG9rZW4iLCJ6aWQiOiJjYXN0aWRldiIsImF1ZCI6WyJzY3JlZF8wMDIiXSwidGVuIjoiY2FzdGlkZXYiLCJzY2hlbWFzIjpbInVybjpzaWVtZW5zOm1pbmRzcGhlcmU6aWFtOnYxIl0sImNhdCI6ImNsaWVudC10b2tlbjp2MSJ9.hVQ1kR6YfET3EG39QcdVwZHZN0aYhMeBKNxBioIpMOlqDrfahzPsWqJn5-XdW9oBO-kxZe9TFr5Xtdj2w_WHqBWUySqtfGrUTA8fgxcEuWfzFBcRAptvy6gPONTW4xa8Rx_G1SghTLANfrCLeiQOElpImil__b_ijBuLlx1_NHj4wvRvDFE91lvnq0c_s_Izn0-aLzkIO9xfN0iYrK5e7qTSv_m0eDneLnpsNsTMwG-ThDauaLgsxyIJSnKtwn2r_7Vn5IVrX6VD_qe7APmTZPoEtFzDiq4sN3pEDeIlXMGFuEzv_GhYfrLHNMQxLMFisbZqQpDUzTkuCc_OBMlghCRN6T432AsE9-q9SCHk_fPvBvW6O1v2II9g_mh4znj7KswDua_PSKEIwcvlRrlS5gsT-5qJTClXwdw91DIUyYOWcgSh-YaFYBy6JjAhErXKR9sJJ9IgKbMgHtetGuGcV6eF--8tKfyVW98awVSLT9W_kz0QlV92fqLeZkNdJ-UcwCj1d9C6qbElBSpvJAlwQLmraJiewCJ2ZEtyM-9IPF4o5idltp9QiKB1YwKQKbF8LkSNYoXn2scfKjOl6LaVuI55S5_VhODPTramWqQljSBYBm-aYv7J1jzQqhfD9xz19QPZc3wrJANb7kvT1xWnll1Tc0JKGk01obv8fvG0B4c";
let errorOccured = false;
try {
yield testObject.ValidateToken();
}
catch (err) {
errorOccured = true;
}
errorOccured.should.be.true;
// * this is self-created certificate
// ! The piam endpoint returns properly formated JWT (with CR LFs in proper place), unlike agent JWK endpoint
testObject._oauthResponse.keys[0].value = `-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsj2ULABiqDw3IMatCR8zpwTb3qIwkurNN8O+o9qrcjgsXUkXMYDuGMN5RlUeOkG6bOdQeQmvllnm7qJ00QFRamSaM9NTg3I9yGxUeQsddsb4PtMypeeq1jenoeswLFwK4p9dgZPbPfb/Oi+ymlBdb0HbTTzCufswcfZ/erFeQa9vEtaM1HRDEA4ZZyfDELkM17CjCpzKwfeHeZ6JSOYJ+a4yLy8viwU88PGQN6gcw6f3fUhnbMxqkN9Uyw/PmkD+cwNxSuOaFHZ9Q8gFmqnlu8NJNKIijMC2y1xQlSiK89Nos8rYgLPwMgREi8Kil5Ve5GSz3mdjsBR1P5DHNjoYNLBq4TpRweDdUYkQz82LSFgfhdvd/+tenk1vgYqCbViEKrKjO2+G0haT6x1a/9EZkv+yV9MI+f4XOoCZl1CWQE1fzntUUgT7a59NpGb4z9iVg30dAsAPNLE/qzx4X59SQt86H5xcKAyjqXeEbSVllqST+pGb/dEt1UqBjXPHn2UhacUCABzHlU1KaYTTrdGNzXsnof+GF4FyjPhcR77mi10q+sBb37ACcDxW07IwV5ddTCMOtG5zQo+cWqFHwNQlgqUMevbI6n6+g7OC774VLaMy2TdKfUUZRQowHetz1bBhWUY+iEjfxf1vR6IKJ7gJuUUeu4WxSiEQ0bbh0qRF8v0CAwEAAQ==\n-----END PUBLIC KEY-----`;
errorOccured = false;
try {
yield testObject.ValidateToken();
}
catch (err) {
errorOccured = true;
}
errorOccured.should.be.true;
}));
it("should renew token", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const result = yield mcsetup.RenewToken();
result.should.be.true;
}));
it("should get diagnostics", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const diag = yield mcsetup.GetDiagnosticInformation();
mcsetup.should.not.be.null;
diag.content.should.not.be.undefined;
}));
it("should get agent status", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const agent = new src_1.MindConnectAgent(sharedSecretConfig);
const agentStatus = yield mcsetup.GetAgentStatus(agent.ClientId());
agentStatus.should.not.be.undefined;
agentStatus.since.should.not.be.undefined;
agentStatus.status.toString().should.be.oneOf(["ONLINE", "OFFLINE"]);
}));
it("should get agent boarding status", () => __awaiter(void 0, void 0, void 0, function* () {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
const agent = new src_1.MindConnectAgent(sharedSecretConfig);
const boardingStatus = yield mcsetup.GetBoardingStatus(agent.ClientId());
boardingStatus.should.not.be.undefined;
if (!boardingStatus.status) {
throw new Error("invalid status");
}
boardingStatus.status.should.not.be.undefined;
boardingStatus.status.should.be.equal("ONBOARDING");
}));
it("should register 2 agents for diagnostics", () => __awaiter(void 0, void 0, void 0, function* () {
if (!process.env.CI) {
// don't delete all diagnostic registrations all the time on the CI/CD this can disturb the normal workings on the tenants.
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
mcsetup.should.not.be.null;
yield mcsetup.DeleteAllDiagnosticActivations();
try {
yield mcsetup.RegisterForDiagnostic("2903bf15381646d3a8f4aeeff8d9bd29");
yield mcsetup.RegisterForDiagnostic("68766a93af834984a8f8decfbeec961e");
}
catch (err) {
if (("" + err).indexOf("agent limitation") < 0) {
throw err;
}
}
const activations = yield mcsetup.GetDiagnosticActivations();
log(activations.content);
activations.content.length.should.be.equal(2);
yield mcsetup.DeleteAllDiagnosticActivations();
}
}));
it("should get logs on error", () => __awaiter(void 0, void 0, void 0, function* () {
if (!process.env.CI) {
const mcsetup = new src_1.MindConnectSetup(gateway, basicAuth, tenant);
mcsetup.should.not.be.null;
const agent = new src_1.MindConnectAgent(sharedSecretConfig);
agent.should.exist;
yield mcsetup.DeleteAllDiagnosticActivations();
try {
const response = yield mcsetup.RegisterForDiagnostic(agent.ClientId());
}
catch (err) {
if (("" + err).indexOf("Conflict") < 0) {
throw err;
}
}
if (!agent.IsOnBoarded()) {
yield agent.OnBoard();
}
yield agent.PutDataSourceConfiguration({
configurationId: "Configuration01",
dataSources: [
{
name: "EnvironmentData",
description: "EnvironmentData (from environment sensors)",
dataPoints: [
{
id: "DP-Temperature",
name: "Temperature",
description: "Temperature",
type: src_1.DataPoint.TypeEnum.DOUBLE,
unit: "°C"
}
]
}
]
});
yield agent.PostData([
{
dataPointId: "Unexistent",
qualityCode: "123123135",
value: "12312346.42.23"
}
], undefined, false);
const diag = yield mcsetup.GetDiagnosticInformation(agent.ClientId());
diag.content.should.exist;
let activations = yield mcsetup.GetDiagnosticActivations();
activations.content.length.should.be.greaterThan(0);
yield mcsetup.DeleteDiagnostic(agent.ClientId());
activations = yield mcsetup.GetDiagnosticActivations();
activations.content.length.should.be.equal(0);
}
}));
});
//# sourceMappingURL=mindconnect-setup.spec.js.map