%%-------------------------------------------------------------------- %% Copyright (c) 2023 EMQ Technologies Co., Ltd. All Rights Reserved. %%-------------------------------------------------------------------- -module(emqx_gbt32960_parser_SUITE). -compile(export_all). -compile(nowarn_export_all). -include("emqx_gbt32960.hrl"). -include_lib("eunit/include/eunit.hrl"). -define(BYTE, 8 / big - integer). -define(WORD, 16 / big - integer). -define(DWORD, 32 / big - integer). -define(LOGT(Format, Args), ct:pal("TEST_SUITE: " ++ Format, Args)). all() -> [ case01_login, case02_realtime_report_0x01, case03_realtime_report_0x02, case04_realtime_report_0x03, case05_realtime_report_0x04, case06_realtime_report_0x05, case07_realtime_report_0x06, case08_realtime_report_0x07, case09_realtime_report_0x08, case10_realtime_report_0x09, case11_heartbeat, case12_schooltime, case13_param_query, case14_param_setting, case15_terminal_ctrl, case16_serialize_ack, case17_serialize_query, case18_serialize_query, case19_serialize_ctrl ]. init_per_suite(Config) -> emqx_logger:set_log_level(debug), Config. end_per_suite(Config) -> Config. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% helper functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% encode(Cmd, Vin, Data) -> encode(Cmd, ?ACK_IS_CMD, Vin, ?ENCRYPT_NONE, Data). encode(Cmd, Ack, Vin, Encrypt, Data) -> Size = byte_size(Data), S1 = <>, Crc = make_crc(S1, undefined), Stream = <<"##", S1/binary, Crc:8>>, ?LOGT("encode a packet=~p", [binary_to_hex_string(Stream)]), Stream. make_crc(<<>>, Xor) -> Xor; make_crc(<>, undefined) -> make_crc(Rest, C); make_crc(<>, Xor) -> make_crc(Rest, C bxor Xor). make_time() -> {Year, Mon, Day} = date(), {Hour, Min, Sec} = time(), Year1 = list_to_integer(string:substr(integer_to_list(Year), 3, 2)), <>. binary_to_hex_string(Data) -> lists:flatten([io_lib:format("~2.16.0B ", [X]) || <> <= Data]). to_json(#frame{cmd = Cmd, vin = Vin, encrypt = Encrypt, data = Data}) -> emqx_utils_json:encode(#{'Cmd' => Cmd, 'Vin' => Vin, 'Encrypt' => Encrypt, 'Data' => Data}). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% test case functions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case01_login(_Config) -> Parser = emqx_gbt32960_frame:initial_parse_state(#{}), Time = <<12, 12, 29, 12, 19, 20>>, Data = <