From 34567814943c9c5a0b687df81c61ea9145dcd376 Mon Sep 17 00:00:00 2001 From: gabsuren Date: Mon, 11 Jul 2022 16:05:24 +0400 Subject: [PATCH] websocket: updated example to show json data transfer --- .../examples/main/websocket_example.c | 14 ++++++++++ .../examples/pytest_websocket.py | 28 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/components/esp_websocket_client/examples/main/websocket_example.c b/components/esp_websocket_client/examples/main/websocket_example.c index 973095743..f138b78d8 100644 --- a/components/esp_websocket_client/examples/main/websocket_example.c +++ b/components/esp_websocket_client/examples/main/websocket_example.c @@ -23,6 +23,7 @@ #include "esp_log.h" #include "esp_websocket_client.h" #include "esp_event.h" +#include #define NO_DATA_TIMEOUT_SEC 5 @@ -74,6 +75,19 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i } else { ESP_LOGW(TAG, "Received=%.*s", data->data_len, (char *)data->data_ptr); } + + // If received data contains json structure it succeed to parse + cJSON *root = cJSON_Parse(data->data_ptr); + if (root) { + for (int i = 0 ; i < cJSON_GetArraySize(root) ; i++) { + cJSON *elem = cJSON_GetArrayItem(root, i); + cJSON *id = cJSON_GetObjectItem(elem, "id"); + cJSON *name = cJSON_GetObjectItem(elem, "name"); + ESP_LOGW(TAG, "Json={'id': '%s', 'name': '%s'}", id->valuestring, name->valuestring); + } + cJSON_Delete(root); + } + ESP_LOGW(TAG, "Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len, data->payload_offset); xTimerReset(shutdown_signal_timer, portMAX_DELAY); diff --git a/components/esp_websocket_client/examples/pytest_websocket.py b/components/esp_websocket_client/examples/pytest_websocket.py index b5b7d50b9..be21104db 100644 --- a/components/esp_websocket_client/examples/pytest_websocket.py +++ b/components/esp_websocket_client/examples/pytest_websocket.py @@ -6,6 +6,8 @@ import string from threading import Event, Thread import pytest import sys +import json +import time from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket from pytest_embedded import Dut @@ -81,8 +83,33 @@ def test_examples_protocol_websocket(dut): def test_close(dut): code = dut.expect(re.compile(b'WEBSOCKET: Received closed message with code=(\\d*)'))[0] print('Received close frame with code {}'.format(code)) + + def test_json(dut, websocket): + json_string = """ + [ + { + "id":"1", + "name":"user1" + }, + { + "id":"2", + "name":"user2" + } + ] + """ + websocket.send_data(json_string) + data = json.loads(json_string) + + match = dut.expect(re.compile(b'Json=([a-zA-Z0-9]*).*')).group(0).decode()[5:] + if match == str(data[0]): + print('Sent message and received message are equal') + else: + raise ValueError('DUT received string do not match sent string, \nexpected: {}\nwith length {}\ + \nreceived: {}\nwith length {}'.format(data[0], len(data[0]), match, len(match))) + def test_recv_long_msg(dut, websocket, msg_len, repeats): + send_msg = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(msg_len)) for _ in range(repeats): @@ -121,6 +148,7 @@ def test_examples_protocol_websocket(dut): test_echo(dut) # Message length should exceed DUT's buffer size to test fragmentation, default is 1024 byte test_recv_long_msg(dut, ws, 2000, 3) + test_json(dut, ws) test_close(dut) else: print('DUT connecting to {}'.format(uri))