From 9740db50045c3d6f94825fa5d1e5f0bc51c6bfe2 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Tue, 15 Dec 2020 16:21:29 +0100 Subject: [PATCH] ci: Extend the MQTT weekend test to check mqtt-enqueue api --- .../mqtt/weekend_test/mqtt_publish_test.py | 55 ++++++++++--------- .../publish_connect_test/main/publish_test.c | 10 +++- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/components/mqtt/weekend_test/mqtt_publish_test.py b/components/mqtt/weekend_test/mqtt_publish_test.py index e5a2f7683c..fd6ec4ffed 100644 --- a/components/mqtt/weekend_test/mqtt_publish_test.py +++ b/components/mqtt/weekend_test/mqtt_publish_test.py @@ -56,7 +56,7 @@ def on_message(client, userdata, msg): message_log += "Received data:" + msg.topic + " " + payload + "\n" -def test_single_config(dut, transport, qos, repeat, published): +def test_single_config(dut, transport, qos, repeat, published, queue = 0): global expected_count global expected_data global message_log @@ -65,7 +65,7 @@ def test_single_config(dut, transport, qos, repeat, published): expected_count = 0 message_log = "" expected_data = sample_string * repeat - print("PUBLISH TEST: transport:{}, qos:{}, sequence:{}, sample msg:'{}'".format(transport, qos, published, expected_data)) + print("PUBLISH TEST: transport:{}, qos:{}, sequence:{}, enqueue:{}, sample msg:'{}'".format(transport, qos, published, queue, expected_data)) client = None try: if transport in ["ws", "wss"]: @@ -89,7 +89,7 @@ def test_single_config(dut, transport, qos, repeat, published): if not event_client_connected.wait(timeout=30): raise ValueError("ENV_TEST_FAILURE: Test script cannot connect to broker: {}".format(broker_host[transport])) client.subscribe(subscribe_topic, qos) - dut.write("{} {} {} {} {}".format(transport, sample_string, repeat, published, qos), eol="\n") + dut.write("{} {} {} {} {} {}".format(transport, sample_string, repeat, published, qos, queue), eol="\n") try: # waiting till subscribed to defined topic dut.expect(re.compile(r"MQTT_EVENT_SUBSCRIBED"), timeout=30) @@ -105,7 +105,7 @@ def test_single_config(dut, transport, qos, repeat, published): if expected_count == published or (expected_count > published and qos == 1): print("All data received from ESP32...") else: - raise ValueError("Not all data received from ESP32: Expected:{}x{}, Received:{}x{}".format(expected_data, published, message_log, expected_count)) + raise ValueError("Not all data received from ESP32: Expected:{}x{}, Received:{}x{}".format(expected_count, published, expected_data, message_log)) finally: event_stop_client.set() thread1.join() @@ -149,29 +149,30 @@ def test_weekend_mqtt_publish(env, extra_data): raise for qos in [0, 1, 2]: for transport in ["tcp", "ssl", "ws", "wss"]: - if broker_host[transport] is None: - print('Skipping transport: {}...'.format(transport)) - continue - # simple test with empty message - test_single_config(dut1, transport, qos, 0, 5) - # decide on broker what level of test will pass (local broker works the best) - if broker_host[transport].startswith("192.168") and qos < 1: - # medium size, medium repeated - test_single_config(dut1, transport, qos, 5, 50) - # long data - test_single_config(dut1, transport, qos, 1000, 10) - # short data, many repeats - test_single_config(dut1, transport, qos, 2, 200) - elif transport in ["ws", "wss"]: - # more relaxed criteria for websockets! - test_single_config(dut1, transport, qos, 2, 5) - test_single_config(dut1, transport, qos, 50, 1) - test_single_config(dut1, transport, qos, 10, 20) - else: - # common configuration should be good for most public mosquittos - test_single_config(dut1, transport, qos, 5, 10) - test_single_config(dut1, transport, qos, 500, 3) - test_single_config(dut1, transport, qos, 1, 50) + for q in [0, 1]: + if broker_host[transport] is None: + print('Skipping transport: {}...'.format(transport)) + continue + # simple test with empty message + test_single_config(dut1, transport, qos, 0, 5, q) + # decide on broker what level of test will pass (local broker works the best) + if broker_host[transport].startswith("192.168") and qos > 0 and q == 0: + # medium size, medium repeated + test_single_config(dut1, transport, qos, 5, 50, q) + # long data + test_single_config(dut1, transport, qos, 1000, 10, q) + # short data, many repeats + test_single_config(dut1, transport, qos, 2, 200, q) + elif transport in ["ws", "wss"]: + # more relaxed criteria for websockets! + test_single_config(dut1, transport, qos, 2, 5, q) + test_single_config(dut1, transport, qos, 50, 1, q) + test_single_config(dut1, transport, qos, 10, 20, q) + else: + # common configuration should be good for most public mosquittos + test_single_config(dut1, transport, qos, 5, 10, q) + test_single_config(dut1, transport, qos, 500, 3, q) + test_single_config(dut1, transport, qos, 1, 50, q) if __name__ == '__main__': diff --git a/tools/test_apps/protocols/mqtt/publish_connect_test/main/publish_test.c b/tools/test_apps/protocols/mqtt/publish_connect_test/main/publish_test.c index c78a84e0d5..d4863e59b7 100644 --- a/tools/test_apps/protocols/mqtt/publish_connect_test/main/publish_test.c +++ b/tools/test_apps/protocols/mqtt/publish_connect_test/main/publish_test.c @@ -126,13 +126,14 @@ void publish_test(const char* line) char pattern[32]; char transport[32]; int repeat = 0; + int enqueue = 0; static bool is_mqtt_init = false; if (!is_mqtt_init) { mqtt_app_start(); is_mqtt_init = true; } - sscanf(line, "%s %s %d %d %d", transport, pattern, &repeat, &expected_published, &qos_test); + sscanf(line, "%s %s %d %d %d %d", transport, pattern, &repeat, &expected_published, &qos_test, &enqueue); ESP_LOGI(TAG, "PATTERN:%s REPEATED:%d PUBLISHED:%d\n", pattern, repeat, expected_published); int pattern_size = strlen(pattern); free(expected_data); @@ -169,7 +170,12 @@ void publish_test(const char* line) xEventGroupWaitBits(mqtt_event_group, CONNECTED_BIT, false, true, portMAX_DELAY); for (int i = 0; i < expected_published; i++) { - int msg_id = esp_mqtt_client_publish(mqtt_client, CONFIG_EXAMPLE_PUBLISH_TOPIC, expected_data, expected_size, qos_test, 0); + int msg_id; + if (enqueue) { + msg_id = esp_mqtt_client_enqueue(mqtt_client, CONFIG_EXAMPLE_PUBLISH_TOPIC, expected_data, expected_size, qos_test, 0, true); + } else { + msg_id = esp_mqtt_client_publish(mqtt_client, CONFIG_EXAMPLE_PUBLISH_TOPIC, expected_data, expected_size, qos_test, 0); + } ESP_LOGI(TAG, "[%d] Publishing...", msg_id); } }