From 80c69d54a0354b132cd69fab2f1860ec8fb65999 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Fri, 26 Jun 2020 06:16:46 -0700 Subject: [PATCH 01/19] UDMI registrar properly catch auth_key errors --- .../com/google/daq/mqtt/registrar/LocalDevice.java | 10 ++++++++-- .../java/com/google/daq/mqtt/registrar/Registrar.java | 5 +++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index f36e338b85..f093ffad8d 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -74,6 +74,7 @@ class LocalDevice { private String deviceNumId; private CloudDeviceSettings settings; + private DeviceCredential deviceCredential; LocalDevice(File devicesDir, String deviceId, Map schemas) { try { @@ -162,7 +163,12 @@ private String getAuthFileType() { return RSA_CERT_TYPE.equals(getAuthType()) ? RSA_CERT_FILE : RSA_KEY_FILE; } - private DeviceCredential loadCredential() { + public DeviceCredential loadCredential() { + deviceCredential = readCredential(); + return deviceCredential; + } + + public DeviceCredential readCredential() { try { if (hasGateway() && getAuthType() != null) { throw new RuntimeException("Proxied devices should not have auth_type defined"); @@ -236,7 +242,7 @@ CloudDeviceSettings getSettings() { if (metadata == null) { return settings; } - settings.credential = loadCredential(); + settings.credential = deviceCredential; settings.metadata = metadataString(); settings.config = deviceConfigString(); settings.proxyDevices = getProxyDevicesList(); diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index 6b991bca48..8224394ff9 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -269,6 +269,11 @@ private Map loadDevices(File devicesDir, String[] devices, System.err.println("Loading local device " + deviceName); LocalDevice localDevice = new LocalDevice(devicesDir, deviceName, schemas); localDevices.put(deviceName, localDevice); + try { + localDevice.loadCredential(); + } catch (Exception e) { + localDevice.getErrors().put("Credential", e); + } try { localDevice.validateEnvelope(cloudIotManager.getRegistryId(), cloudIotManager.getSiteName()); } catch (Exception e) { From 3c67d72fb253a304fa4648ebdaebeaf1b4b1cfa0 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Fri, 26 Jun 2020 06:34:26 -0700 Subject: [PATCH 02/19] Add gcloud auth diagnostic --- validator/bin/registrar | 3 +++ 1 file changed, 3 insertions(+) diff --git a/validator/bin/registrar b/validator/bin/registrar index c302518d21..528aed8798 100755 --- a/validator/bin/registrar +++ b/validator/bin/registrar @@ -16,6 +16,9 @@ devices_dir=$2 schema_dir=$3 device_filter=$4 +echo Using gcloud auth: +gcloud config get-value account + echo Using cloud project $project_id echo Using site config dir $devices_dir echo Using schema root dir $schema_dir From 9e351d946b53dad64a17bb350f5405159797604d Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Fri, 26 Jun 2020 07:35:53 -0700 Subject: [PATCH 03/19] Redirect stderr for logging capture --- bin/registrar | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/registrar b/bin/registrar index e2278951e4..3f941ba188 100755 --- a/bin/registrar +++ b/bin/registrar @@ -27,4 +27,4 @@ validator/bin/build > /dev/null echo Running tools version `git describe` -validator/bin/registrar $project_id $site_path $schema_path $* +validator/bin/registrar $project_id $site_path $schema_path $* 2>&1 From ad7e4a9281bddaa93574e8b681634661da39da8c Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 30 Jun 2020 12:56:43 -0700 Subject: [PATCH 04/19] Local-only projectId --- .../google/daq/mqtt/registrar/Registrar.java | 31 +++++++++++++------ .../google/daq/mqtt/util/CloudIotManager.java | 10 +++--- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index 8224394ff9..88d3b268b2 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -7,6 +7,7 @@ import com.google.api.services.cloudiot.v1.model.Device; import com.google.api.services.cloudiot.v1.model.DeviceCredential; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import com.google.daq.mqtt.util.*; import com.google.daq.mqtt.util.ExceptionMap.ErrorTree; import org.everit.json.schema.Schema; @@ -43,6 +44,7 @@ public class Registrar { .setDateFormat(new ISO8601DateFormat()) .setSerializationInclusion(Include.NON_NULL); public static final String ALL_MATCH = ""; + private static final String LOCAL_ONLY_PROJECT_ID = "--"; private CloudIotManager cloudIotManager; private File siteConfig; @@ -127,14 +129,16 @@ private void processDevices(String deviceRegex) { } extraDevices.remove(localName); try { - updateCloudIoT(localDevice); localDevice.writeConfigFile(); - Device device = Preconditions.checkNotNull(fetchDevice(localName), - "missing device " + localName); - BigInteger numId = Preconditions.checkNotNull(device.getNumId(), - "missing deviceNumId for " + localName); - localDevice.setDeviceNumId(numId.toString()); - sendMetadataMessage(localDevice); + if (!localOnly()) { + updateCloudIoT(localDevice); + Device device = Preconditions.checkNotNull(fetchDevice(localName), + "missing device " + localName); + BigInteger numId = Preconditions.checkNotNull(device.getNumId(), + "missing deviceNumId for " + localName); + localDevice.setDeviceNumId(numId.toString()); + sendMetadataMessage(localDevice); + } } catch (Exception e) { System.err.println("Deferring exception: " + e.toString()); localDevice.getErrors().put("Registering", e); @@ -209,8 +213,17 @@ private void shutdown() { } private List fetchDeviceList(Pattern devicePattern) { - System.err.println("Fetching remote registry " + cloudIotManager.getRegistryId()); - return cloudIotManager.fetchDeviceList(devicePattern); + if (localOnly()) { + System.err.println("Skipping remote registry fetch"); + return ImmutableList.of(); + } else { + System.err.println("Fetching remote registry " + cloudIotManager.getRegistryPath()); + return cloudIotManager.fetchDeviceList(devicePattern); + } + } + + private boolean localOnly() { + return LOCAL_ONLY_PROJECT_ID.equals(projectId); } private Map loadLocalDevices(Pattern devicePattern) { diff --git a/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java b/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java index f69c3bb0ae..1fec58ed0a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/CloudIotManager.java @@ -68,12 +68,12 @@ private static CloudIotConfig validate(CloudIotConfig cloudIotConfig) { return cloudIotConfig; } - private String getRegistryPath(String registryId) { + public String getRegistryPath() { return projectPath + "/registries/" + registryId; } private String getDevicePath(String registryId, String deviceId) { - return getRegistryPath(registryId) + "/devices/" + deviceId; + return getRegistryPath() + "/devices/" + deviceId; } private void initializeCloudIoT() { @@ -168,7 +168,7 @@ private GatewayConfig getGatewayConfig(CloudDeviceSettings settings) { private void createDevice(String deviceId, CloudDeviceSettings settings) throws IOException { try { - cloudIotRegistries.devices().create(getRegistryPath(registryId), + cloudIotRegistries.devices().create(getRegistryPath(), makeDevice(deviceId, settings, null)).execute(); } catch (GoogleJsonResponseException e) { throw new RuntimeException("Remote error creating device " + deviceId, e); @@ -205,7 +205,7 @@ public List fetchDeviceList(Pattern devicePattern) { try { List devices = cloudIotRegistries .devices() - .list(getRegistryPath(registryId)) + .list(getRegistryPath()) .setPageSize(LIST_PAGE_SIZE) .execute() .getDevices(); @@ -254,7 +254,7 @@ public Object getCloudRegion() { } public void bindDevice(String proxyDeviceId, String gatewayDeviceId) throws IOException { - cloudIotRegistries.bindDeviceToGateway(getRegistryPath(registryId), + cloudIotRegistries.bindDeviceToGateway(getRegistryPath(), getBindRequest(proxyDeviceId, gatewayDeviceId)).execute(); } From 55a5f2ba20d8ddf93d08075d29fd6b63c65991b0 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 30 Jun 2020 14:12:24 -0700 Subject: [PATCH 05/19] Updating deps --- ...terxml_jackson_core_jackson_annotations_2_11_0.xml} | 6 +++--- ...com_fasterxml_jackson_core_jackson_core_2_11_0.xml} | 6 +++--- ...fasterxml_jackson_core_jackson_databind_2_11_0.xml} | 6 +++--- ...kson_dataformat_jackson_dataformat_yaml_2_11_0.xml} | 6 +++--- ...ml_1_24.xml => Gradle__org_yaml_snakeyaml_1_26.xml} | 6 +++--- validator/.idea/modules/daq-validator.validator.iml | 10 +++++----- .../java/com/google/daq/mqtt/registrar/Registrar.java | 4 ++-- 7 files changed, 22 insertions(+), 22 deletions(-) rename validator/.idea/libraries/{Gradle__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml => Gradle__com_fasterxml_jackson_core_jackson_annotations_2_11_0.xml} (54%) rename validator/.idea/libraries/{Gradle__com_fasterxml_jackson_core_jackson_core_2_10_3.xml => Gradle__com_fasterxml_jackson_core_jackson_core_2_11_0.xml} (55%) rename validator/.idea/libraries/{Gradle__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml => Gradle__com_fasterxml_jackson_core_jackson_databind_2_11_0.xml} (55%) rename validator/.idea/libraries/{Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_3.xml => Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_0.xml} (68%) rename validator/.idea/libraries/{Gradle__org_yaml_snakeyaml_1_24.xml => Gradle__org_yaml_snakeyaml_1_26.xml} (50%) diff --git a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_11_0.xml similarity index 54% rename from validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml rename to validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_11_0.xml index 940abc9cd6..fef9a9403a 100644 --- a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml +++ b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_annotations_2_11_0.xml @@ -1,11 +1,11 @@ - + - + - + \ No newline at end of file diff --git a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_10_3.xml b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_11_0.xml similarity index 55% rename from validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_10_3.xml rename to validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_11_0.xml index c39a1aad89..93709bc78c 100644 --- a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_10_3.xml +++ b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_core_2_11_0.xml @@ -1,11 +1,11 @@ - + - + - + \ No newline at end of file diff --git a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_11_0.xml similarity index 55% rename from validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml rename to validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_11_0.xml index 401e4470cc..326959d4e0 100644 --- a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml +++ b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_core_jackson_databind_2_11_0.xml @@ -1,11 +1,11 @@ - + - + - + \ No newline at end of file diff --git a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_3.xml b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_0.xml similarity index 68% rename from validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_3.xml rename to validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_0.xml index eeaf4be6fe..8b4a7f585e 100644 --- a/validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_10_3.xml +++ b/validator/.idea/libraries/Gradle__com_fasterxml_jackson_dataformat_jackson_dataformat_yaml_2_11_0.xml @@ -1,11 +1,11 @@ - + - + - + \ No newline at end of file diff --git a/validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_24.xml b/validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_26.xml similarity index 50% rename from validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_24.xml rename to validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_26.xml index 6d98003d93..734cd9dad1 100644 --- a/validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_24.xml +++ b/validator/.idea/libraries/Gradle__org_yaml_snakeyaml_1_26.xml @@ -1,11 +1,11 @@ - + - + - + \ No newline at end of file diff --git a/validator/.idea/modules/daq-validator.validator.iml b/validator/.idea/modules/daq-validator.validator.iml index c07f3da9ef..f12ef8c574 100644 --- a/validator/.idea/modules/daq-validator.validator.iml +++ b/validator/.idea/modules/daq-validator.validator.iml @@ -12,8 +12,8 @@ - - + + @@ -46,9 +46,9 @@ - - - + + + diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index 88d3b268b2..c92394d0cb 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -280,8 +280,8 @@ private Map loadDevices(File devicesDir, String[] devices, Matcher deviceMatch = devicePattern.matcher(deviceName); if (deviceMatch.find() && LocalDevice.deviceExists(devicesDir, deviceName)) { System.err.println("Loading local device " + deviceName); - LocalDevice localDevice = new LocalDevice(devicesDir, deviceName, schemas); - localDevices.put(deviceName, localDevice); + LocalDevice localDevice = localDevices.computeIfAbsent(deviceName, + keyName -> new LocalDevice(devicesDir, deviceName, schemas)); try { localDevice.loadCredential(); } catch (Exception e) { From f1ba72e86162d18542e1a8202486620278c789ec Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 30 Jun 2020 22:25:26 -0700 Subject: [PATCH 06/19] Registrar fixes --- .../daq/mqtt/registrar/LocalDevice.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index f093ffad8d..b70250c730 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -51,7 +51,6 @@ class LocalDevice { private static final String RSA_CERT_PEM = "rsa_cert.pem"; private static final String RSA_PRIVATE_PEM = "rsa_private.pem"; private static final String RSA_PRIVATE_PKCS8 = "rsa_private.pkcs8"; - private static final String PHYSICAL_TAG_ERROR = "Physical tag %s %s does not match expected %s"; private static final Set DEVICE_FILES = ImmutableSet.of(METADATA_JSON); private static final Set KEY_FILES = ImmutableSet.of(RSA_PUBLIC_PEM, RSA_PRIVATE_PEM, RSA_PRIVATE_PKCS8); @@ -171,13 +170,13 @@ public DeviceCredential loadCredential() { public DeviceCredential readCredential() { try { if (hasGateway() && getAuthType() != null) { - throw new RuntimeException("Proxied devices should not have auth_type defined"); + throw new RuntimeException("Proxied devices should not have cloud.auth_type defined"); } if (!isDirectConnect()) { return null; } if (getAuthType() == null) { - throw new RuntimeException("Credential auth_type definition missing"); + throw new RuntimeException("Credential cloud.auth_type definition missing"); } File deviceKeyFile = new File(deviceDir, publicKeyFile()); if (!deviceKeyFile.exists()) { @@ -303,6 +302,7 @@ private String metadataString() { } public void validateEnvelope(String registryId, String siteName) { + checkConsistency(siteName); try { UdmiSchema.Envelope envelope = new UdmiSchema.Envelope(); envelope.deviceId = deviceId; @@ -315,7 +315,6 @@ public void validateEnvelope(String registryId, String siteName) { } catch (Exception e) { throw new IllegalStateException("Validating envelope " + deviceId, e); } - checkConsistency(siteName); } private String fakeProjectId() { @@ -323,15 +322,17 @@ private String fakeProjectId() { } private void checkConsistency(String expectedSite) { - String siteName = metadata.system.location.site; - String assetSite = metadata.system.physical_tag.asset.site; String assetName = metadata.system.physical_tag.asset.name; - Preconditions.checkState(expectedSite.equals(siteName), - String.format(PHYSICAL_TAG_ERROR, "location", siteName, expectedSite)); - Preconditions.checkState(expectedSite.equals(assetSite), - String.format(PHYSICAL_TAG_ERROR, "site", assetSite, expectedSite)); Preconditions.checkState(deviceId.equals(assetName), - String.format(PHYSICAL_TAG_ERROR, "name", assetName, deviceId)); + String.format("system.physical_tag.asset.name %s does not match expected %s", assetName, deviceId)); + + String assetSite = metadata.system.physical_tag.asset.site; + Preconditions.checkState(expectedSite.equals(assetSite), + String.format("system.physical_tag.asset.site %s does not match expected %s", assetSite, expectedSite)); + + String siteName = metadata.system.location.site; + Preconditions.checkState(expectedSite.equals(siteName), + String.format("system.location.site %s does not match expected %s", siteName, expectedSite)); } private String makeNumId(UdmiSchema.Envelope envelope) { From f808b64d1398889a17c1f0798f4fddbce0f457ee Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Fri, 3 Jul 2020 05:42:03 -0700 Subject: [PATCH 07/19] Increase pubber wait time --- pubber/src/main/java/daq/pubber/Pubber.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pubber/src/main/java/daq/pubber/Pubber.java b/pubber/src/main/java/daq/pubber/Pubber.java index 5f28a08efa..e1c385ef55 100644 --- a/pubber/src/main/java/daq/pubber/Pubber.java +++ b/pubber/src/main/java/daq/pubber/Pubber.java @@ -40,7 +40,7 @@ public class Pubber { private static final int MIN_REPORT_MS = 200; private static final int DEFAULT_REPORT_MS = 5000; private static final int CONFIG_WAIT_TIME_MS = 10000; - private static final int STATE_THROTTLE_MS = 1500; + private static final int STATE_THROTTLE_MS = 2000; private static final String CONFIG_ERROR_STATUS_KEY = "config_error"; private static final int LOGGING_MOD_COUNT = 10; @@ -262,8 +262,8 @@ private void publishLogMessage(String deviceId, String logMessage) { private void publishStateMessage(String deviceId) { lastStateTimeMs = sleepUntil(lastStateTimeMs + STATE_THROTTLE_MS); - info("Sending state message for device " + deviceId); deviceState.timestamp = new Date(); + info("Sending state message for device " + deviceId + " at " + deviceState.timestamp); mqttPublisher.publish(deviceId, STATE_TOPIC, deviceState); } From df1aa5ad8b2160441122a6afb286d5900e6f7a68 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Fri, 3 Jul 2020 05:47:24 -0700 Subject: [PATCH 08/19] Add sitePath to pubber config --- pubber/src/main/java/daq/pubber/Configuration.java | 1 + pubber/src/main/java/daq/pubber/Pubber.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/pubber/src/main/java/daq/pubber/Configuration.java b/pubber/src/main/java/daq/pubber/Configuration.java index 7c362781ef..e72d6919d2 100644 --- a/pubber/src/main/java/daq/pubber/Configuration.java +++ b/pubber/src/main/java/daq/pubber/Configuration.java @@ -10,6 +10,7 @@ public class Configuration { public String registryId; public String gatewayId; public String deviceId; + public String sitePath; public String keyFile = "local/rsa_private.pkcs8"; public byte[] keyBytes; public String algorithm = "RS256"; diff --git a/pubber/src/main/java/daq/pubber/Pubber.java b/pubber/src/main/java/daq/pubber/Pubber.java index e1c385ef55..237881846d 100644 --- a/pubber/src/main/java/daq/pubber/Pubber.java +++ b/pubber/src/main/java/daq/pubber/Pubber.java @@ -43,6 +43,7 @@ public class Pubber { private static final int STATE_THROTTLE_MS = 2000; private static final String CONFIG_ERROR_STATUS_KEY = "config_error"; private static final int LOGGING_MOD_COUNT = 10; + public static final String KEY_SITE_PATH_FORMAT = "%s/devices/%s/rsa_private.pkcs8"; private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); @@ -163,6 +164,10 @@ private void addPoint(AbstractPoint point) { } private void initialize() { + Preconditions.checkNotNull(configuration.deviceId, "configuration deviceId not defined"); + if (configuration.sitePath != null) { + configuration.keyFile = String.format(KEY_SITE_PATH_FORMAT, configuration.sitePath, configuration.deviceId); + } Preconditions.checkState(mqttPublisher == null, "mqttPublisher already defined"); Preconditions.checkNotNull(configuration.keyFile, "configuration keyFile not defined"); System.err.println("Loading device key file from " + configuration.keyFile); From aea207c4baf14fc3419dc12bc87f7bce4ed07290 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 22:12:49 -0700 Subject: [PATCH 09/19] Updating registrar to use DAC --- .../.idea/codeStyles/codeStyleConfig.xml | 2 +- .../daq/mqtt/util/FirestoreDataSink.java | 24 +++---------------- .../google/daq/mqtt/validator/Validator.java | 10 +++----- 3 files changed, 7 insertions(+), 29 deletions(-) diff --git a/validator/.idea/codeStyles/codeStyleConfig.xml b/validator/.idea/codeStyles/codeStyleConfig.xml index a55e7a179b..b9d18bf599 100644 --- a/validator/.idea/codeStyles/codeStyleConfig.xml +++ b/validator/.idea/codeStyles/codeStyleConfig.xml @@ -1,5 +1,5 @@ - \ No newline at end of file diff --git a/validator/src/main/java/com/google/daq/mqtt/util/FirestoreDataSink.java b/validator/src/main/java/com/google/daq/mqtt/util/FirestoreDataSink.java index 9a09a0cc9d..ac0d527f2a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/FirestoreDataSink.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/FirestoreDataSink.java @@ -1,6 +1,5 @@ package com.google.daq.mqtt.util; -import com.google.auth.Credentials; import com.google.auth.oauth2.GoogleCredentials; import com.google.cloud.ServiceOptions; import com.google.cloud.firestore.DocumentReference; @@ -8,9 +7,6 @@ import com.google.cloud.firestore.FirestoreOptions; import com.google.common.base.Preconditions; import com.google.daq.mqtt.util.ExceptionMap.ErrorTree; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; import java.time.Instant; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; @@ -19,8 +15,6 @@ public class FirestoreDataSink { - private static final String - CREDENTIAL_ERROR_FORMAT = "Credential file %s defined by %s not found."; private static final String VIEW_URL_FORMAT = "https://console.cloud.google.com/firestore/data/registries/?project=%s"; @@ -34,10 +28,10 @@ public class FirestoreDataSink { public FirestoreDataSink() { try { - Credentials projectCredentials = getProjectCredentials(); + GoogleCredentials credential = GoogleCredentials.getApplicationDefault(); FirestoreOptions firestoreOptions = FirestoreOptions.getDefaultInstance().toBuilder() - .setCredentials(projectCredentials) + .setCredentials(credential) .setProjectId(projectId) .setTimestampsInSnapshotsEnabled(true) .build(); @@ -48,20 +42,8 @@ public FirestoreDataSink() { } } - private Credentials getProjectCredentials() throws IOException { - File credentialFile = new File(System.getenv(ServiceOptions.CREDENTIAL_ENV_NAME)); - if (!credentialFile.exists()) { - throw new RuntimeException(String.format(CREDENTIAL_ERROR_FORMAT, - credentialFile.getAbsolutePath(), ServiceOptions.CREDENTIAL_ENV_NAME)); - } - try (FileInputStream serviceAccount = new FileInputStream(credentialFile)) { - return GoogleCredentials.fromStream(serviceAccount); - } - } - public void validationResult(String deviceId, String schemaId, Map attributes, - Object message, - ErrorTree errorTree) { + Object message, ErrorTree errorTree) { if (oldError.get() != null) { throw oldError.getAndSet(null); } diff --git a/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java b/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java index 5fc94ed99c..5afab37cbe 100644 --- a/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java +++ b/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java @@ -69,17 +69,13 @@ public class Validator { public static void main(String[] args) { Validator validator = new Validator(); try { - System.out.println(ServiceOptions.CREDENTIAL_ENV_NAME + "=" + - System.getenv(ServiceOptions.CREDENTIAL_ENV_NAME)); - if (args.length < 3 || args.length > 4) { - throw new IllegalArgumentException("Args: schema target inst_name [site]"); + if (args.length != 4) { + throw new IllegalArgumentException("Args: [schema] [target] [inst_name] [site]"); } validator.setSchemaSpec(args[0]); String targetSpec = args[1]; String instName = args[2]; - if (args.length >= 4) { - validator.setSiteDir(args[3]); - } + validator.setSiteDir(args[3]); if (targetSpec.startsWith(PUBSUB_PREFIX)) { String topicName = targetSpec.substring(PUBSUB_PREFIX.length()); validator.validatePubSub(instName, topicName); From 8909031da4fec599bd2df14f93bd3da024c4f028 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 22:19:45 -0700 Subject: [PATCH 10/19] Updating tool output --- bin/validate | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/bin/validate b/bin/validate index bd13b42612..9789659c11 100755 --- a/bin/validate +++ b/bin/validate @@ -20,16 +20,14 @@ if [ -z "$schema_path" ]; then false fi -validator/bin/build +echo Building validator... +validator/bin/build > /dev/null -unset GOOGLE_CLOUD_PROJECT -export GOOGLE_APPLICATION_CREDENTIALS=$PWD/$gcp_cred -echo Using credentials from $GOOGLE_APPLICATION_CREDENTIALS echo Configured topic is $gcp_topic echo Configured schema is $schema_path -if [ -n "$site_path" ]; then - echo Configured site path is $site_path -fi +echo Configured site path is $site_path echo +echo Running tools version `git describe` + validator/bin/validate $schema_path pubsub:$gcp_topic dev $site_path From cf0434a13497634bd9ded5223d1c0164bcc197be Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 23:16:19 -0700 Subject: [PATCH 11/19] Fix validation with no site --- validator/bin/test_schema | 2 +- .../main/java/com/google/daq/mqtt/validator/Validator.java | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/validator/bin/test_schema b/validator/bin/test_schema index c73505aa2e..f3adbf1657 100755 --- a/validator/bin/test_schema +++ b/validator/bin/test_schema @@ -59,7 +59,7 @@ for schema in $schemas; do error=0 reltest=${testpath#$rootdir/} - (cd $rootdir; java -jar $jarfile $schemaname $reltest $ignoreset) 2> $output || error=$? + (cd $rootdir; java -jar $jarfile $schemaname $reltest $ignoreset --) 2> $output || error=$? if [ $force == y ]; then diff $expected $output || echo Updating $expected && cp $output $expected else diff --git a/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java b/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java index 5afab37cbe..ca133f2769 100644 --- a/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java +++ b/validator/src/main/java/com/google/daq/mqtt/validator/Validator.java @@ -56,6 +56,7 @@ public class Validator { private static final String DEVICE_REGISTRY_ID_KEY = "deviceRegistryId"; private static final String UNKNOWN_SCHEMA_DEFAULT = "unknown"; private static final String POINTSET_TYPE = "pointset"; + private static final String NO_SITE = "--"; private FirestoreDataSink dataSink; private File schemaRoot; private String schemaSpec; @@ -75,7 +76,10 @@ public static void main(String[] args) { validator.setSchemaSpec(args[0]); String targetSpec = args[1]; String instName = args[2]; - validator.setSiteDir(args[3]); + String siteDir = args[3]; + if (!NO_SITE.equals(siteDir)) { + validator.setSiteDir(args[3]); + } if (targetSpec.startsWith(PUBSUB_PREFIX)) { String topicName = targetSpec.substring(PUBSUB_PREFIX.length()); validator.validatePubSub(instName, topicName); From 88fa35ee852fc80917fc3fb0fb2952ef58f8f4a3 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 23:46:14 -0700 Subject: [PATCH 12/19] Lint fixes --- .checkstyle.xml | 2 +- pubber/src/main/java/daq/pubber/Pubber.java | 8 +++--- validator/bin/validate | 3 +++ .../google/daq/mqtt/registrar/Registrar.java | 27 ++++++++++++------- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.checkstyle.xml b/.checkstyle.xml index a214cc83f6..469a132853 100644 --- a/.checkstyle.xml +++ b/.checkstyle.xml @@ -42,7 +42,7 @@ - + diff --git a/pubber/src/main/java/daq/pubber/Pubber.java b/pubber/src/main/java/daq/pubber/Pubber.java index 237881846d..1265b65e53 100644 --- a/pubber/src/main/java/daq/pubber/Pubber.java +++ b/pubber/src/main/java/daq/pubber/Pubber.java @@ -8,9 +8,6 @@ import daq.udmi.Message.Pointset; import daq.udmi.Message.PointsetState; import daq.udmi.Message.State; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.io.File; import java.nio.file.Files; import java.nio.file.Path; @@ -24,6 +21,8 @@ import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Pubber { @@ -166,7 +165,8 @@ private void addPoint(AbstractPoint point) { private void initialize() { Preconditions.checkNotNull(configuration.deviceId, "configuration deviceId not defined"); if (configuration.sitePath != null) { - configuration.keyFile = String.format(KEY_SITE_PATH_FORMAT, configuration.sitePath, configuration.deviceId); + configuration.keyFile = String.format(KEY_SITE_PATH_FORMAT, configuration.sitePath, + configuration.deviceId); } Preconditions.checkState(mqttPublisher == null, "mqttPublisher already defined"); Preconditions.checkNotNull(configuration.keyFile, "configuration keyFile not defined"); diff --git a/validator/bin/validate b/validator/bin/validate index 910021f982..9311e5a718 100755 --- a/validator/bin/validate +++ b/validator/bin/validate @@ -20,6 +20,9 @@ if [ ! -f $jarfile ]; then validator/bin/build fi +echo Using gcloud auth: +gcloud config get-value account + echo Executing validator $schema $target... echo Validating against schema $schemafile into validations/ diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index c92394d0cb..307114325f 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -1,5 +1,7 @@ package com.google.daq.mqtt.registrar; +import static java.util.stream.Collectors.toSet; + import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; @@ -8,24 +10,29 @@ import com.google.api.services.cloudiot.v1.model.DeviceCredential; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.daq.mqtt.util.*; +import com.google.daq.mqtt.util.CloudDeviceSettings; +import com.google.daq.mqtt.util.CloudIotManager; +import com.google.daq.mqtt.util.ConfigUtil; +import com.google.daq.mqtt.util.ExceptionMap; import com.google.daq.mqtt.util.ExceptionMap.ErrorTree; -import org.everit.json.schema.Schema; -import org.everit.json.schema.loader.SchemaClient; -import org.everit.json.schema.loader.SchemaLoader; -import org.json.JSONObject; -import org.json.JSONTokener; - +import com.google.daq.mqtt.util.PubSubPusher; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.math.BigInteger; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; - -import static java.util.stream.Collectors.toSet; +import org.everit.json.schema.Schema; +import org.everit.json.schema.loader.SchemaClient; +import org.everit.json.schema.loader.SchemaLoader; +import org.json.JSONObject; +import org.json.JSONTokener; public class Registrar { From 9d9e2b24c5589c3efe83f97bdca015faf52a07b0 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 23:51:34 -0700 Subject: [PATCH 13/19] Clarifying registrar error files message --- .../main/java/com/google/daq/mqtt/registrar/LocalDevice.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index b70250c730..8361f78162 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -342,11 +342,12 @@ private String makeNumId(UdmiSchema.Envelope envelope) { public void writeErrors() { File errorsFile = new File(deviceDir, DEVICE_ERRORS_JSON); - System.err.println("Updating " + errorsFile); if (exceptionMap.isEmpty()) { + System.err.println("Removing " + errorsFile); errorsFile.delete(); return; } + System.err.println("Updating " + errorsFile); try (PrintStream printStream = new PrintStream(new FileOutputStream(errorsFile))) { ExceptionMap.ErrorTree errorTree = ExceptionMap.format(exceptionMap, ERROR_FORMAT_INDENT); errorTree.write(printStream); From 43c4bb149f3a7c9143f15d51084684e099d91715 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Tue, 7 Jul 2020 23:57:26 -0700 Subject: [PATCH 14/19] Add debugging --- .../src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java | 1 + 1 file changed, 1 insertion(+) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index 8361f78162..eb3656e15a 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -387,6 +387,7 @@ public void writeConfigFile() { try (OutputStream outputStream = new FileOutputStream(configFile)) { outputStream.write(settings.config.getBytes()); } catch (Exception e) { + e.printStackTrace(); throw new RuntimeException("While writing "+ configFile.getAbsolutePath(), e); } } From ad74f7905e2d7a7e5dc400ee62fbc7e3cfc56e40 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Wed, 8 Jul 2020 00:25:02 -0700 Subject: [PATCH 15/19] Cleaning up invalid device handling --- validator/bin/registrar | 3 ++- validator/bin/validate | 2 +- .../java/com/google/daq/mqtt/registrar/LocalDevice.java | 8 ++------ .../java/com/google/daq/mqtt/registrar/Registrar.java | 2 +- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/validator/bin/registrar b/validator/bin/registrar index 528aed8798..49dc18d1e3 100755 --- a/validator/bin/registrar +++ b/validator/bin/registrar @@ -17,7 +17,7 @@ schema_dir=$3 device_filter=$4 echo Using gcloud auth: -gcloud config get-value account +gcloud config get-value account || true echo Using cloud project $project_id echo Using site config dir $devices_dir @@ -27,6 +27,7 @@ echo Using device filter $device_filter JAVA=/usr/lib/jvm/java-11-openjdk-amd64/bin/java error=0 +echo java args $project_id $devices_dir $schema_dir $device_filter $JAVA -cp $jarfile $mainclass $project_id $devices_dir $schema_dir $device_filter || error=$? echo Registrar complete, exit $error diff --git a/validator/bin/validate b/validator/bin/validate index 9311e5a718..e79c158756 100755 --- a/validator/bin/validate +++ b/validator/bin/validate @@ -21,7 +21,7 @@ if [ ! -f $jarfile ]; then fi echo Using gcloud auth: -gcloud config get-value account +gcloud config get-value account || true echo Executing validator $schema $target... diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index eb3656e15a..0cfb875e6e 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -228,10 +228,6 @@ boolean isDirectConnect() { return isGateway() || !hasGateway(); } - String getGatewayId() { - return hasGateway() ? metadata.gateway.gateway_id : null; - } - CloudDeviceSettings getSettings() { try { if (settings != null) { @@ -408,8 +404,8 @@ public ExceptionMap getErrors() { return exceptionMap; } - public boolean hasValidMetadata() { - return metadata != null; + public boolean isValid() { + return metadata != null && settings != null; } private static class ProperPrettyPrinterPolicy extends DefaultPrettyPrinter { diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index 307114325f..19836af7cb 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -130,7 +130,7 @@ private void processDevices(String deviceRegex) { Set extraDevices = cloudDevices.stream().map(Device::getId).collect(toSet()); for (String localName : localDevices.keySet()) { LocalDevice localDevice = localDevices.get(localName); - if (!localDevice.hasValidMetadata()) { + if (!localDevice.isValid()) { System.err.println("Skipping (invalid) " + localName); continue; } From eecf7a5156f88d09c1be840e35a88b90111d48d7 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Wed, 8 Jul 2020 07:27:09 -0700 Subject: [PATCH 16/19] Clean up handling of proxy devices with no keys --- .../java/com/google/daq/mqtt/registrar/LocalDevice.java | 6 ++---- .../java/com/google/daq/mqtt/registrar/Registrar.java | 8 +++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java index 0cfb875e6e..e32dc8b2b0 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/LocalDevice.java @@ -67,7 +67,6 @@ class LocalDevice { private final Map schemas; private final File deviceDir; private final UdmiSchema.Metadata metadata; - private final File devicesDir; private final ExceptionMap exceptionMap; private String deviceNumId; @@ -79,7 +78,6 @@ class LocalDevice { try { this.deviceId = deviceId; this.schemas = schemas; - this.devicesDir = devicesDir; exceptionMap = new ExceptionMap("Exceptions for " + deviceId); deviceDir = new File(devicesDir, deviceId); metadata = readMetadata(); @@ -381,7 +379,7 @@ void writeNormalized() { public void writeConfigFile() { File configFile = new File(deviceDir, GENERATED_CONFIG_JSON); try (OutputStream outputStream = new FileOutputStream(configFile)) { - outputStream.write(settings.config.getBytes()); + outputStream.write(getSettings().config.getBytes()); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("While writing "+ configFile.getAbsolutePath(), e); @@ -405,7 +403,7 @@ public ExceptionMap getErrors() { } public boolean isValid() { - return metadata != null && settings != null; + return metadata != null; } private static class ProperPrettyPrinterPolicy extends DefaultPrettyPrinter { diff --git a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java index 19836af7cb..e665d9ed16 100644 --- a/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java +++ b/validator/src/main/java/com/google/daq/mqtt/registrar/Registrar.java @@ -99,7 +99,7 @@ private void writeErrors() throws Exception { .put(device.getDeviceId(), "True"); } }); - if (!blockErrors.isEmpty()) { + if (blockErrors != null && !blockErrors.isEmpty()) { errorSummary.put("Block", blockErrors.stream().collect(Collectors.toMap( Map.Entry::getKey, entry -> entry.getValue().toString()))); } @@ -151,8 +151,10 @@ private void processDevices(String deviceRegex) { localDevice.getErrors().put("Registering", e); } } - bindGatewayDevices(localDevices); - blockErrors = blockExtraDevices(extraDevices); + if (!localOnly()) { + bindGatewayDevices(localDevices); + blockErrors = blockExtraDevices(extraDevices); + } System.err.println(String.format("Processed %d devices", localDevices.size())); } catch (Exception e) { throw new RuntimeException("While processing devices", e); From e860fb97ba0280583d94facad29603830a4e9195 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Wed, 8 Jul 2020 08:38:30 -0700 Subject: [PATCH 17/19] Show entire UDMI activation logs --- testing/test_aux.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/testing/test_aux.sh b/testing/test_aux.sh index ebf75ee79c..bb5af199af 100755 --- a/testing/test_aux.sh +++ b/testing/test_aux.sh @@ -128,6 +128,7 @@ head inst/gw*/nodes/gw*/activate.log head inst/run-port-*/nodes/*/activate.log head inst/run-port-*/nodes/*/tmp/report.txt ls inst/run-port-01/finish/fail01/ | tee -a $TEST_RESULTS +more inst/run-port-*/nodes/udmi*/activate.log # Add the port-01 and port-02 module config into the file echo port-01 module_config modules | tee -a $TEST_RESULTS From 96b09003c2e294c5ad80a27a13cc9ada53d04eb9 Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Wed, 8 Jul 2020 09:54:48 -0700 Subject: [PATCH 18/19] Fix udmi validator test --- subset/cloud/test_udmi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subset/cloud/test_udmi b/subset/cloud/test_udmi index fde175a26d..aa484f5434 100755 --- a/subset/cloud/test_udmi +++ b/subset/cloud/test_udmi @@ -60,7 +60,7 @@ echo Configured schema is $schema_path echo Target device is $device_id echo -timeout 60 validator/bin/validate $PWD/$schema_path pubsub:$gcp_topic $service_id-$HOSTNAME || true +timeout 60 validator/bin/validate $PWD/$schema_path pubsub:$gcp_topic $service_id-$HOSTNAME -- || true function message_report { message_type=$1 From ca30c0389069c664bb8aa21a79174e0d0b832cab Mon Sep 17 00:00:00 2001 From: Trevor Pering Date: Wed, 8 Jul 2020 15:02:57 -0700 Subject: [PATCH 19/19] Remove extra debugging --- testing/test_aux.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/testing/test_aux.sh b/testing/test_aux.sh index f25db137f5..f78d30f506 100755 --- a/testing/test_aux.sh +++ b/testing/test_aux.sh @@ -129,7 +129,6 @@ head inst/gw*/nodes/gw*/activate.log head inst/run-port-*/nodes/*/activate.log head inst/run-port-*/nodes/*/tmp/report.txt ls inst/run-port-01/finish/fail01/ | tee -a $TEST_RESULTS -more inst/run-port-*/nodes/udmi*/activate.log # Add the port-01 and port-02 module config into the file echo port-01 module_config modules | tee -a $TEST_RESULTS