summaryrefslogtreecommitdiffstats
path: root/tinySIGCOMP/test/test_tortures.h
diff options
context:
space:
mode:
Diffstat (limited to 'tinySIGCOMP/test/test_tortures.h')
-rw-r--r--tinySIGCOMP/test/test_tortures.h1146
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 */
OpenPOWER on IntegriCloud