예제 #1
0
 def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
     env_value = os.getenv(self.friendly_key)
     if not env_value:
         diagnostics_report.record_failure(
             "Env var %s not set" % self.friendly_key, self)
     else:
         diagnostics_report.record_result(env_value, self)
예제 #2
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        try:
            serial_number = open(
                self.SERIAL_FILEPATH).readline().rstrip('\x00')
            diagnostics_report.record_result(serial_number, self)

        except FileNotFoundError as e:
            diagnostics_report.record_failure(e, self)

        except PermissionError as e:
            diagnostics_report.record_failure(e, self)
예제 #3
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        def get_result(key) -> bool:
            return key in diagnostics_report and \
                   diagnostics_report[key]

        all_passed = all(map(get_result, self.CHECK_KEYS))

        if all_passed:
            diagnostics_report.record_result(True, self)
        else:
            diagnostics_report.record_failure(False, self)
예제 #4
0
    def use_verified_json(self, diagnostics_report: DiagnosticsReport) -> None:
        if SHUTDOWN_GATEWAY_KEY not in self.verified_json:
            diagnostics_report.record_failure(self.NO_SHUTDOWN_GATEWAY_KEY_MSG,
                                              self)
            return

        try:
            balena_supervisor = BalenaSupervisor.new_from_env()
            shutdown_response = balena_supervisor.shutdown()
            diagnostics_report.record_result(shutdown_response, self)
        except Exception as e:
            diagnostics_report.record_failure(e, self)
예제 #5
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        try:
            balena_supervisor = BalenaSupervisor.new_from_env()
            device_status = balena_supervisor.get_device_status('appState')

            if device_status == 'applied':
                diagnostics_report.record_result("device_ready", self)
            else:
                diagnostics_report.record_failure(
                    f"appState is {device_status}", self)

        except Exception as e:
            diagnostics_report.record_failure(e, self)
    def use_verified_json(self, diagnostics_report: DiagnosticsReport) -> None:
        if DESTINATION_WALLETS_KEY not in self.verified_json:
            diagnostics_report.record_failure(self.NO_DESTINATION_WALLETS_MSG,
                                              self)
            return

        destination_wallet = secrets.choice(
            self.verified_json[DESTINATION_WALLETS_KEY])

        try:
            add_gateway_txn = create_add_gateway_txn(destination_wallet)
            diagnostics_report.record_result(add_gateway_txn, self)
        except Exception as e:
            diagnostics_report.record_failure(e, self)
예제 #7
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        LOGGER.info("Retrieving list of LTE device(s)")

        try:
            lte_devices = self.get_lte_devices()
            LOGGER.info(f"Found the following LTE devices: {lte_devices}")
            self.process_lte_devices(lte_devices, diagnostics_report)

        except dbus.exceptions.DBusException as e:
            LOGGER.error(e.get_dbus_message())
            diagnostics_report.record_failure(e, self)

        except Exception as e:
            LOGGER.error(f"Error while retrieving list of LTE devices: {e}")
            diagnostics_report.record_failure(e, self)
예제 #8
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        LOGGER.debug("Retrieving list of Bluetooth device(s)")

        try:
            bt_devices = self.get_bt_devices()
            LOGGER.info(f"Found the following Bluetooth devices: {bt_devices}")
            self.process_bt_devices(bt_devices, diagnostics_report)

        except dbus.exceptions.DBusException as e:
            LOGGER.error(e.get_dbus_message())
            diagnostics_report.record_failure(e, self)

        except Exception as e:
            LOGGER.error("Error while retrieving list of Bluetooth devices: %s"
                         % e)
            diagnostics_report.record_failure(e, self)
예제 #9
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        # Try to get key, but there may be ECC lock or other failure
        try:
            public_keys = get_public_keys_rust()
        except ECCMalfunctionException as e:
            diagnostics_report.record_failure(e, self)
            return
        except UnboundLocalError as e:
            diagnostics_report.record_failure(e, self)
            return
        except (FileNotFoundError, NotADirectoryError) as e:
            diagnostics_report.record_failure(e, self)
            return
        except ResourceBusyError as e:
            diagnostics_report.record_failure(e, self)
            return
        except Exception as e:
            diagnostics_report.record_failure(e, self)
            return

        # Record key value, or report failure if unable to parse
        try:
            diagnostics_report.record_result(public_keys[self.key_path], self)
        except KeyError:
            err_msg = "Key %s not found" % self.key_path
            diagnostics_report.record_failure(err_msg, self)
예제 #10
0
 def process_lte_devices(self, lte_devices: list,
                         diagnostics_report: DiagnosticsReport) -> None:
     if len(lte_devices) > 0:
         diagnostics_report.record_result(lte_devices, self)
     else:
         diagnostics_report.record_failure(self.NO_LTE_DEVICES_MSG, self)
예제 #11
0
    def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
        try:
            ecc_tests = get_gateway_mfr_test_result()

            if ecc_tests['result'] == 'pass':
                diagnostics_report.record_result(True, self)
            else:
                msg = "gateway_mfr test finished with error, %s" % \
                      str(json.dumps(ecc_tests))
                diagnostics_report.record_failure(msg, self)

        except ECCMalfunctionException as e:
            LOGGER.exception(e)
            diagnostics_report.record_failure(e, self)

        except GatewayMFRFileNotFoundException as e:
            LOGGER.exception(e)
            diagnostics_report.record_failure(e, self)

        except ResourceBusyError as e:
            LOGGER.exception(e)
            diagnostics_report.record_failure(e, self)

        except UnboundLocalError as e:
            LOGGER.exception(e)
            diagnostics_report.record_failure(e, self)

        except Exception as e:
            LOGGER.exception(e)
            diagnostics_report.record_failure(e, self)
예제 #12
0
 def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
     if lora_module_test():
         diagnostics_report.record_result(True, self)
     else:
         diagnostics_report.record_failure(False, self)
예제 #13
0
def compose_diagnostics_report_from_err_msg(diagnostic_key: str,
                                            err_msg: str) -> DiagnosticsReport:
    diagnostics_report = DiagnosticsReport()
    diagnostic = Diagnostic(diagnostic_key, diagnostic_key)
    diagnostics_report.record_failure(err_msg, diagnostic)
    return diagnostics_report
예제 #14
0
 def perform_test(self, diagnostics_report: DiagnosticsReport) -> None:
     try:
         mac_address = get_mac_address(self.mac_filepath)
         diagnostics_report.record_result(mac_address, self)
     except Exception as e:
         diagnostics_report.record_failure(str(e), self)