c732d49e |
/*
* 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 */ |