Skip to content

Commit

Permalink
tests: add troubleshoot add-on
Browse files Browse the repository at this point in the history
  • Loading branch information
joelguittet committed Aug 4, 2023
1 parent 85547ad commit cab6a30
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 7 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/build_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@ mkdir build
cd build

# Build ESP-IDF use case
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="freertos" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="freertos" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="freertos" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="esp-idf" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="freertos" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)

# Build Zephyr use case
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="zephyr" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)

# Build Posix use case
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="curl" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="curl" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=ON -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="curl" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON
cmake .. -G "Unix Makefiles" -DCONFIG_MENDER_MCU_CLIENT_BOARD_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_NET_TYPE="curl" -DCONFIG_MENDER_MCU_CLIENT_RTOS_TYPE="posix" -DCONFIG_MENDER_MCU_CLIENT_TLS_TYPE="mbedtls" -DCONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE=ON -DCONFIG_MENDER_CLIENT_CONFIGURE_STORAGE=OFF -DCONFIG_MENDER_CLIENT_ADD_ON_INVENTORY=ON -DCONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT=ON
make -j$(nproc)
9 changes: 8 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,14 @@ jobs:
- name: Install libcurl
run: |
wget -q -O - https://github.com/curl/curl/archive/refs/tags/curl-8_1_2.tar.gz | tar xz
cd curl-curl-8_1_2 && autoreconf -fi && ./configure --with-openssl && make && sudo make install
cd curl-curl-8_1_2 && autoreconf -fi && ./configure --with-openssl --enable-websockets && make -j$(nproc) && sudo make install
- name: Install msgpack-c
run: |
wget -q -O - https://github.com/msgpack/msgpack-c/archive/refs/tags/c-6.0.0.tar.gz | tar xz
cd msgpack-c-c-6.0.0 && cmake . -DMSGPACK_BUILD_TESTS=OFF -DMSGPACK_BUILD_EXAMPLES=OFF && make -j$(nproc) && sudo make install
- name: Refresh the dynamic linker cache
run: |
sudo ldconfig
- name: Run build-wrapper
run: |
build-wrapper-linux-x86-64 --out-dir bw_output ./.github/workflows/build_tests.sh
Expand Down
6 changes: 6 additions & 0 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ if(CONFIG_MENDER_CLIENT_ADD_ON_INVENTORY)
add_compile_definitions(CONFIG_MENDER_CLIENT_INVENTORY_REFRESH_INTERVAL=${CONFIG_MENDER_CLIENT_INVENTORY_REFRESH_INTERVAL})
endif()
endif()
if(CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT)
add_compile_definitions(CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT)
endif()

# Add definitions depending of the target
if(CONFIG_MENDER_MCU_CLIENT_BOARD_TYPE MATCHES "zephyr")
Expand Down Expand Up @@ -127,6 +130,9 @@ include("${CMAKE_CURRENT_LIST_DIR}/../CMakeLists.txt")

# Link the executable with the mender-mcu-library
target_link_libraries(${APP_EXECUTABLE_NAME} mender-mcu-client pthread)
if(CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT)
target_link_libraries(${APP_EXECUTABLE_NAME} msgpack-c)
endif()
if(CONFIG_MENDER_MCU_CLIENT_NET_TYPE MATCHES "curl")
target_link_libraries(${APP_EXECUTABLE_NAME} curl)
endif()
Expand Down
86 changes: 86 additions & 0 deletions tests/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include "mender-inventory.h"
#include "mender-log.h"
#include "mender-ota.h"
#include "mender-troubleshoot.h"

/**
* @brief Mender client options
Expand Down Expand Up @@ -72,6 +73,12 @@ authentication_success_cb(void) {
return ret;
}
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_INVENTORY */
#ifdef CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT
if (MENDER_OK != (ret = mender_troubleshoot_activate())) {
mender_log_error("Unable to activate troubleshoot add-on");
return ret;
}
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT */

/* Validate the image if it is still pending */
/* Note it is possible to do multiple diagnosic tests before validating the image */
Expand Down Expand Up @@ -161,6 +168,70 @@ config_updated_cb(mender_keystore_t *configuration) {
#endif /* CONFIG_MENDER_CLIENT_CONFIGURE_STORAGE */
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_CONFIGURE */

#ifdef CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT

/**
* @brief Shell connected callback
* @param terminal_height Terminal height
* @param terminal_width Terminal width
* @return MENDER_OK if the function succeeds, error code otherwise
*/
static mender_err_t
shell_connected_cb(uint16_t terminal_height, uint16_t terminal_width) {

/* Just print terminal size */
mender_log_info("Shell connected with height=%d and width=%d", terminal_height, terminal_width);

return MENDER_OK;
}

/**
* @brief Shell resized callback
* @param terminal_height Terminal height
* @param terminal_width Terminal width
* @return MENDER_OK if the function succeeds, error code otherwise
*/
static mender_err_t
shell_resized_cb(uint16_t terminal_height, uint16_t terminal_width) {

/* Just print terminal size */
mender_log_info("Shell resized with height=%d and width=%d", terminal_height, terminal_width);

return MENDER_OK;
}

/**
* @brief Shell data callback
* @param body Shell data received
* @return MENDER_OK if the function succeeds, error code otherwise
*/
static mender_err_t
shell_data_cb(char *body) {

/* Specific treatement in case carriage return is received */
if (!strcmp(body, "\r")) {
return mender_troubleshoot_shell_print("\r\n");
}

/* Just send back the data received */
return mender_troubleshoot_shell_print(body);
}

/**
* @brief Shell disconnected callback
* @return MENDER_OK if the function succeeds, error code otherwise
*/
static mender_err_t
shell_disconnected_cb(void) {

/* Just print disconnected */
mender_log_info("Shell disconnected");

return MENDER_OK;
}

#endif /* CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT */

/**
* @brief Signal handler
* @param signo Signal number
Expand Down Expand Up @@ -296,13 +367,28 @@ main(int argc, char **argv) {
mender_inventory_config_t mender_inventory_config = { .refresh_interval_s = 0 };
mender_inventory_init(&mender_inventory_config);
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_INVENTORY */
#ifdef CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT
mender_troubleshoot_config_t mender_troubleshoot_config = { .poll_interval_ms = 0, .healthcheck_interval_ms = 0 };
mender_troubleshoot_callbacks_t mender_troubleshoot_callbacks = {
.shell_connected = shell_connected_cb, .shell_resized = shell_resized_cb, .shell_data = shell_data_cb, .shell_disconnected = shell_disconnected_cb
};
mender_troubleshoot_init(&mender_troubleshoot_config, &mender_troubleshoot_callbacks);
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT */

/* Wait for mender-mcu-client events */
pthread_mutex_lock(&mender_client_events_mutex);
pthread_cond_wait(&mender_client_events_cond, &mender_client_events_mutex);
pthread_mutex_unlock(&mender_client_events_mutex);

/* Deactivate mender add-ons */
#ifdef CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT
mender_troubleshoot_deactivate();
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT */

/* Release mender add-ons */
#ifdef CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT
mender_troubleshoot_exit();
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_TROUBLESHOOT */
#ifdef CONFIG_MENDER_CLIENT_ADD_ON_INVENTORY
mender_inventory_exit();
#endif /* CONFIG_MENDER_CLIENT_ADD_ON_INVENTORY */
Expand Down

0 comments on commit cab6a30

Please sign in to comment.