diff options
author | lns <matzeton@googlemail.com> | 2022-08-08 18:16:18 +0200 |
---|---|---|
committer | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2022-08-24 10:49:27 +0200 |
commit | 93d65ed6503b32865b5453238c159e603bb37cb8 (patch) | |
tree | 0fe290da51ebf647f429dd12972b7e45d733dbd9 /tests/unit | |
parent | a53f4765858285f520b8a2645da80aed2b1487b1 (diff) |
Support serialization of double-precision floating-point numbers. Fixes #1702.
Signed-off-by: lns <matzeton@googlemail.com>
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'tests/unit')
-rw-r--r-- | tests/unit/unit.c | 46 |
1 files changed, 37 insertions, 9 deletions
diff --git a/tests/unit/unit.c b/tests/unit/unit.c index 13de97a1f..1620daab3 100644 --- a/tests/unit/unit.c +++ b/tests/unit/unit.c @@ -62,6 +62,7 @@ static int verbose = 0; /* *********************************************** */ +#define FLT_MAX 3.402823466e+38F int serializerUnitTest() { ndpi_serializer serializer, deserializer; int i, loop_id; @@ -99,6 +100,7 @@ int serializerUnitTest() { assert(ndpi_serialize_string_string(&serializer, kbuf, vbuf) != -1); assert(ndpi_serialize_string_uint32(&serializer, kbuf, i*i) != -1); assert(ndpi_serialize_string_float(&serializer, kbuf, (float)(i*i), "%f") != -1); + assert(ndpi_serialize_string_double(&serializer, kbuf, ((double)(FLT_MAX))*2, "%lf") != -1); assert(ndpi_serialize_string_int64(&serializer, kbuf, INT64_MAX) != -1); if ((i&0x3) == 0x3) ndpi_serialize_end_of_record(&serializer); } @@ -126,7 +128,8 @@ int serializerUnitTest() { jerr = json_tokener_success; j = json_tokener_parse_verbose(buffer, &jerr); if (j == NULL) { - printf("%s: ERROR (json validation failed)\n", __FUNCTION__); + printf("%s: ERROR (json validation failed: `%s')\n", + __FUNCTION__, json_tokener_error_desc(jerr)); return -1; } else { /* Validation ok */ @@ -165,6 +168,7 @@ int serializerUnitTest() { int64_t v64; ndpi_string ks, vs; float vf; + double vd; switch(kt) { case ndpi_serialization_uint32: @@ -211,6 +215,11 @@ int serializerUnitTest() { if(verbose) printf("%f\n", vf); break; + case ndpi_serialization_double: + assert(ndpi_deserialize_value_double(&deserializer, &vd) != -1); + if(verbose) printf("%lf\n", vd); + break; + default: if (verbose) printf("\n"); printf("%s: ERROR (unsupported type %u detected)\n", __FUNCTION__, et); @@ -267,12 +276,15 @@ int serializeProtoUnitTest(void) NDPI_SET_BIT(risks, NDPI_TLS_OBSOLETE_VERSION); NDPI_SET_BIT(risks, NDPI_TLS_SELFSIGNED_CERTIFICATE); ndpi_serialize_proto(ndpi_info_mod, &serializer, risks, NDPI_CONFIDENCE_DPI, ndpi_proto); + assert(ndpi_serialize_string_float(&serializer, "float", FLT_MAX, "%f") != -1); + assert(ndpi_serialize_string_double(&serializer, "double", ((double)(FLT_MAX))*2, "%lf") != -1); if (fmt == ndpi_serialization_format_json) { buffer_len = 0; buffer = ndpi_serializer_get_buffer(&serializer, &buffer_len); - char const * const expected_json_str = "{\"ndpi\": {\"flow_risk\": {\"6\": {\"risk\":\"Self-signed Cert\",\"severity\":\"High\",\"risk_score\": {\"total\":500,\"client\":450,\"server\":50}},\"7\": {\"risk\":\"Obsolete TLS (v1.1 or older)\",\"severity\":\"High\",\"risk_score\": {\"total\":510,\"client\":455,\"server\":55}},\"8\": {\"risk\":\"Weak TLS Cipher\",\"severity\":\"High\",\"risk_score\": {\"total\":250,\"client\":225,\"server\":25}},\"17\": {\"risk\":\"Malformed Packet\",\"severity\":\"Low\",\"risk_score\": {\"total\":260,\"client\":130,\"server\":130}}},\"confidence\": {\"6\":\"DPI\"},\"proto\":\"TLS.Facebook\",\"proto_id\":\"91.119\",\"encrypted\":1,\"breed\":\"Fun\",\"category_id\":6,\"category\":\"SocialNetwork\"}}"; +#ifndef WIN32 + char const * const expected_json_str = "{\"ndpi\": {\"flow_risk\": {\"6\": {\"risk\":\"Self-signed Cert\",\"severity\":\"High\",\"risk_score\": {\"total\":500,\"client\":450,\"server\":50}},\"7\": {\"risk\":\"Obsolete TLS (v1.1 or older)\",\"severity\":\"High\",\"risk_score\": {\"total\":510,\"client\":455,\"server\":55}},\"8\": {\"risk\":\"Weak TLS Cipher\",\"severity\":\"High\",\"risk_score\": {\"total\":250,\"client\":225,\"server\":25}},\"17\": {\"risk\":\"Malformed Packet\",\"severity\":\"Low\",\"risk_score\": {\"total\":260,\"client\":130,\"server\":130}}},\"confidence\": {\"6\":\"DPI\"},\"proto\":\"TLS.Facebook\",\"proto_id\":\"91.119\",\"encrypted\":1,\"breed\":\"Fun\",\"category_id\":6,\"category\":\"SocialNetwork\"},\"float\":340282346638528859811704183484516925440.000000,\"double\":680564693277057719623408366969033850880.000000}"; if (strncmp(buffer, expected_json_str, buffer_len) != 0) { @@ -280,6 +292,7 @@ int serializeProtoUnitTest(void) printf("%s: ERROR: got JSON str: \"%.*s\"\n", __FUNCTION__, (int)buffer_len, buffer); return -1; } +#endif if(verbose) printf("%s\n", buffer); @@ -288,7 +301,8 @@ int serializeProtoUnitTest(void) enum json_tokener_error jerr = json_tokener_success; json_object * const j = json_tokener_parse_verbose(buffer, &jerr); if (j == NULL) { - printf("%s: ERROR (json validation failed)\n", __FUNCTION__); + printf("%s: ERROR (json validation failed: `%s')\n", + __FUNCTION__, json_tokener_error_desc(jerr)); return -1; } else { /* Validation ok */ @@ -296,14 +310,28 @@ int serializeProtoUnitTest(void) } } else if (fmt == ndpi_serialization_format_csv) { - if(verbose) { - buffer_len = 0; - buffer = ndpi_serializer_get_header(&serializer, &buffer_len); + char const * const expected_csv_hdr_str = "risk,severity,total,client,server,risk,severity,total,client,server,risk,severity,total,client,server,risk,severity,total,client,server,6,proto,proto_id,encrypted,breed,category_id,category,float,double"; + buffer_len = 0; + buffer = ndpi_serializer_get_header(&serializer, &buffer_len); + assert(buffer != NULL && buffer_len != 0); + if (verbose) printf("%s\n", buffer); + if (strncmp(buffer, expected_csv_hdr_str, buffer_len) != 0) + { + printf("%s: ERROR: expected CSV str: \"%s\"\n", __FUNCTION__, expected_csv_hdr_str); + printf("%s: ERROR: got CSV str: \"%.*s\"\n", __FUNCTION__, (int)buffer_len, buffer); + } - buffer_len = 0; - buffer = ndpi_serializer_get_buffer(&serializer, &buffer_len); - printf("%s\n", buffer); + char const * const expected_csv_buf_str = "Self-signed Cert,High,500,450,50,Obsolete TLS (v1.1 or older),High,510,455,55,Weak TLS Cipher,High,250,225,25,Malformed Packet,Low,260,130,130,DPI,TLS.Facebook,91.119,1,Fun,6,SocialNetwork,340282346638528859811704183484516925440.000000,680564693277057719623408366969033850880.000000"; + buffer_len = 0; + buffer = ndpi_serializer_get_buffer(&serializer, &buffer_len); + assert(buffer != NULL && buffer_len != 0); + if (verbose) + printf("%s\n", buffer); + if (strncmp(buffer, expected_csv_buf_str, buffer_len) != 0) + { + printf("%s: ERROR: expected CSV str: \"%s\"\n", __FUNCTION__, expected_csv_buf_str); + printf("%s: ERROR: got CSV str: \"%.*s\"\n", __FUNCTION__, (int)buffer_len, buffer); } } |