From 2bf9375abe3c615cfbf295f1f28c39405388c4e9 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Mon, 30 Sep 2024 19:21:14 -0700 Subject: [PATCH] Add new lengthy test --- .../devices/AHU-1/001_events_pointset.json | 12 ++++ .../devices/AHU-1/002_events_system.json | 14 +++++ .../devices/AHU-1/003_events_pointset.json | 15 +++++ .../devices/AHU-1/events_pointset.attr | 10 ++++ .../devices/AHU-1/events_pointset.json | 15 +++++ .../devices/AHU-1/events_pointset.out | 17 ++++++ .../expected/devices/AHU-1/events_system.attr | 10 ++++ .../expected/devices/AHU-1/events_system.json | 13 +++++ .../expected/devices/AHU-1/events_system.out | 13 +++++ .../lengthy/expected/validation_report.json | 56 +++++++++++++++++++ .../daq/mqtt/validator/PlaybackTest.java | 40 +++++++++++++ 11 files changed, 215 insertions(+) create mode 100644 tests/traces/lengthy/devices/AHU-1/001_events_pointset.json create mode 100644 tests/traces/lengthy/devices/AHU-1/002_events_system.json create mode 100644 tests/traces/lengthy/devices/AHU-1/003_events_pointset.json create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_pointset.attr create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_pointset.json create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_pointset.out create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_system.attr create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_system.json create mode 100644 tests/traces/lengthy/expected/devices/AHU-1/events_system.out create mode 100644 tests/traces/lengthy/expected/validation_report.json diff --git a/tests/traces/lengthy/devices/AHU-1/001_events_pointset.json b/tests/traces/lengthy/devices/AHU-1/001_events_pointset.json new file mode 100644 index 0000000000..7c48ee73fc --- /dev/null +++ b/tests/traces/lengthy/devices/AHU-1/001_events_pointset.json @@ -0,0 +1,12 @@ +{ + "points" : { + "filter_alarm_pressure_status" : { + "present_value" : true + }, + "filter_differential_pressure_sensor" : { + "present_value" : 11 + } + }, + "timestamp" : "2022-07-17T05:04:26Z", + "version" : "1.5.1" +} diff --git a/tests/traces/lengthy/devices/AHU-1/002_events_system.json b/tests/traces/lengthy/devices/AHU-1/002_events_system.json new file mode 100644 index 0000000000..109ab25288 --- /dev/null +++ b/tests/traces/lengthy/devices/AHU-1/002_events_system.json @@ -0,0 +1,14 @@ +{ + "logentries" : [ { + "message" : "2022-07-19T05:04:36Z sending test message #70", + "category" : "device.testing", + "timestamp" : "2022-07-19T05:04:36Z", + "level" : 200 + } ], + "metrics": { + "mem_total_mb": 25164.88, + "store_total_mb": null + }, + "timestamp" : "2022-07-17T05:34:36+0000", + "version" : "1.5.1" +} diff --git a/tests/traces/lengthy/devices/AHU-1/003_events_pointset.json b/tests/traces/lengthy/devices/AHU-1/003_events_pointset.json new file mode 100644 index 0000000000..0dadb70086 --- /dev/null +++ b/tests/traces/lengthy/devices/AHU-1/003_events_pointset.json @@ -0,0 +1,15 @@ +{ + "points" : { + "filter_alarm_pressure_status" : { + "present_value" : true + }, + "filter_differential_pressure_setpoint" : { + "present_value" : 98 + }, + "filter_differential_pressure_sensor" : { + "present_value" : 11 + } + }, + "timestamp" : "2022-07-17T06:07:36Z", // Over threshold from _initial_ event + "version" : "1.5.1" +} diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.attr b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.attr new file mode 100644 index 0000000000..a6ffd57222 --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.attr @@ -0,0 +1,10 @@ +{ + "deviceNumId" : "00000062256946", + "publishTime" : "1999-10-20T01:02:03Z", + "subFolder" : "pointset", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "subType" : "events", + "msgSource" : "003_events_pointset.json", + "deviceId" : "AHU-1", + "projectId" : "playback-project" +} \ No newline at end of file diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.json b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.json new file mode 100644 index 0000000000..5615cf9118 --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.json @@ -0,0 +1,15 @@ +{ + "points" : { + "filter_alarm_pressure_status" : { + "present_value" : true + }, + "filter_differential_pressure_setpoint" : { + "present_value" : 98 + }, + "filter_differential_pressure_sensor" : { + "present_value" : 11 + } + }, + "timestamp" : "1999-10-20T01:02:03Z", + "version" : "1.5.1" +} \ No newline at end of file diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.out b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.out new file mode 100644 index 0000000000..dc3cc3bfd9 --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_pointset.out @@ -0,0 +1,17 @@ +{ + "timestamp" : "1999-10-20T01:02:03Z", + "version" : "1.5.1", + "sub_folder" : "pointset", + "sub_type" : "events", + "status" : { + "message" : "Successful validation", + "category" : "validation.device.receive", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 200 + }, + "pointset" : { + "missing" : [ ], + "extra" : [ ] + }, + "errors" : [ ] +} diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_system.attr b/tests/traces/lengthy/expected/devices/AHU-1/events_system.attr new file mode 100644 index 0000000000..f21e8d3520 --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_system.attr @@ -0,0 +1,10 @@ +{ + "deviceNumId" : "00000062256946", + "publishTime" : "2022-07-19T05:04:36+0000", + "subFolder" : "system", + "deviceRegistryId" : "ZZ-TRI-FECTA", + "subType" : "events", + "msgSource" : "002_events_system.json", + "deviceId" : "AHU-1", + "projectId" : "playback-project" +} \ No newline at end of file diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_system.json b/tests/traces/lengthy/expected/devices/AHU-1/events_system.json new file mode 100644 index 0000000000..703d8551ce --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_system.json @@ -0,0 +1,13 @@ +{ + "logentries" : [ { + "message" : "1999-10-20T01:02:03Z sending test message #70", + "category" : "device.testing", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 200 + } ], + "metrics" : { + "mem_total_mb" : 25164.88 + }, + "timestamp" : "2022-07-19T05:04:36+0000", + "version" : "1.5.1" +} \ No newline at end of file diff --git a/tests/traces/lengthy/expected/devices/AHU-1/events_system.out b/tests/traces/lengthy/expected/devices/AHU-1/events_system.out new file mode 100644 index 0000000000..a3237dc0c7 --- /dev/null +++ b/tests/traces/lengthy/expected/devices/AHU-1/events_system.out @@ -0,0 +1,13 @@ +{ + "timestamp" : "1999-10-20T01:02:03Z", + "version" : "1.5.1", + "sub_folder" : "system", + "sub_type" : "events", + "status" : { + "message" : "Successful validation", + "category" : "validation.device.receive", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 200 + }, + "errors" : [ ] +} diff --git a/tests/traces/lengthy/expected/validation_report.json b/tests/traces/lengthy/expected/validation_report.json new file mode 100644 index 0000000000..4f9f06b9d6 --- /dev/null +++ b/tests/traces/lengthy/expected/validation_report.json @@ -0,0 +1,56 @@ +{ + "timestamp" : "1999-10-20T01:02:03Z", + "version" : "1.5.1", + "cloud_version" : { + "deployed_by" : "Default implementation for class com.google.daq.mqtt.validator.MessageReadingClient" + }, + REDACTED, + "start_time" : "1999-10-20T01:02:03Z", + "summary" : { + "correct_devices" : [ "AHU-1" ], + "extra_devices" : [ ], + "missing_devices" : [ ], + "error_devices" : [ "AHU-22", "GAT-123", "SNS-4" ] + }, + "devices" : { + "AHU-1" : { + "last_seen" : "1999-10-20T01:02:03Z", + "status" : { + "message" : "Successful validation", + "category" : "validation.device.receive", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 200 + } + }, + "AHU-22" : { + "last_seen" : "1999-10-20T01:02:03Z", + "status" : { + "message" : "While converting to json node: 2 schema violations found", + "detail" : "events_pointset: While converting to json node: 2 schema violations found @Validator.validateMessage(REDACTED); 2 schema violations found; object instance has properties which are not allowed by the schema: [\"yesvalue\"]; object has missing required properties ([\"version\"])", + "category" : "validation.device.schema", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 500 + } + }, + "GAT-123" : { + "last_seen" : "1999-10-20T01:02:03Z", + "status" : { + "message" : "missing pointset subblock", + "detail" : "state_update: missing pointset subblock", + "category" : "validation.device.schema", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 500 + } + }, + "SNS-4" : { + "last_seen" : "1999-10-20T01:02:03Z", + "status" : { + "message" : "Multiple validation errors", + "detail" : "While converting to json node: 1 schema violations found; Device has extra points: rocket_count, triangulating_axis_y; Unexpected character ('{' (code 123)): was expecting double-quote to start field name\n at [Source: (File), line: 1, column: 3]; While converting to json node: 1 schema violations found", + "category" : "validation.device.multiple", + "timestamp" : "1999-10-20T01:02:03Z", + "level" : 500 + } + } + } +} diff --git a/validator/src/test/java/com/google/daq/mqtt/validator/PlaybackTest.java b/validator/src/test/java/com/google/daq/mqtt/validator/PlaybackTest.java index cd60609ca2..1144232e33 100644 --- a/validator/src/test/java/com/google/daq/mqtt/validator/PlaybackTest.java +++ b/validator/src/test/java/com/google/daq/mqtt/validator/PlaybackTest.java @@ -24,6 +24,7 @@ public class PlaybackTest extends TestBase { public static final String SIMPLE_TRACE_DIR = "../tests/traces/simple"; + public static final String LENGTHY_TRACE_DIR = "../tests/traces/lengthy"; private static final List TRACE_DEVICES = List.of("--", "AHU-22", "SNS-4", "XXX", "YYY"); @Test @@ -72,6 +73,45 @@ private List reports(List outputMessages, String .collect(Collectors.toList()); } + @Test + public void notMissingDevice() { + MessageReadingClient client = validateTrace(LENGTHY_TRACE_DIR); + assertEquals("trace message count", 3, client.messageCount); + List outputMessages = client.getOutputMessages(); + OutputBundle lastBundle = outputMessages.get(outputMessages.size() - 1); + ValidationState finalReport = asValidationState(lastBundle.message); + try { + assertEquals("correct devices", 1, finalReport.summary.correct_devices.size()); + assertEquals("extra devices", 0, finalReport.summary.extra_devices.size()); + assertEquals("missing devices", 0, finalReport.summary.missing_devices.size()); + assertEquals("error devices", 3, finalReport.summary.error_devices.size()); + assertEquals("device summaries", 4, finalReport.devices.size()); + assertEquals("AHU-1 status level", (Object) INFO.value(), + finalReport.devices.get("AHU-1").status.level); + assertEquals("AHU-22 status category", Category.VALIDATION_DEVICE_SCHEMA, + finalReport.devices.get("AHU-22").status.category); + assertEquals("SNS-4 status", Category.VALIDATION_DEVICE_MULTIPLE, + finalReport.devices.get("SNS-4").status.category); + + List deviceReports = reports(outputMessages, "AHU-1"); + + ValidationEvents firstReport = deviceReports.get(0); + assertEquals("missing points", 1, firstReport.pointset.missing.size()); + String missingPointName = firstReport.pointset.missing.get(0); + assertEquals("missing point", FILTER_DIFFERENTIAL_PRESSURE_SETPOINT, missingPointName); + assertEquals("extra points", 0, firstReport.pointset.extra.size()); + assertEquals("device status", (Integer) Level.ERROR.value(), firstReport.status.level); + + ValidationEvents lastReport = deviceReports.get(deviceReports.size() - 1); + assertEquals("missing points", 0, lastReport.pointset.missing.size()); + assertEquals("extra points", 0, lastReport.pointset.extra.size()); + assertEquals("device status level", (Object) INFO.value(), lastReport.status.level); + } catch (Throwable e) { + outputMessages.forEach(message -> System.err.println(JsonUtil.stringify(message))); + throw e; + } + } + @Test public void deviceArgs() { MessageReadingClient client = validateTrace(SIMPLE_TRACE_DIR, TRACE_DEVICES);