UNPKG

@mindconnect/mindconnect-nodejs

Version:

MindConnect Library for NodeJS (community based)

202 lines 8.84 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 }); const fs = require("fs"); const src_1 = require("../src"); const sdk_1 = require("../src/api/sdk"); const test_utils_1 = require("./test-utils"); function unitTestSetup(sdk, profile) { return __awaiter(this, void 0, void 0, function* () { const agentMgmt = sdk.GetAgentManagementClient(); const assetMgmt = sdk.GetAssetManagementClient(); const { targetAsset, folderid } = yield setupStructure(sdk); const aspects = yield assetMgmt.GetAspects(`${targetAsset.assetId}`); targetAsset.aspects = unroll(aspects); const agentAsset = yield assetMgmt.PostAsset({ name: `Agent${new Date().getTime()}`, parentId: folderid, typeId: "core.mclib" }); const agent = yield agentMgmt.PostAgent({ entityId: `${agentAsset.assetId}`, name: `${agentAsset.assetId}`, securityProfile: profile }); const agentConfig = yield agentMgmt.GetBoardingConfiguration(agent.entityId, { retry: 5 }); return { targetAsset, agentAsset, agent, agentConfig }; }); } exports.unitTestSetup = unitTestSetup; function setupStructure(sdk) { return __awaiter(this, void 0, void 0, function* () { const agentMgmt = sdk.GetAgentManagementClient(); const assetMgmt = sdk.GetAssetManagementClient(); const tenant = sdk.GetTenant(); const rootassetid = `${(yield assetMgmt.GetRootAsset()).assetId}`; const folders = unroll(yield assetMgmt.GetAssets({ filter: JSON.stringify({ name: { eq: "UnitTestFolder" } }) })); if (folders.length === 0) { const folder = yield assetMgmt.PostAsset({ name: "UnitTestFolder", typeId: "core.basicarea", parentId: rootassetid }); folders.push(folder); } const folder = folders[0]; const folderid = `${folder.assetId}`; // Check if we have the aspect types setup const aspectTypes = unroll(yield assetMgmt.GetAspectTypes({ filter: JSON.stringify({ id: { in: { value: [`${tenant}.UnitTestEnvironment`, `${tenant}.UnitTestVibration`] } } }) })); if (aspectTypes.length === 0) { yield assetMgmt.PutAspectType(`${tenant}.UnitTestEnvironment`, { name: "UnitTestEnvironment", category: sdk_1.AssetManagementModels.AspectType.CategoryEnum.Dynamic, scope: sdk_1.AssetManagementModels.AspectType.ScopeEnum.Private, variables: [ { name: "Humidity", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.INT, qualityCode: true, unit: "%" }, { name: "Pressure", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "kPa" }, { name: "Temperature", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "°C" } ] }); yield assetMgmt.PutAspectType(`${tenant}.UnitTestVibration`, { name: "UnitTestVibration", category: sdk_1.AssetManagementModels.AspectType.CategoryEnum.Dynamic, scope: sdk_1.AssetManagementModels.AspectType.ScopeEnum.Private, variables: [ { name: "Acceleration", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "mm/s^2" }, { name: "Displacement", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "mm" }, { name: "Frequency", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "Hz" }, { name: "Velocity", dataType: sdk_1.AssetManagementModels.VariableDefinition.DataTypeEnum.DOUBLE, qualityCode: true, unit: "mm/s" } ] }); } const assetType = unroll(yield assetMgmt.GetAssetTypes({ filter: JSON.stringify({ name: { eq: `UnitTestEngine` } }) })); if (assetType.length === 0) { yield assetMgmt.PutAssetType(`${tenant}.UnitTestEngine`, { name: "UnitTestEngine", parentTypeId: "core.BasicAsset", aspects: [ { name: "EnvironmentData", aspectTypeId: `${tenant}.UnitTestEnvironment` }, { name: "VibrationData", aspectTypeId: `${tenant}.UnitTestVibration` } ] }); } const asset = unroll(yield assetMgmt.GetAssets({ filter: JSON.stringify({ and: { name: { eq: "UnitTestEngineInstance" }, parentId: { eq: folderid } } }) })); if (asset.length === 0) { yield assetMgmt.PostAsset({ name: "UnitTestEngineInstance", typeId: `${tenant}.UnitTestEngine`, parentId: folderid }); } const targetAsset = unroll(yield assetMgmt.GetAssets({ filter: JSON.stringify({ name: { eq: "UnitTestEngineInstance" } }) }))[0]; return { targetAsset, folderid }; }); } exports.setupStructure = setupStructure; function unroll(obj) { const embedded = obj._embedded; if (!embedded) return []; const keys = Object.keys(embedded); if (keys.length === 0) return []; if (keys.length === 1) return embedded[keys[0]]; throw new Error("cant unroll object"); } function tearDownAgents(sdk, config) { return __awaiter(this, void 0, void 0, function* () { const agentMgmt = sdk.GetAgentManagementClient(); const assetMgmt = sdk.GetAssetManagementClient(); const status = yield agentMgmt.GetOnboardingStatus(`${config.agent.id}`); try { fs.unlinkSync(`.mc/${config.agent.id}.json`); } catch (_a) { } if (status.status === sdk_1.AgentManagementModels.OnboardingStatus.StatusEnum.ONBOARDED) { yield src_1.retry(5, () => agentMgmt.OffboardAgent(`${config.agent.id}`)); } yield test_utils_1.sleep(5000); const etag = (yield assetMgmt.GetAsset(`${config.agentAsset.assetId}`)).etag; yield src_1.retry(5, () => agentMgmt.DeleteAgent(`${config.agent.id}`, { ifMatch: `${config.agent.eTag}` })); yield src_1.retry(5, () => assetMgmt.DeleteAsset(`${config.agentAsset.assetId}`, { ifMatch: `${etag}` })); }); } exports.tearDownAgents = tearDownAgents; //# sourceMappingURL=test-agent-setup-utils.js.map