From 5869ea27ec60e2d6cc71bbe51988b376e3a23f01 Mon Sep 17 00:00:00 2001 From: Sebastian Opsahl Date: Sun, 26 May 2024 22:42:07 +0200 Subject: [PATCH] chore: updating tests for new way of requesting JWT tokens in mender-connect MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR is made to change the mocks and testflow in tests to better fit the new implementation of the PR :point_right: https://github.com/mendersoftware/mender-connect/pull/134. This PR fixes it so `mender-connect` requests a new JWT token on its own, so its not dependent on `mender-update` to do so. Previously `FetchJWTToken()` wasn’t called which wouldn’t let it call the JWT token independently, which made it dependent on `mender-update`. The proposed fix is using `FetchJWTToken()` to fetch the token, to then for `WaitForJwtTokenStateChange()` to retrieve it in it’s waiting. The old mocks and test flow for the tests seemed to be more tailored to test the functionality with `GetJWTToken()`. This PR proposes a change in the mocks and test flow to better test the new implementation. Changelog: None Ticket: MEN-6877 Signed-off-by: Sebastian Opsahl --- tests/acceptance/mocks/mock_dbus_server.py | 49 ++++++++++++---------- tests/acceptance/test_mender-connect.py | 41 ++++++++++++++---- 2 files changed, 61 insertions(+), 29 deletions(-) diff --git a/tests/acceptance/mocks/mock_dbus_server.py b/tests/acceptance/mocks/mock_dbus_server.py index 6d76adc6e..a8a9c692c 100644 --- a/tests/acceptance/mocks/mock_dbus_server.py +++ b/tests/acceptance/mocks/mock_dbus_server.py @@ -21,29 +21,32 @@ class IoMenderAuthenticationIface: """ - - - - - - - - + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + - """ + """ def __init__(self): self.token = "" @@ -68,6 +71,10 @@ def MockSetJwtTokenAndEmitSignal(self, token, server_url): self.JwtTokenStateChange(self.token, self.server_url) return True + def MockEmitSignal(self): + self.JwtTokenStateChange(self.token, self.server_url) + return True + loop = GLib.MainLoop() bus = SystemBus() diff --git a/tests/acceptance/test_mender-connect.py b/tests/acceptance/test_mender-connect.py index 2afc61d26..7a10a6549 100644 --- a/tests/acceptance/test_mender-connect.py +++ b/tests/acceptance/test_mender-connect.py @@ -165,6 +165,15 @@ def dbus_set_token_and_url_and_emit_signal(connection, token, server_url): ) +def dbus_emit_signal(connection): + connection.run( + "dbus-send --print-reply --system " + "--dest=io.mender.AuthenticationManager " + "/io/mender/AuthenticationManager " + "io.mender.Authentication1.MockEmitSignal " + ) + + def wait_for_string_in_log(connection, since, timeout, search_string): output = "" while qemu_system_time(connection) < since + timeout: @@ -193,14 +202,22 @@ def test_mender_connect_auth_changes( """Test that mender-connect can re-establish the connection on D-Bus signals""" try: - dbus_set_token_and_url(connection, "token1", "http://localhost:5000") - # start the mender-connect service - startup_time = qemu_system_time(connection) connection.run( "systemctl --job-mode=ignore-dependencies start mender-connect" ) + startup_time = qemu_system_time(connection) + # wait until the connection happens + wait_for_string_in_log( + connection, startup_time, 30, "Started Mender Connect service" + ) + + signal_time = qemu_system_time(connection) + dbus_set_token_and_url_and_emit_signal( + connection, "token1", "http://localhost:5000" + ) + # wait for first connect _ = wait_for_string_in_log( connection, @@ -277,14 +294,22 @@ def test_mender_connect_reconnect( """Test that mender-connect can re-establish the connection on remote errors""" try: - dbus_set_token_and_url(connection, "badtoken", "http://localhost:12345") - # start the mender-connect service - startup_time = qemu_system_time(connection) connection.run( "systemctl --job-mode=ignore-dependencies start mender-connect" ) + startup_time = qemu_system_time(connection) + # wait until the connection happens + wait_for_string_in_log( + connection, startup_time, 30, "Started Mender Connect service" + ) + + signal_time = qemu_system_time(connection) + dbus_set_token_and_url_and_emit_signal( + connection, "badtoken", "http://localhost:12345" + ) + # wait for error if version_is_minimum(bitbake_variables, "mender-connect", "2.3.0"): error_message = "connection manager failed to connect" @@ -305,11 +330,11 @@ def test_mender_connect_reconnect( ) dbus_set_token_and_url(connection, "", "") - kill_time = qemu_system_time(connection) # kill the server and wait for error with_mock_servers[1].kill() + kill_time = qemu_system_time(connection) _ = wait_for_string_in_log( - connection, kill_time, 300, "error reconnecting:", + connection, kill_time, 300, "waiting for reconnect", ) # Signal the other server