diff options
Diffstat (limited to 'tinySIGCOMP/test/test_tortures.h')
-rw-r--r-- | tinySIGCOMP/test/test_tortures.h | 1146 |
1 files changed, 1146 insertions, 0 deletions
diff --git a/tinySIGCOMP/test/test_tortures.h b/tinySIGCOMP/test/test_tortures.h new file mode 100644 index 0000000..c1222b6 --- /dev/null +++ b/tinySIGCOMP/test/test_tortures.h @@ -0,0 +1,1146 @@ +/* +* Copyright (C) 2009 Mamadou Diop. +* Copyright (C) 2012 Doubango Telecom <http://doubango.org>. +* +* This file is part of Open Source Doubango Framework. +* +* DOUBANGO is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* DOUBANGO is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with DOUBANGO. +* +*/ +#ifndef TEST_TINYSIGCOMP_TORTURES_H +#define TEST_TINYSIGCOMP_TORTURES_H + +#define COMPARTMENT_ID "urn:uuid:2e5fdc76-00be-4314-8202-1116fa82a473" +#define COMPARTMENT_ID_0 "urn:uuid:0" +#define COMPARTMENT_ID_1 "urn:uuid:1" +#define COMPARTMENT_ID_2 "urn:uuid:2" + +#define OUTPUT_BUFFER_SIZE 2000 +// Be careful before changing these values as not all tests accept any +#define DMS 16384 //2048//4096//8192//65536 +#define SMS 2048 //2048//4096//8192//65536 +#define CPB 16 // 16//32//64//128 + +#define RUN_TEST_LOOP 1 + +#define RUN_TEST_ALL 1 +#define RUN_TEST_NO 68 + +#define IS_STREAM_YES 1 +#define IS_STREAM_NO 0 + +#define XFAIL_YES 1 +#define XFAIL_NO 0 + +#include "rfc4465_torture_tests.h" + +#include <assert.h> + +struct_torture_test tests[] = +{ + { //*** 0*** + "A.1.1. Bit Manipulation", + RFC4465_A_1_1__Bit_Manipulation, + 170, + {8, "\x01\x50\x00\x00\xfe\xbf\x00\x00"}, + 22, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { //*** 1*** + "A.1.2(.1) Arithmetic", + RFC4465_A_1_2__Arithmetic_1, + 174, + {8, "\x00\x00\x00\x00\x00\x00\x00\x04"}, + 25, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { //*** 2*** + "A.1.2(.2) Arithmetic", + RFC4465_A_1_2__Arithmetic_2, + 174, + {11, "DIV_BY_ZERO"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { //*** 3*** + "A.1.2(.3) Arithmetic", + RFC4465_A_1_2__Arithmetic_3, + 174, + {11, "DIV_BY_ZERO"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //*** 4*** + "A.1.3. Sorting", + RFC4465_A_1_3__Sorting, + 223, + {45, "\x46\x6f\x72\x64\x2c\x20\x79\x6f\x75\x27\x72\x65\x20\x74\x75\x72\x6e\x69\x6e\x67" + "\x20\x69\x6e\x74\x6f\x20\x61\x20\x70\x65\x6e\x67\x75\x69\x6e\x2e\x20\x53\x74\x6f" + "\x70\x20\x69\x74\x2e"}, + 371, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //*** 5** + "A.1.4. SHA-1", + RFC4465_A_1_4__SHA1, + 138, + {40, "\xa9\x99\x3e\x36\x47\x06\x81\x6a\xba\x3e\x25\x71\x78\x50\xc2\x6c\x9c\xd0\xd8\x9d" + "\x84\x98\x3e\x44\x1c\x3b\xd2\x6e\xba\xae\x4a\xa1\xf9\x51\x29\xe5\xe5\x46\x70\xf1" + "\x12\xff\x34\x7b\x4f\x27\xd6\x9e\x1f\x32\x8e\x6f\x4b\x55\x73\xe3\x66\x6e\x12\x2f" + "\x4f\x46\x04\x52\xeb\xb5\x63\x93\x4f\x46\x04\x52\xeb\xb5\x63\x93\x4f\x46\x04\x52"}, + 17176, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //*** 6** + "A.1.5.(1) LOAD and MULTILOAD", + RFC4465_A_1_5__LOAD_and_MULTILOAD_1, + 58, + {16, "\x00\x84\x00\x84\x00\x86\x00\x86\x00\x2a\x00\x80\x00\x2a\x00\x2a"}, + 36, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //*** 7** + "A.1.5.(2) LOAD and MULTILOAD", + RFC4465_A_1_5__LOAD_and_MULTILOAD_2, + 58, + {21, "MULTILOAD_OVERWRITTEN"}, + 36, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //*** 8** + "A.1.5.(3) LOAD and MULTILOAD", + RFC4465_A_1_5__LOAD_and_MULTILOAD_3, + 58, + {21, "MULTILOAD_OVERWRITTEN"}, + 36, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 9** + "A.1.6. COPY", + RFC4465_A_1_6__COPY, + 60, + {125, "\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40" + "\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x40\x41\x41\x41\x41\x41\x41\x41\x41" + "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" + "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" + "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41" + "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x55\x41" + "\x42\x43\x44\x43\x44"}, + 365, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 10** + "A.1.7. COPY-LITERAL and COPY-OFFSET", + RFC4465_A_1_7__COPY_LITERAL_and_COPY_OFFSET, + 100, + {34, "\x41\x41\x41\x41\x00\x61\x41\x41\x41\x41\x49\x4a\x41\x42\x43\x44\x49\x4a\x41\x42" + "\x00\x4a\x00\x4e\x47\x48\x48\x45\x46\x47\x47\x48\x45\x46"}, + 216, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 11** + "A.1.8. MEMSET", + RFC4465_A_1_8__MEMSET, + 27, + {16, "\x80\x40\x4f\x5e\x6d\x7c\x8b\x9a\xa9\xb8\xc7\xd6\xe5\xf4\x03\x12"}, + 166, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 12** + "A.1.9.(1) CRC", + RFC4465_A_1_9__CRC_1, + 29, + {0, ""}, + 95, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 13** + "A.1.9.(2) CRC", + RFC4465_A_1_9__CRC_2, + 29, + {14, "USER_REQUESTED"}, + 95, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 14** + "A.1.10. INPUT-BITS", + RFC4465_A_1_10__INPUT_BITS, + 28, + {16, "\x00\x00\x00\x02\x00\x02\x00\x13\x00\x00\x00\x03\x00\x1a\x00\x38"}, + 66, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 15** + "A.1.11. INPUT-HUFFMAN", + RFC4465_A_1_11__INPUT_HUFFMAN, + 39, + {16, "\x00\x00\x00\x03\x00\x08\x04\xd7\x00\x02\x00\x03\x03\x99\x30\xfe"}, + 84, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 16** + "A.1.12. INPUT-BYTES", + RFC4465_A_1_12__INPUT_BYTES, + 72, + {39, "\x00\x00\x93\x2e\x00\x01\xb1\x66\xd8\x6f\xb1\x00\x1a\x2b\x00\x03\x9a\x97\x34\xd8" + "\x00\x07\x00\x01\x33\x87\x4e\x00\x08\xdc\x96\x51\xb5\xdc\x96\x00\x59\x9d\x6a"}, + 130, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 17** + "A.1.13. Stack Manipulation", + RFC4465_A_1_13__Stack_Manipulation, + 324, + {16, "\x00\x03\x00\x02\x00\x01\x00\x42\x00\x42\x00\x00\x00\x01\x00\x01"}, + 40, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 18** + "A.1.14. Program Flow", + RFC4465_A_1_14__Program_Flow, + 66, + {20, "\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x06\x07\x07\x07\x08\x08\x08\x09\x09"}, + 131, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 19** + "A.1.15.(1) State Creation", + RFC4465_A_1_15__State_Creation_1, + 152, + {0, ""}, + 23, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 20 (requires previsous test)** + "A.1.15.(2) State Creation", + RFC4465_A_1_15__State_Creation_2, + 152, + {0, ""}, + 14, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 21 (requires previsous test)** + "A.1.15.(3) State Creation", + RFC4465_A_1_15__State_Creation_3, + 152, + {0, ""}, + 24, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 22 (requires previsous test)** + "A.1.15.(4) State Creation", // FAIL + RFC4465_A_1_15__State_Creation_4, + 153, + {23, "INVALID_STATE_ID_LENGTH"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 23 (requires previsous test)** + "A.1.15.(5) State Creation", // FAIL + RFC4465_A_1_15__State_Creation_5, + 153, + {23, "INVALID_STATE_ID_LENGTH"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 24 (requires previsous test)** + "A.1.15.(6) State Creation", + RFC4465_A_1_15__State_Creation_6, + 153, + {0, ""}, + 23, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 25 (requires previsous test)** + "A.1.15.(7) State Creation", + RFC4465_A_1_15__State_Creation_7, + 152, + {0, ""}, + 34, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 26 (requires previsous test)** + "A.1.15.(8) State Creation", + RFC4465_A_1_15__State_Creation_8, + 153, + {0, ""}, + 46, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 27 (requires previsous test)** + "A.1.15.(9) State Creation", + RFC4465_A_1_15__State_Creation_9, + 153, + {0, ""}, + 47, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } +#if 0 // FIXME: http://code.google.com/p/doubango/issues/detail?id=181 + , + { + //** 23 (requires previsous test)** + "A.1.15.(10) State Creation", + RFC4465_A_1_15__State_Creation_10, + 153, + {0, ""}, + 60, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } +#endif + , + { + //** 28** + "A.1.16.(0) STATE-ACCESS {Set up bytecode}", + RFC4465_A_1_16__STATE_ACCESS__SETUP, + 403, + {0, ""}, + 17, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 29 (requires previous test)** + "A.1.16.(1) STATE-ACCESS", + RFC4465_A_1_16__STATE_ACCESS_1, + 408, + {4, "\x74\x65\x73\x74"}, + 26, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 30 (requires previous test)** + "A.1.16.(2) STATE-ACCESS", + RFC4465_A_1_16__STATE_ACCESS_2, + 408, + {4, "\x74\x65\x73\x74"}, + 15, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 31 (requires previous test)** + "A.1.16.(3) STATE-ACCESS", + RFC4465_A_1_16__STATE_ACCESS_3, + 408, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 32 (requires previous test)** + "A.1.16.(4) STATE-ACCESS", + RFC4465_A_1_16__STATE_ACCESS_4, + 408, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 33 (requires previous test)** + "A.1.16.(5) STATE-ACCESS", + RFC4465_A_1_16__STATE_ACCESS_5, + 408, + {15, "STATE_TOO_SHORT"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 34** + "A.2.1.(1) Useful Values", + RFC4465_A_2_1__Useful_Values_1, + 93, + {0, ""}, + 966, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 35 (Requires previous test)** + "A.2.1.(2) Useful Values", + RFC4465_A_2_1__Useful_Values_2, + 9, + {0, ""}, + (1072 << 4), + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 36 (Requires previous test)** + "A.2.1.(3) Useful Values", + RFC4465_A_2_1__Useful_Values_3, + 9, + {16, "CYCLES_EXHAUSTED"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 37 (Requires previous test)** + "A.2.1.(4) Useful Values", + RFC4465_A_2_1__Useful_Values_4, + 9, + {8, "SEGFAULT"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 38** + "A.2.2. Cycles Checking", + RFC4465_A_2_2__Cycles_Checking, + 29, + {16, "CYCLES_EXHAUSTED"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 39** + "A.2.3.(1) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_1, + 1, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 40** + "A.2.3.(2) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_2, + 2, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 41** + "A.2.3.(3) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_3, + 17, + {25, "decompression_memory_size"}, + 5, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 42** + "A.2.3.(4) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_4, + 17, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 43** + "A.2.3.(5) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_5, + 17, + {21, "INVALID_CODE_LOCATION"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 44** + "A.2.3.(6) Message-based Transport", + RFC4465_A_2_3_Message_based_Transport_6, + 17, + {25, "decompression_memory_size"}, + 5, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 45** + "A.2.4.(1&2) Stream-based Transport", + RFC4465_A_2_4_Stream_based_Transport_1, + 67, + {25, "decompression_memory_size"}, + 11, + IS_STREAM_YES, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 46** + "A.2.4.(3) Stream-based Transport", + RFC4465_A_2_4_Stream_based_Transport_3, + 3, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 47** + "A.2.4.(4) Stream-based Transport", + RFC4465_A_2_4_Stream_based_Transport_4, + 4, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 48** + "A.2.4.(5) Stream-based Transport", + RFC4465_A_2_4_Stream_based_Transport_5, + 30, + {17, "MESSAGE_TOO_SHORT"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 49** + "A.2.4.(5.1) Stream-based Transport (cleanup)", + "\xff\xff", + 2, + {14, "INTERNAL_ERROR"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 50** + "A.2.4.(6) Stream-based Transport", + RFC4465_A_2_4_Stream_based_Transport_6, + 29, + {21, "INVALID_CODE_LOCATION"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 51** + "A.2.4.(6.1) Stream-based Transport (cleanup)", + "\xff\xff", + 2, + {14, "INTERNAL_ERROR"}, + 0, + IS_STREAM_YES, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 52** + "A.2.5.(1) Input Past the End of a Message", + RFC4465_A_2_5__Input_Past_the_End_of_a_Message_1, + 59, + {3, "\x68\x69\x21"}, + 23, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 53** + "A.2.5.(2) Input Past the End of a Message", + RFC4465_A_2_5__Input_Past_the_End_of_a_Message_2, + 58, + {14, "USER_REQUESTED"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 54** + "A.3.1.(1) SigComp Feedback Mechanism", + RFC4465_A_3_1__SigComp_Feedback_Mechanism_1, + 84, + {0, ""}, + 52, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 55** + "A.3.1.(2) SigComp Feedback Mechanism", + RFC4465_A_3_1__SigComp_Feedback_Mechanism_2, + 84, + {0, ""}, + 179, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 56 (SMS MUST be 2048)** + "A.3.2.(1) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_1, + 446, + {0, ""}, + 811, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 57 (Requires previous test)** + "A.3.2.(2) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_2, + 446, + {0, ""}, + 2603, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 58 (Requires previous test)** + "A.3.2.(3) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_3, + 446, + {0, ""}, + 811, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 59 (Requires previous test)** + "A.3.2.(4) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_4, + 446, + {0, ""}, + 1805, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 60 (Requires previous test)** + "A.3.2.(5) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_5, + 446, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID + } + , + { + //** 61 (Requires previous test)** + "A.3.2.(6) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_6, + 446, + {0, ""}, + 2057, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 62 (Requires previous test)** + "A.3.2.(7) State Memory Management", + RFC4465_A_3_2__State_Memory_Management_7, + 446, + {0, ""}, + 1993, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 63** + "A.3.3.(1) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_1, + 437, + {0, ""}, + 1809, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_0 + } + , + { + //** 64 (requires previsous test)** + "A.3.3.(2) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_2, + 437, + {0, ""}, + 1809, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_1 + } + , + { + //** 65 (requires previsous test)** + "A.3.3.(3) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_3, + 437, + {0, ""}, + 1809, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_2 + } + , + { + //** 66 (requires previsous test)** + "A.3.3.(4) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_4, + 437, + {0, ""}, + 1993, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_0 + } + , + { + //** 67 (requires previsous test)** + "A.3.3.(5) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_5, + 437, + {0, ""}, + 1994, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_1 + } + , + { + //** 68 (requires previsous test)** + "A.3.3.(6) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_6, + 437, + {0, ""}, + 1804, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID_2 + } + , + { + //** 69 (requires previsous test)** + "A.3.3.(7) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_7, + 437, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID_0 + } + , + { + //** 70 (requires previsous test)** + "A.3.3.(8) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_8, + 437, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID_1 + } + , + { + //** 71 (requires previsous test)** + "A.3.3.(9) Multiple Compartments", + RFC4465_A_3_3__Multiple_Compartments_9, + 437, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + COMPARTMENT_ID_2 + } + , + { + //** 72** + "A.3.4. Accessing RFC 3485 State", + RFC4465_A_3_4__Accessing_RFC_3485_State, + 61, + {3, "\x53\x49\x50"}, + 11, + IS_STREAM_NO, + XFAIL_NO, + COMPARTMENT_ID + } + , + { + //** 73** + "A.3.5.(1) Bytecode State Creation", + RFC4465_A_3_5__Bytecode_State_Creation_1, + 74, + {2, "\x4f\x4b"}, + 66, + IS_STREAM_NO, + XFAIL_NO, + "Comp-id:A.3.5. Bytecode State Creation" + } + , + { + //** 74** + "A.3.5.(2) Bytecode State Creation", + RFC4465_A_3_5__Bytecode_State_Creation_2, + 8, + {3, "\x4f\x4b\x31"}, + 7, + IS_STREAM_NO, + XFAIL_NO, + "Comp-id:A.3.5. Bytecode State Creation" + } + , + { + //** 75** + "A.3.5.(3) Bytecode State Creation", + RFC4465_A_3_5__Bytecode_State_Creation_3, + 13, + {3, "\x4f\x4b\x32"}, + 5, + IS_STREAM_NO, + XFAIL_NO, + "Comp-id:A.3.5. Bytecode State Creation" + } + , + { + //** 76** + "A.3.5.(4) Bytecode State Creation", + RFC4465_A_3_5__Bytecode_State_Creation_4, + 7, + {3, "\x00\x00\x32"}, + 5, + IS_STREAM_NO, + XFAIL_NO, + "Comp-id:A.3.5. Bytecode State Creation" + } + , + { + //** 77** + "A.3.5.(5) Bytecode State Creation", + RFC4465_A_3_5__Bytecode_State_Creation_5, + 7, + {15, "STATE_NOT_FOUND"}, + 0, + IS_STREAM_NO, + XFAIL_YES, + "Comp-id:A.3.5. Bytecode State Creation" + } +}; + +int startsWith(const char* buffer1, size_t size1, const char* buffer2, size_t size2) +{ + size_t i; + + if(!size2) return 1; + if(size1 < size2) return 0; + + for(i = 0; i< size2; i++) + { + if(buffer1[i] != buffer2[i]) + { + return 0; + } + } + return 1; +} + +static const int16_t wordForEndianess = 0x4321; +static tsk_bool_t isBigEndian; + +static TCOMP_INLINE uint16_t HostToNetworkShort(uint16_t x) +{ + return isBigEndian ? (x) : ((((uint16_t)(x) & 0xff00) >> 8) | + (((uint16_t)(x) & 0x00ff) << 8)); +} + +static void checkResult(const struct_torture_test* test, const tcomp_result_t *result, const void* output_ptr, tsk_size_t output_size) +{ + tsk_bool_t ok_cycles = (result->consumed_cycles == test->xcycles); + tsk_bool_t ok_output = tsk_true; + + if(tsk_striequals(test->xoutput.ptr, "decompression_memory_size")){ + printf("xoutput (decompression_memory_size): %s\n", (HostToNetworkShort(DMS) == *((uint16_t*)output_ptr)) ? "YES" : "NO"); + } + else{ + ok_output = startsWith(output_ptr, output_size, test->xoutput.ptr, test->xoutput.size); + printf("xoutput: %s\n", ok_output ? "YES" : "NO"); + } + printf("xcycles: %s\n", ok_cycles ? "YES" : "NO"); + if(!ok_cycles || !ok_output){ + assert(test->xfail && result->isNack); // failure must be expected and NACK have to be present + assert(tsk_strequals(test->xoutput.ptr, tcomp_nackinfo_get_description(result->nack_info))); // returned NACK and expected one must be equal + } +} + +static int test_tortures() +{ + size_t i, start, end; + size_t res_size = 0; + char buffer[OUTPUT_BUFFER_SIZE]; + +#if RUN_TEST_LOOP + for(;;) +#endif + { + tcomp_manager_handle_t *manager = tcomp_manager_create(); + tcomp_result_t *result = tcomp_result_create(); + + isBigEndian = ((*(int8_t *)&wordForEndianess) != 0x21); + + /* Add SIP dictionary. */ + tcomp_manager_addSipSdpDictionary(manager); + + /* Add Presence dictionary. */ + tcomp_manager_addPresenceDictionary(manager); + + /* Set decompression size. */ + tcomp_manager_setDecompression_Memory_Size(manager, DMS); + /* Set state memory size. */ + tcomp_manager_setState_Memory_Size(manager, SMS); + /* Set Cycles Per Bit */ + tcomp_manager_setCycles_Per_Bit(manager, CPB); + +#if RUN_TEST_ALL + start = 0, end = sizeof(tests)/sizeof(tests[0]); +#else + start = RUN_TEST_NO, end = RUN_TEST_NO + 1; +#endif + + for(i = start; i<end; i++){ + printf("=== Testing %s ===\n\n", tests[i].section_name); + + if(tests[i].stream){ + tcomp_result_setOutputTCPBuffer(result, buffer, OUTPUT_BUFFER_SIZE, STREAM_ID); + } + else{ + tcomp_result_setOutputUDPBuffer(result, buffer, OUTPUT_BUFFER_SIZE); + } + + /* Performs decompression */ + res_size = tcomp_manager_decompress(manager, tests[i].bytecode, tests[i].bytecode_size, result); + if(result->isNack){ + printf("\n==WE GOT A NACK\n\n"); + //sendto(tcomp_buffer_getBuffer(result->nack_info), tcomp_buffer_getSize(result->nack_info)); + } + else{ + tcomp_result_setCompartmentId(result, tests[i].comp_id, strlen(tests[i].comp_id)); + tcomp_manager_provideCompartmentId(manager, result); + } + + /* Checks result */ + checkResult(&tests[i], result, buffer, sizeof(buffer)); + + /* Get sub-sequent stream messages */ + if(tests[i].stream && (res_size || result->isNack)){ + uint64_t consumed_cycles = result->consumed_cycles; // save "consumed_cycles" (shared by all sub-sequent messages) + for(;;){ + res_size = tcomp_manager_getNextStreamMessage(manager, result); + if(!res_size && !result->isNack){ + break; + } + else if(res_size){ + tcomp_result_setCompartmentId(result, tests[i].comp_id, strlen(tests[i].comp_id)); + tcomp_manager_provideCompartmentId(manager, result); + } + else{ + printf("\n==WE GOT A NACK\n\n"); + //sendto(tcomp_buffer_getBuffer(result->nack_info), tcomp_buffer_getSize(result->nack_info)); + } + result->consumed_cycles = consumed_cycles; // restore cycles just for checking. Had been cleared by "tcomp_manager_getNextStreamMessage()" + checkResult(&tests[i], result, buffer, sizeof(buffer)); + } + } + } + + /* Free previously allocated resources. */ + TSK_OBJECT_SAFE_FREE(result); + TSK_OBJECT_SAFE_FREE(manager); + + }/* LOOP */ + + return 0; +} + +#endif /* TEST_TINYSIGCOMP_TORTURES_H */ |