UNPKG

@mindconnect/mindconnect-nodejs

Version:

NodeJS Library for Siemens Insights Hub Connectivity - TypeScript SDK for Insights Hub and Industrial IoT - Command Line Interface - Insights Hub Development Proxy (Siemens Insights Hub was formerly known as MindSphere)

659 lines 32.7 kB
"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"); const fs = require("fs"); const mocha_1 = require("mocha"); const os = require("os"); require("url-search-params-polyfill"); const src_1 = require("../src"); const sdk_1 = require("../src/api/sdk"); const sdk_2 = require("../src/api/sdk/"); const utils_1 = require("../src/api/utils"); const test_agent_setup_utils_1 = require("./test-agent-setup-utils"); const test_utils_1 = require("./test-utils"); const log = debug("mindconnect-agent-test"); chai.should(); describe("MindConnectApi Version 3 Agent (SHARED_SECRET)", () => { const auth = (0, utils_1.loadAuth)(); const sdk = new sdk_2.MindSphereSdk(Object.assign(Object.assign({}, auth), { basicAuth: (0, utils_1.decrypt)(auth, (0, test_utils_1.getPasskeyForUnitTest)()) })); let agentConfig = {}; let unitTestConfiguration = {}; before(() => __awaiter(void 0, void 0, void 0, function* () { unitTestConfiguration = yield (0, test_agent_setup_utils_1.unitTestSetup)(sdk, sdk_1.AgentManagementModels.AgentUpdate.SecurityProfileEnum.SHAREDSECRET); agentConfig = unitTestConfiguration.agentConfig; })); after(() => __awaiter(void 0, void 0, void 0, function* () { yield (0, test_agent_setup_utils_1.tearDownAgents)(sdk, unitTestConfiguration); })); (0, mocha_1.it)("should instantiate shared secret agent.", () => { const agent = new src_1.MindConnectAgent(agentConfig); agent.should.not.be.null; agent._configuration.should.not.be.null; agent._configuration.content.clientCredentialProfile[0].should.be.equal("SHARED_SECRET"); agent._storage.should.not.be.null; }); (0, mocha_1.it)("should throw exception if the configured path is inaccessible.", () => { if (/^win/.test(process.platform)) { chai.expect(() => new src_1.MindConnectAgent(agentConfig, 600, "z:\\blubb")).to.throw("ENOENT"); } }); (0, mocha_1.it)("should onboard a shared secret agent.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); agent._configuration.response.should.not.be.null; } else { log("The agent is already onboarded"); } })); (0, mocha_1.it)("should rotate the client secret for the SHARED_SECRET configuration.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); agent._configuration.response.should.not.be.null; } else { log("The agent is already onboarded"); } const oldConfig = Object.assign({}, agent._configuration); yield agent.RotateKey(); const newConfig = agent._configuration; if (!oldConfig.response || !newConfig.response) { throw new Error("invalid data in responses"); } oldConfig.response.client_id.should.be.equal(newConfig.response.client_id); oldConfig.response.client_secret.should.be.not.equal(newConfig.response.client_secret); oldConfig.response.registration_access_token.should.be.not.equal(newConfig.response.registration_access_token); oldConfig.response.client_secret_expires_at.should.be.lte(newConfig.response.client_secret_expires_at); })); (0, mocha_1.it)("should create client assertions according to the mindsphere specification.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); const result = agent.CreateClientAssertion(); result.should.not.be.null; })); (0, mocha_1.it)("should be able to acquire a valid access token for exchange endpoint.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.AquireToken(); agent._accessToken.should.not.be.null; const response = agent._accessToken; const storedConfiguration = agent._configuration; if (!storedConfiguration.response) throw new Error("invalid response in the configuration was agent onboarded?"); response.access_token.should.not.be.null; response.expires_in.should.equal(3600); response.scope.length.should.be.greaterThan(0); })); (0, mocha_1.it)("should be able to validate the access token for exchange endpoint.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.AquireToken(); agent._accessToken.should.not.be.null; const result = yield agent.ValidateToken(); result.should.be.true; })); (0, mocha_1.it)("should make sure that renewal works also for JWK certificate expiration", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.RenewToken(); // * This is an expired token which can't be used, signed with self-created certificate agent._accessToken.access_token = "eyJraWQiOiJrZXktaWQtMSIsImFsZyI6IlJTMjU2IiwidHlwIjoiSldUIn0.eyJqdGkiOiJmN2E0ODg4Yi0zYTFiLTRkZjEtOGFkOS1lYWUyOGZhMTY3OTYiLCJzY29wZSI6WyJtZHNwOmNvcmU6RGVmYXVsdEFnZW50Il0sImlzcyI6Imh0dHBzOi8vc291dGhnYXRlLmV1MS5taW5kc3BoZXJlLmlvL2FwaS9hZ2VudG1hbmFnZW1lbnQvIiwic3ViIjoiYTNhYzVhZTg4OTU0NDcxN2IwMmZhODI4MmEzMGQxYjQiLCJ6aWQiOiJhZ2VudGlhbSIsImF1ZCI6WyJzb3V0aGdhdGUiXSwiaWF0IjoxNTU0MTUyMjQ5LCJleHAiOjE1NTQxNTU4NDksInNjaGVtYXMiOlsidXJuOnNpZW1lbnM6bWluZHNwaGVyZTppYW06djEiXSwidGVuIjoiY2FzdGlkZXYiLCJ0ZW5fY3R4IjoibWFpbi10ZW5hbnQiLCJjYXQiOiJhZ2VudC10b2tlbjp2MSIsImdyYW50X3R5cGUiOiJjbGllbnRfY3JlZGVudGlhbHMifQ.O5glWlktjC2IxRZkjchAnhysmumBonsqcSZhvOAtJj8iRkYtbbzRQWsXv1x59GVwOB5HexC8tPLduYS9CeieuQQyPFXYR8eODUg3GxHwLVowp7gkRYotWa4zZVCQz2KkOjkPzG_eFc5YOJZLcl0JeD6j8cvZB9IKrb6ixX9kcx-9Q_vGenFKxtIletFqsQi1EBu4qXa9btCMYKQ-cl7PYphKAz3z8Z0LrxI8oMz5fGGKXOTIFErP0DnE8quKEsYv2oG8zSuccOmZppHoPOIIhStqJh9ry8rXo-5589FBFLypzxX4ZUflf_5r16kUD0B3GcWQ70YbCGxsMdBEHFSSvWG2f9RZcVCmpTWxRV0iEOylJb8qrlYtkhvG310YZftdVG4XRKRCz6r5zZYfi5vyB_lodziYpF2OcqyCEM3VPw4ORqh9Q2_vs-yS8d1zCubfsyHMAueI3ooEoKSE8bg6nrUtVndBtbsN0v8iaj5pC6K9QuXn4MZyqkOrxEuWBKFCXWNWu08uuwxMw7n_wz2vZeKva8VJfCNqXcL9nV5NwfCDuNZ6s9gSOVDogcj7iqL7F_VI2kpmDFsR8SLFD30g078-JLViyzSAm2dPsZG7u4cyGrghR0w6NKHfitAvA1lYlcQb48b2wtRdKnKgWk_rhK1JaRx4EJH95yCn3VpP2kM"; let errorOccured = false; try { yield agent.ValidateToken(); } catch (err) { err.name.should.be.equal("JsonWebTokenError"); err.message.should.be.equal("invalid signature"); errorOccured = true; } errorOccured.should.be.true; // * This is self-created certificate (agent)._oauthPublicKey.value = `-----BEGIN PUBLIC KEY-----MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsj2ULABiqDw3IMatCR8zpwTb3qIwkurNN8O+o9qrcjgsXUkXMYDuGMN5RlUeOkG6bOdQeQmvllnm7qJ00QFRamSaM9NTg3I9yGxUeQsddsb4PtMypeeq1jenoeswLFwK4p9dgZPbPfb/Oi+ymlBdb0HbTTzCufswcfZ/erFeQa9vEtaM1HRDEA4ZZyfDELkM17CjCpzKwfeHeZ6JSOYJ+a4yLy8viwU88PGQN6gcw6f3fUhnbMxqkN9Uyw/PmkD+cwNxSuOaFHZ9Q8gFmqnlu8NJNKIijMC2y1xQlSiK89Nos8rYgLPwMgREi8Kil5Ve5GSz3mdjsBR1P5DHNjoYNLBq4TpRweDdUYkQz82LSFgfhdvd/+tenk1vgYqCbViEKrKjO2+G0haT6x1a/9EZkv+yV9MI+f4XOoCZl1CWQE1fzntUUgT7a59NpGb4z9iVg30dAsAPNLE/qzx4X59SQt86H5xcKAyjqXeEbSVllqST+pGb/dEt1UqBjXPHn2UhacUCABzHlU1KaYTTrdGNzXsnof+GF4FyjPhcR77mi10q+sBb37ACcDxW07IwV5ddTCMOtG5zQo+cWqFHwNQlgqUMevbI6n6+g7OC774VLaMy2TdKfUUZRQowHetz1bBhWUY+iEjfxf1vR6IKJ7gJuUUeu4WxSiEQ0bbh0qRF8v0CAwEAAQ==-----END PUBLIC KEY-----`; errorOccured = false; try { yield agent.ValidateToken(); } catch (err) { err.name.should.be.equal("TokenExpiredError"); err.message.should.be.equal("jwt expired"); errorOccured = true; } errorOccured.should.be.true; })); (0, mocha_1.it)("should be able to renew the exchange token.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } // renew the token yield agent.RenewToken(); agent._accessToken.should.not.be.null; const oldConfig = Object.assign({}, agent._configuration); const oldAccessToken = Object.assign({}, agent._accessToken); // simulate expired jwtToken const now = Math.floor(Date.now() / 1000); agent._configuration.response.client_secret_expires_at = now; yield agent.RenewToken(); const newConfig = Object.assign({}, agent._configuration); const newAccessToken = Object.assign({}, agent._accessToken); if (!newConfig.response || !oldConfig.response) throw new Error("onboarding failed!"); newConfig.response.client_secret.should.not.be.equal(oldConfig.response.client_secret); newConfig.response.client_secret_expires_at.should.be.greaterThan(oldConfig.response.client_secret_expires_at); newAccessToken.access_token.should.be.not.equal(oldAccessToken.access_token); oldAccessToken.jti.should.not.be.equal(newAccessToken.jti); })); (0, mocha_1.it)("should be able to get the currently valid agent token", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const currentToken = yield agent.GetAgentToken(); currentToken.should.not.be.undefined; })); (0, mocha_1.it)("should be able to put the datasource configuration.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.GetDataSourceConfiguration(); if (agent.HasDataSourceConfiguration()) { log("The agent is already configured"); return; } const dataSourceConfig = { 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", }, { id: "DP-Humidity", name: "Humidity", description: "Humidity", type: src_1.DataPoint.TypeEnum.INT, unit: "%", }, { id: "DP-Pressure", name: "Pressure", description: "Pressure", type: src_1.DataPoint.TypeEnum.DOUBLE, unit: "kPa", }, ], customData: { ostype: os.type(), osHostname: os.hostname(), }, }, { name: "VibrationData", description: "Vibration (from vibration sensors)", dataPoints: [ { id: "DP-Displacement", name: "Displacement", description: "Displacement", type: src_1.DataPoint.TypeEnum.DOUBLE, unit: "mm", }, { id: "DP-Velocity", name: "Velocity", description: "Velocity", type: src_1.DataPoint.TypeEnum.DOUBLE, unit: "mm/s", }, { id: "DP-Acceleration", name: "Acceleration", description: "Acceleration", type: src_1.DataPoint.TypeEnum.DOUBLE, unit: "mm/s^2", }, { id: "DP-Frequency", name: "Frequency", description: "Frequency", type: src_1.DataPoint.TypeEnum.DOUBLE, unit: "Hz", }, ], customData: { ostype: os.type(), osHostname: os.hostname(), }, }, ], }; if (!agent.HasDataSourceConfiguration()) { const result = yield agent.PutDataSourceConfiguration(dataSourceConfig); } })); (0, mocha_1.it)("should be able to get the datasource configuration.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const result = yield agent.GetDataSourceConfiguration(); result.should.not.be.null; log(result); })); (0, mocha_1.it)("should be able to put the mappings configuration.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const dataSourceConfig = yield agent.GetDataSourceConfiguration(); dataSourceConfig.should.not.be.null; const mappings = []; const aspects = unitTestConfiguration.targetAsset.aspects || []; const variables = []; for (const aspect of aspects) { for (const variable of aspect.variables || []) { variables.push(variable); } } const agentId = agent.ClientId(); const targetAssetId = unitTestConfiguration.targetAsset.assetId || (0, utils_1.throwError)("invalid asset"); for (const dataSource of dataSourceConfig.dataSources) { for (const datapoint of dataSource.dataPoints) { mappings.push({ agentId: agentId, dataPointId: datapoint.id, entityId: targetAssetId, propertyName: datapoint.name.replace("DP-", ""), propertySetName: dataSource.name, keepMapping: true, }); } } const result = yield agent.PutDataMappings(mappings); result.should.not.be.undefined; })); (0, mocha_1.it)("should be able to get the data mappings.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const result = yield agent.GetDataMappings(); result.should.not.be.null; log(result); })); (0, mocha_1.it)("should validate input.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } if (!agent.HasDataSourceConfiguration()) { yield agent.GetDataSourceConfiguration(); } // console.log(agentConfig); const values = [ { dataPointId: "DP-Temperature", qualityCode: "0", value: "123.1" }, { dataPointId: "DP-Pressure", qualityCode: "0", value: "144" }, { dataPointId: "DP-Humidity", qualityCode: "0", value: "166" }, { dataPointId: "DP-NONEXISTANT", qualityCode: "0", value: "166.45" }, ]; try { yield agent.PostData(values); throw Error("should never happen"); } catch (err) { // console.log(err); err.toString().should.include("must be equal to one of the allowed values"); // DP-NONEXISTANT } })); (0, mocha_1.it)("should behave like a full agent.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } if (!agent.HasDataSourceConfiguration()) { yield agent.GetDataSourceConfiguration(); } for (let index = 0; index < 5; index++) { const values = [ { dataPointId: "DP-Temperature", qualityCode: "0", value: (Math.sin(index) * (20 + (index % 2)) + 25).toString(), }, { dataPointId: "DP-Pressure", qualityCode: "0", value: (Math.cos(index) * (20 + (index % 25)) + 25).toString(), }, { dataPointId: "DP-Humidity", qualityCode: "0", value: ((index + 30) % 100).toString() }, { dataPointId: "DP-Acceleration", qualityCode: "0", value: (1000.0 + index).toString() }, { dataPointId: "DP-Frequency", qualityCode: "0", value: (60.0 + index * 0.1).toString() }, { dataPointId: "DP-Displacement", qualityCode: "0", value: (index % 10).toString() }, { dataPointId: "DP-Velocity", qualityCode: "0", value: (50.0 + index).toString() }, ]; const validator = agent.GetValidator(); const isValid = yield validator(values); if (isValid) { const result = yield agent.PostData(values); } else { // we are using simpler one for CI/CD // console.log("Running CI/CD"); const values = [{ dataPointId: "DP001", qualityCode: "0", value: "123.67" }]; const result = yield agent.PostData(values); } } })); (0, mocha_1.it)("should behave like a full agent (using storage provider).", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig, undefined, new src_1.DefaultStorage("./.mc/")); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } if (!agent.HasDataSourceConfiguration()) { yield agent.GetDataSourceConfiguration(); } for (let index = 0; index < 5; index++) { const values = [ { dataPointId: "DP-Temperature", qualityCode: "0", value: (Math.sin(index) * (20 + (index % 2)) + 25).toString(), }, { dataPointId: "DP-Pressure", qualityCode: "0", value: (Math.cos(index) * (20 + (index % 25)) + 25).toString(), }, { dataPointId: "DP-Humidity", qualityCode: "0", value: ((index + 30) % 100).toString() }, { dataPointId: "DP-Acceleration", qualityCode: "0", value: (1000.0 + index).toString() }, { dataPointId: "DP-Frequency", qualityCode: "0", value: (60.0 + index * 0.1).toString() }, { dataPointId: "DP-Displacement", qualityCode: "0", value: (index % 10).toString() }, { dataPointId: "DP-Velocity", qualityCode: "0", value: (50.0 + index).toString() }, ]; const result = yield (0, src_1.retry)(5, () => agent.PostData(values)); } })); (0, mocha_1.it)("should be able to use bulk upload.", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } if (!agent.HasDataSourceConfiguration()) { yield agent.GetDataSourceConfiguration(); } const values = [ { dataPointId: "DP-Temperature", qualityCode: "0", value: "10" }, { dataPointId: "DP-Pressure", qualityCode: "0", value: "10" }, ]; const now = new Date(); const hourBefore = new Date(); hourBefore.setMinutes(hourBefore.getMinutes() - 60); const bulk = [ { timestamp: hourBefore.toISOString(), values: values, }, { timestamp: now.toISOString(), values: values, }, ]; yield (0, src_1.retry)(5, () => agent.BulkPostData(bulk)); })); (0, mocha_1.it)("should be able to post an event", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } if (!agentConfig.content.clientId) { throw new Error("Invalid configuration no client id"); } const events = { entityId: agentConfig.content.clientId, sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, description: `MC.rocks ${Math.floor(new Date().getTime() / 1000) % 100}`, }; yield agent.PostEvent(events); })); (0, mocha_1.it)("should be able to post a minimal event", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.PostEvent({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString() }); })); (0, mocha_1.it)("should be able to post a MindsphereStandardEvent", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } yield agent.PostEvent({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString(), description: "x", severity: 20, code: "123", source: "blubb", acknowledged: false, }); })); (0, mocha_1.it)("should be able to post a typed event", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const eventManagement = sdk.GetEventManagementClient(); const eventType = yield eventManagement.GetEventTypes({ filter: JSON.stringify({ name: "UnitTestEventType" }), }); if (!eventType._embedded) { const eventType = yield eventManagement.PostEventType({ id: `${sdk.GetTenant()}.UnitTestEventType`, name: `UnitTestEventType`, fields: [{ name: "temperature", type: sdk_1.EventManagementModels.Field.TypeEnum.DOUBLE }], }); eventType.should.not.be.undefined; } yield agent.PostEvent({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString(), typeId: `${sdk.GetTenant()}.UnitTestEventType`, temperature: 23.7, }); })); (0, mocha_1.it)("should be able to validate event data", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); const validator = agent.GetEventValidator(); if (!agentConfig.content.clientId) throw new Error("Invalid configuration"); validator({}).should.be.false; validator({ entityId: "123" }).should.be.false; validator({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString() }).should.be.true; validator({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString(), blubb: "123", acknowledged: true, }).should.be.true; validator({ entityId: agentConfig.content.clientId, timestamp: new Date().toISOString(), blubb: "123", acknowledged: "xx", }).should.be.false; validator({ entityId: agentConfig.content.clientId, sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, timestamp: new Date().toISOString(), description: "Test", }).should.be.true; validator({ entityId: "33ac5ae889a44717b02fa8282a30d1b4", timestamp: "2018-06-16T18:38:07.293Z", sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, description: "", }).should.be.true; validator({ entityId: "XXac5ae889a44717b02fa8282a30d1b4", timestamp: "2018-06-16T18:38:07.293Z", sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, description: "", }).should.be.false; log(validator.errors); const error = validator.errors[0].message; // tslint:disable-next-line: quotemark error.should.be.equal('must match pattern "^[A-Fa-f0-9]*$"'); validator({ entityId: "aaac5ae889a44717b02fa8282a30d1b4", timestamp: "2018-06-16T18:38:07.293+02:00", sourceType: "Event", sourceId: "application", source: "Meowz", severity: 20, description: "", additionalData: { "foo:": "bar", }, }).should.be.true; })); (0, mocha_1.it)("should be able to upload a text file in one piece as well", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const result = yield agent.Upload("CODE_OF_CONDUCT.md", "", "desc"); result.should.be.equal("2b9b7c5ad3e71a431c7e5b4bf762bcdf"); })); (0, mocha_1.it)("should be able to upload a binary in one piece as well", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const result = yield agent.Upload("./images/environmentdata.PNG", "", "desc"); result.should.be.equal("59d9c81f4082c55cbc744fa41cc722be"); })); (0, mocha_1.it)("should be to upload file in 5 retries", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } let logCount = 0; yield (0, src_1.retry)(5, () => agent.Upload("LICENSE.md", "text/plain", "blubb", true), 300, () => { logCount++; if (logCount < 3) throw new Error("not yet"); }); logCount.should.be.gte(3); })); (0, mocha_1.it)("should be able to upload a file in 3 different ways", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const result1 = yield agent.UploadFile(agent.ClientId(), `${new Date().getTime()}/1/package-lock.json`, "package-lock.json"); const result2 = yield agent.UploadFile(agent.ClientId(), `${new Date().getTime()}/2/package-lock.json`, fs.readFileSync("package-lock.json")); const result3 = yield agent.Upload("package-lock.json", "application/json", "", false, agent.ClientId(), undefined, undefined, `${new Date().getTime()}/3/package-lock.json`); result1.should.be.equal(result2); result1.should.be.equal(result3); })); (0, mocha_1.it)("should be able to upload a 16.25 mb big file [CI ONLY]", () => __awaiter(void 0, void 0, void 0, function* () { if (!process.env.CI) { return; } const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const checksum = yield agent.UploadFile(agent.ClientId(), `${new Date().getTime()}/16_25_mb_file.bin`, Buffer.alloc(16.25 * 1024 * 1024), { chunk: true, retry: 5, }); checksum.should.be.equal("84c8648b8aa9b803ff92515a63aa4580"); })); (0, mocha_1.it)("should be able to upload 8 MB and 1 byte big file [CI ONLY]", () => __awaiter(void 0, void 0, void 0, function* () { if (!process.env.CI) { return; } const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const checksum = yield agent.UploadFile(agent.ClientId(), `${new Date().getTime()}/8mb_1byte_file.bin`, Buffer.alloc(8 * 1024 * 1024 + 1), { chunk: true, retry: 5, }); checksum.should.be.equal("cba5242e77abe5709a262350cf64d835"); })); (0, mocha_1.it)("should be able to upload 1 byte big file", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const checksum = yield agent.UploadFile(agent.ClientId(), `test/1_byte.bin`, Buffer.alloc(1), { chunk: true, }); checksum.should.be.equal("93b885adfe0da089cdf634904fd59f71"); })); (0, mocha_1.it)("should be able to upload 0 byte big file", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const checksum = yield agent.UploadFile(agent.ClientId(), `test/0_byte.bin`, Buffer.alloc(0), { chunk: true, }); checksum.should.be.equal("d41d8cd98f00b204e9800998ecf8427e"); })); (0, mocha_1.it)("should be able to use SDK with agent credentials", () => __awaiter(void 0, void 0, void 0, function* () { const agent = new src_1.MindConnectAgent(agentConfig); if (!agent.IsOnBoarded()) { yield agent.OnBoard(); } const agentSdk = agent.Sdk(); const assets = yield (0, src_1.retry)(5, () => agentSdk.GetAssetManagementClient().GetAssets()); assets.should.not.be.undefined; const assetTypes = yield (0, src_1.retry)(5, () => agentSdk.GetAssetManagementClient().GetAspectTypes()); assetTypes.should.not.be.undefined; })); }); //# sourceMappingURL=mindconnect-agent-3.spec.js.map