From 5863526d53f1a67789588f6677a5de5741f93f95 Mon Sep 17 00:00:00 2001 From: Trevor Date: Tue, 5 Dec 2023 08:59:09 -0500 Subject: [PATCH] registrar command line fixes for working with single devices (#780) --- .github/workflows/testing.yml | 2 +- bin/registrar | 15 +++++-- bin/test_regclean | 41 +++++++++++++++++-- etc/shell_common.sh | 4 ++ .../daq/mqtt/util/IotReflectorClient.java | 2 +- .../daq/mqtt/util/MessagePublisher.java | 5 ++- 6 files changed, 58 insertions(+), 11 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 49d738b2c5..c1c529d7c7 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -204,7 +204,7 @@ jobs: - name: base setup run: bin/run_tests install_dependencies - name: registrar clean - run: bin/test_regclean $TARGET_PROJECT + run: bin/test_regclean solo $TARGET_PROJECT - name: telemetry validator run: bin/test_validator $TARGET_PROJECT - name: validator result diff --git a/bin/registrar b/bin/registrar index aeeba4a405..d0dcea1688 100755 --- a/bin/registrar +++ b/bin/registrar @@ -16,7 +16,7 @@ shift cd $UDMI_ROOT -if [[ -z $1 || $1 =~ ^- ]]; then +if [[ -z $1 || $1 =~ ^- || -f $site_path ]]; then [[ -f $site_path ]] || echo No project ID supplied with site directory. else project_id=$1 @@ -25,8 +25,7 @@ fi iot_config=$site_path/cloud_iot_config.json if [[ -d $site_path && ! -f $iot_config ]]; then - echo Config file not found: $iot_config - false + fail Config file not found: $iot_config elif [[ -d $site_path && -z $project_id ]]; then echo No project defined, dry run only. fi @@ -49,6 +48,14 @@ echo Running tools version `git describe` quoted_namespace=null quoted_bridge=null iot_provider=null +if [[ -f $site_path ]]; then + if [[ $1 =~ ^// || $1 =~ @ ]]; then + project_id=$1 + shift + fi + echo Project_id is $project_id +fi + if [[ $project_id =~ ^// ]]; then no_prefix=${project_id#//} iot_provider=\"${no_prefix%%/*}\" @@ -92,3 +99,5 @@ echo validator/bin/registrar $config_file $* 2>&1 | tee $OUT_DIR/registrar.log bin/check_version + +search "Registrar complete, exit 0" $OUT_DIR/registrar.log diff --git a/bin/test_regclean b/bin/test_regclean index f6d4a9137c..54fa3918df 100755 --- a/bin/test_regclean +++ b/bin/test_regclean @@ -3,14 +3,23 @@ # Force consistent sort order export LC_ALL=C -ROOT_DIR=$(dirname $0)/.. -cd $ROOT_DIR +UDMI_ROOT=$(dirname $0)/.. +cd $UDMI_ROOT -if [[ $# -ne 1 ]]; then +source etc/shell_common.sh + +solo_arg= + +if [[ $# -lt 1 ]]; then echo Usage: $0 PROJECT_ID[@BROKER] false fi +if [[ $1 == solo ]]; then + solo_arg=AHU-1 + shift +fi + project_id=$1 shift @@ -119,11 +128,35 @@ pubber/bin/run $pubber_config echo Successful pubber check passed on clean registry. +if [[ -n $solo_arg ]]; then + echo Deleting singular entry $solo_arg... + echo bin/registrar $site_arg $registrar_project -d $solo_arg + bin/registrar $site_arg $registrar_project -d $solo_arg + search "Deleting device $solo_arg \(1/1)" out/registrar.log + search "Deleted 1 devices" out/registrar.log + + echo Sleeping to avoid IoT Core race condition... + sleep 20 + + echo bin/registrar /tmp/registrar_config.json $solo_arg + bin/registrar /tmp/registrar_config.json $solo_arg + + echo Checking creation of one device + search "Processing 1 new devices..." out/registrar.log + search "Processed $solo_arg \(1/1) in [0-9.]+s \(add)" out/registrar.log + search "Processed 1 \(skipped 0) devices in " out/registrar.log + search "Updating 0 existing devices" out/registrar.log + search "Processed 0 \(skipped 0) devices in " out/registrar.log + echo Done with solo update test for $solo_arg +fi + if [[ -n $UDMI_ALT_REGISTRY ]]; then - echo Registering alt registry... + echo Registering alt registry $UDMI_ALT_REGISTRY... site_file=$site_arg/cloud_iot_config.json cp $site_file $site_file-tmp jq ".registry_id = \"$UDMI_ALT_REGISTRY\"" $site_file-tmp > $site_file + echo bin/registrar $site_arg $registrar_project -u bin/registrar $site_arg $registrar_project -u mv $site_file-tmp $site_file + echo Done with registering alt registry fi diff --git a/etc/shell_common.sh b/etc/shell_common.sh index bb20d67c57..169cecf007 100644 --- a/etc/shell_common.sh +++ b/etc/shell_common.sh @@ -14,6 +14,10 @@ function find_site_model_root { done } +function search { + egrep "$1" $2 || fail Could not find in $2: $1 +} + function fail { echo error: $* false diff --git a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java index b881e1905f..b1453bc522 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/IotReflectorClient.java @@ -148,7 +148,7 @@ public Set fetchDeviceIds(String forGatewayId) { private CloudModel fetchCloudModel(String deviceId) { try { Map message = transaction(deviceId, CLOUD_QUERY_TOPIC, EMPTY_MESSAGE, - MessagePublisher.QuerySpeed.LONG); + QuerySpeed.ETERNITY); return convertToStrict(CloudModel.class, message); } catch (Exception e) { if (e.getMessage().contains("NOT_FOUND")) { diff --git a/validator/src/main/java/com/google/daq/mqtt/util/MessagePublisher.java b/validator/src/main/java/com/google/daq/mqtt/util/MessagePublisher.java index 8ad7912a04..0f1e57fd21 100644 --- a/validator/src/main/java/com/google/daq/mqtt/util/MessagePublisher.java +++ b/validator/src/main/java/com/google/daq/mqtt/util/MessagePublisher.java @@ -35,7 +35,7 @@ static MessagePublisher from(ExecutionConfiguration iotConfig, BiConsumer messageHandler, Consumer errorHandler) { IotAccess.IotProvider iotProvider = ofNullable(iotConfig.iot_provider).orElse(IMPLICIT); if (iotConfig.reflector_endpoint != null && iotProvider != IMPLICIT) { - throw new RuntimeException("Explicit endpoint conflicts with iot_provider " + iotProvider); + iotConfig.reflector_endpoint = null; } if (PUBSUB == iotConfig.iot_provider) { return PubSubReflector.from(iotConfig, messageHandler, errorHandler); @@ -76,7 +76,8 @@ default Credential getCredential() { enum QuerySpeed { QUICK(1), SHORT(15), - LONG(30); + LONG(30), + ETERNITY(90); private final int seconds;