1 #include "fct.h"
2
3 #include "log.h"
4
5 #include "AmSipHeaders.h"
6 #include "AmSipMsg.h"
7 #include "AmUtils.h"
8
FCTMF_SUITE_BGN(test_headers)9 FCTMF_SUITE_BGN(test_headers) {
10
11 FCT_TEST_BGN(getHeader_simple) {
12 fct_chk( getHeader("P-My-Test: myval" CRLF, "P-My-Test") == "myval");
13 } FCT_TEST_END();
14
15 FCT_TEST_BGN(getHeader_multi) {
16 fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", true) == "myval" );
17 fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", false) == "myval, myval2" );
18 fct_chk( getHeader("P-My-Test: myval" CRLF "P-My-Otherheader: myval2" CRLF "P-My-Test: myval2" CRLF , "P-My-Test", false) == "myval, myval2" );
19 } FCT_TEST_END();
20
21 FCT_TEST_BGN(getHeader_atend) {
22
23 fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval" ,
24 "P-My-Test", true) == "mykey=myval;myotherkey=myval");
25 fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\n" ,
26 "P-My-Test", true) == "mykey=myval;myotherkey=myval");
27 fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r" ,
28 "P-My-Test", true) == "mykey=myval;myotherkey=myval");
29 fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r\n" ,
30 "P-My-Test", true) == "mykey=myval;myotherkey=myval");
31 fct_chk(getHeader("P-My-Test: mykey=myval;myotherkey=myval\r\nP-anotherheader:xy" ,
32 "P-My-Test", true) == "mykey=myval;myotherkey=myval");
33
34 } FCT_TEST_END();
35
36 FCT_TEST_BGN(getHeader_keyvalue) {
37 fct_chk(get_header_keyvalue("mykey=myval;myotherkey=myotherval", "mykey") == "myval");
38 fct_chk(get_header_keyvalue("mykey=myval1;myotherkey=myval", "myotherkey") == "myval");
39 fct_chk(get_header_keyvalue("mykey=myval;myotherkey=", "myotherkey") == "");
40 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval" CRLF, "P-My-Test", true), "mykey") == "myval" );
41
42 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval", "P-My-Test", true), "mykey") == "myval" );
43
44 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval;myotherfunkykey=myval;andsomemore", "P-My-Test", true), "mykey") == "myval" );
45
46 fct_chk(get_header_keyvalue(getHeader("P-App-Param: product_id=1;productid=1;bla=blub ", "P-App-Param"), "product_id") == "1");
47 fct_chk(get_header_keyvalue(getHeader("P-App-Param: product_id=11;productid=1;bla=blub ", "P-App-Param"), "product_id") == "11");
48 fct_chk(get_header_keyvalue(getHeader("P-App-Param: ;u=user;d=domain", "P-App-Param"), "u") == "user");
49 fct_chk(get_header_keyvalue(getHeader("P-App-Param: ;u=user", "P-App-Param"), "u") == "user");
50
51
52 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey=myval;andsomemore", "P-My-Test", true), "mykey") == "myval" );
53 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= myval;andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
54 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= \"myval\";andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
55
56 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey='myval';andsomemore", "P-My-Test", true), "myotherfunkykey") == "myval" );
57 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= '';andsomemore", "P-My-Test", true), "myotherfunkykey") == "");
58
59 fct_chk(get_header_keyvalue(getHeader("P-My-Test: mykey=myval; myotherfunkykey= 'test \\' escaped';andsomemore", "P-My-Test", true), "test \\' escaped") == "");
60 fct_chk(get_header_keyvalue("u=sayer;d=iptel.org;p=abcdef", "u") == "sayer");
61 fct_chk(get_header_keyvalue("u=sayer;d=iptel.org;p=abcdef", "d") == "iptel.org");
62
63 fct_chk(get_header_keyvalue("prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
64 fct_chk(get_header_keyvalue("some=other;prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
65 fct_chk(get_header_keyvalue("some=\"mykey\";prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
66 fct_chk(get_header_keyvalue("some=\"mykey=valx\";prefixmykey=myprefixval;mykey=myval", "mykey") == "myval");
67
68 } FCT_TEST_END();
69
70
71 FCT_TEST_BGN(getHeader_allow) {
72 fct_chk(getHeader("Subject: Performance Test\n"
73 "Allow: INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
74 } FCT_TEST_END();
75
76 FCT_TEST_BGN(getHeader_allow_substr) {
77 fct_chk(getHeader("Subject: Performance Test\n"
78 "Allow-Events: telephone-event,refer\n"
79 "Allow: INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
80 } FCT_TEST_END();
81
82 FCT_TEST_BGN(getHeader_allow3) {
83 fct_chk(getHeader("Subject: Performance Test\n"
84 "Allow : INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
85 } FCT_TEST_END();
86
87 FCT_TEST_BGN(getHeader_allow4) {
88 fct_chk(getHeader("Subject: Performance Test\n"
89 "Allow-Events : telephone-event,refer\n"
90 "Allow : INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH", "Allow") == "INVITE,ACK,OPTIONS,CANCEL,BYE,UPDATE,PRACK,INFO,SUBSCRIBE,NOTIFY,REFER,MESSAGE,PUBLISH");
91 } FCT_TEST_END();
92
93 FCT_TEST_BGN(addOptionTag) {
94 string hdrs =
95 "Supported: timer" CRLF
96 "Session-Expires: 110;refresher=uas" CRLF
97 "Supported: timer" CRLF;
98
99 string hdrs1;
100 addOptionTag(hdrs1, "Supported", "blub");
101 // DBG("hdrs1 '%s'\n", hdrs1.c_str());
102 fct_chk(hdrs1.find("Supported: blub") != string::npos);
103
104 hdrs1 = hdrs;
105 addOptionTag(hdrs1, "Supported", "something");
106 // DBG("hdrs1 '%s'\n", hdrs1.c_str());
107 fct_chk(hdrs1.find("something") != string::npos);
108
109 hdrs1 = hdrs;
110 addOptionTag(hdrs1, "Supported", "timer");
111 // DBG("hdrs1 '%s'\n", hdrs1.c_str());
112 fct_chk(hdrs1 == hdrs);
113
114 } FCT_TEST_END();
115
116 FCT_TEST_BGN(removeOptionTag) {
117 string hdrs =
118 "Supported: timer" CRLF;
119
120 string hdrs1 = hdrs;
121 removeOptionTag(hdrs1, "Supported", "notexisting");
122 // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
123 fct_chk(hdrs1 == hdrs); // dont touch
124
125 hdrs1 = hdrs;
126 removeOptionTag(hdrs1, "Supported", "timer");
127 // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
128 fct_chk(hdrs1.empty() == true); // last one
129
130 hdrs1 = hdrs + "Supported: timer" CRLF;
131 removeOptionTag(hdrs1, "Supported", "timer");
132 // DBG("hdrs1 = '%s'\n", hdrs1.c_str());
133 fct_chk(hdrs1.empty()== true); // last one
134
135 } FCT_TEST_END();
136 } FCTMF_SUITE_END();
137