Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nasa/openmct.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShefali Joshi <simplyrender@gmail.com>2020-07-23 01:22:31 +0300
committerGitHub <noreply@github.com>2020-07-23 01:22:31 +0300
commitafeb89a51abd6aa5fbefb3d5248242c1d3a7211d (patch)
tree6c2791b74c5e83bbc7ddf1a0a5e50bf751472731
parent07992f0b2adb362698ba9ffe64b43a91e3333896 (diff)
[VIPEROMCT-16] Creates a closure for telemetryObject so that requests can resolve correctly even if the telemetryObject is destroyed (#3210)v1.2-RC1
Co-authored-by: Deep Tailor <deep.j.tailor@nasa.gov>
-rw-r--r--src/plugins/condition/criterion/AllTelemetryCriterion.js2
-rw-r--r--src/plugins/condition/criterion/TelemetryCriterion.js4
-rw-r--r--src/plugins/condition/criterion/TelemetryCriterionSpec.js32
3 files changed, 34 insertions, 4 deletions
diff --git a/src/plugins/condition/criterion/AllTelemetryCriterion.js b/src/plugins/condition/criterion/AllTelemetryCriterion.js
index 8bce13bcc..e56263ec1 100644
--- a/src/plugins/condition/criterion/AllTelemetryCriterion.js
+++ b/src/plugins/condition/criterion/AllTelemetryCriterion.js
@@ -127,7 +127,7 @@ export default class AllTelemetryCriterion extends TelemetryCriterion {
if (validatedData) {
if (this.isStalenessCheck()) {
- if (this.stalenessSubscription[validatedData.id]) {
+ if (this.stalenessSubscription && this.stalenessSubscription[validatedData.id]) {
this.stalenessSubscription[validatedData.id].update(validatedData);
}
this.telemetryDataCache[validatedData.id] = false;
diff --git a/src/plugins/condition/criterion/TelemetryCriterion.js b/src/plugins/condition/criterion/TelemetryCriterion.js
index 1e39ae19b..cbc5f07bb 100644
--- a/src/plugins/condition/criterion/TelemetryCriterion.js
+++ b/src/plugins/condition/criterion/TelemetryCriterion.js
@@ -142,12 +142,14 @@ export default class TelemetryCriterion extends EventEmitter {
};
}
+ let telemetryObject = this.telemetryObject;
+
return this.openmct.telemetry.request(
this.telemetryObject,
options
).then(results => {
const latestDatum = results.length ? results[results.length - 1] : {};
- const normalizedDatum = this.createNormalizedDatum(latestDatum, this.telemetryObject);
+ const normalizedDatum = this.createNormalizedDatum(latestDatum, telemetryObject);
return {
id: this.id,
diff --git a/src/plugins/condition/criterion/TelemetryCriterionSpec.js b/src/plugins/condition/criterion/TelemetryCriterionSpec.js
index 340c6d221..7283acd3a 100644
--- a/src/plugins/condition/criterion/TelemetryCriterionSpec.js
+++ b/src/plugins/condition/criterion/TelemetryCriterionSpec.js
@@ -21,12 +21,14 @@
*****************************************************************************/
import TelemetryCriterion from "./TelemetryCriterion";
+import { getMockTelemetry } from "utils/testing";
let openmct = {},
mockListener,
testCriterionDefinition,
testTelemetryObject,
- telemetryCriterion;
+ telemetryCriterion,
+ mockTelemetry = getMockTelemetry();
describe("The telemetry criterion", function () {
@@ -60,7 +62,7 @@ describe("The telemetry criterion", function () {
};
openmct.objects = jasmine.createSpyObj('objects', ['get', 'makeKeyString']);
openmct.objects.makeKeyString.and.returnValue(testTelemetryObject.identifier.key);
- openmct.telemetry = jasmine.createSpyObj('telemetry', ['isTelemetryObject', "subscribe", "getMetadata", "getValueFormatter"]);
+ openmct.telemetry = jasmine.createSpyObj('telemetry', ['isTelemetryObject', "subscribe", "getMetadata", "getValueFormatter", "request"]);
openmct.telemetry.isTelemetryObject.and.returnValue(true);
openmct.telemetry.subscribe.and.returnValue(function () {});
openmct.telemetry.getValueFormatter.and.returnValue({
@@ -109,4 +111,30 @@ describe("The telemetry criterion", function () {
});
expect(telemetryCriterion.result).toBeTrue();
});
+
+ describe('the LAD request', () => {
+ beforeEach(async () => {
+ let telemetryRequestResolve;
+ let telemetryRequestPromise = new Promise((resolve) => {
+ telemetryRequestResolve = resolve;
+ });
+ openmct.telemetry.request.and.callFake(() => {
+ setTimeout(() => {
+ telemetryRequestResolve(mockTelemetry);
+ }, 100);
+ return telemetryRequestPromise;
+ });
+ });
+
+ it("returns results for slow LAD requests", async function () {
+ const criteriaRequest = telemetryCriterion.requestLAD();
+ telemetryCriterion.destroy();
+ expect(telemetryCriterion.telemetryObject).toBeUndefined();
+ setTimeout(() => {
+ criteriaRequest.then((result) => {
+ expect(result).toBeDefined();
+ });
+ }, 300);
+ });
+ });
});