source: vendor/current/pidl/tests/ndr_string.pl

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 4.2 KB
Line 
1#!/usr/bin/perl
2# String tests for pidl
3# (C) 2005 Jelmer Vernooij <jelmer@samba.org>
4# Published under the GNU General Public License
5use strict;
6
7use Test::More tests => 6 * 8;
8use FindBin qw($RealBin);
9use lib "$RealBin";
10use Util qw(test_samba4_ndr);
11
12test_samba4_ndr("string-pull-empty",
13' [public] void TestString([in,flag(STR_ASCII|LIBNDR_FLAG_STR_SIZE4)] string data);',
14'
15 uint8_t data[] = { 0x00, 0x00, 0x00, 0x00 };
16 DATA_BLOB b = { data, 4 };
17 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
18 struct TestString r;
19 r.in.data = NULL;
20
21 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
22 return 1;
23
24 if (r.in.data == NULL)
25 return 2;
26
27 if (r.in.data[0] != 0)
28 return 3;
29');
30
31test_samba4_ndr("string-ascii-pull",
32'
33 [public] void TestString([in,flag(STR_ASCII|LIBNDR_FLAG_STR_SIZE4)] string data);
34',
35'
36 uint8_t data[] = { 0x03, 0x00, 0x00, 0x00,
37 \'f\', \'o\', \'o\', 0 };
38 DATA_BLOB b = { data, 8 };
39 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
40 struct TestString r;
41 r.in.data = NULL;
42
43 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
44 return 1;
45
46 if (r.in.data == NULL)
47 return 2;
48
49 if (strncmp(r.in.data, "foo", 3) != 0)
50 return 3;
51
52 if (r.in.data[4] != 0)
53 return 4;
54');
55
56test_samba4_ndr("string-wchar-fixed-array-01",
57'
58 typedef struct {
59 uint32 l1;
60 [string,charset(UTF16)] uint16 str[6];
61 uint32 l2;
62 } TestStringStruct;
63
64 [public] void TestString([in,ref] TestStringStruct *str);
65',
66'
67 uint8_t data[] = { 0x01, 0x00, 0x00, 0x00,
68 0x00, 0x00, 0x00, 0x00,
69 0x04, 0x00, 0x00, 0x00,
70 \'f\', 0x00, \'o\', 0x00,
71 \'o\', 0x00, 0x00, 0x00,
72 0x02, 0x00, 0x00, 0x00
73 };
74 DATA_BLOB b = { data, sizeof(data) };
75 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
76 struct TestString r;
77 struct TestStringStruct str;
78 r.in.str = &str;
79
80 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
81 return 1;
82
83 if (r.in.str == NULL)
84 return 2;
85
86 if (r.in.str->l1 != 0x00000001)
87 return 3;
88
89 if (strncmp(str.str, "foo", 3) != 0)
90 return 4;
91
92 if (r.in.str->str[4] != 0)
93 return 5;
94
95 if (r.in.str->l2 != 0x00000002)
96 return 6;
97');
98
99test_samba4_ndr("string-wchar-fixed-array-02",
100'
101 typedef struct {
102 uint32 l1;
103 [string,charset(UTF16)] uint16 str[6];
104 uint32 l2;
105 } TestStringStruct;
106
107 [public] void TestString([in,ref] TestStringStruct *str);
108',
109'
110 uint8_t data[] = { 0x01, 0x00, 0x00, 0x00,
111 0x00, 0x00, 0x00, 0x00,
112 0x06, 0x00, 0x00, 0x00,
113 \'f\', 0x00, \'o\', 0x00,
114 \'o\', 0x00, \'b\', 0x00,
115 \'a\', 0x00, \'r\', 0x00,
116 0x00, 0x00, 0x00, 0x00,
117 0x02, 0x00, 0x00, 0x00
118 };
119 DATA_BLOB b = { data, sizeof(data) };
120 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
121 struct TestString r;
122 struct TestStringStruct str;
123 r.in.str = &str;
124
125 /* the string terminator is wrong */
126 if (NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
127 return 1;
128');
129
130test_samba4_ndr("string-wchar-fixed-array-03",
131'
132 typedef struct {
133 uint32 l1;
134 [string,charset(UTF16)] uint16 str[6];
135 uint32 l2;
136 } TestStringStruct;
137
138 [public] void TestString([in,ref] TestStringStruct *str);
139',
140'
141 uint8_t data[] = { 0x01, 0x00, 0x00, 0x00,
142 0x00, 0x00, 0x00, 0x00,
143 0x07, 0x00, 0x00, 0x00,
144 \'f\', 0x00, \'o\', 0x00,
145 \'o\', 0x00, \'b\', 0x00,
146 \'a\', 0x00, \'r\', 0x00,
147 0x00, 0x00, 0x00, 0x00,
148 0x02, 0x00, 0x00, 0x00
149 };
150 DATA_BLOB b = { data, sizeof(data) };
151 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
152 struct TestString r;
153 struct TestStringStruct str;
154 r.in.str = &str;
155
156 /* the length 0x07 is to large */
157 if (NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
158 return 1;
159');
160
161SKIP: {
162 skip "doesn't seem to work yet", 8;
163
164test_samba4_ndr("string-out",
165'
166 [public] void TestString([out,string,charset(UNIX)] uint8 **data);
167',
168'
169 uint8_t data[] = { 0x03, 0x00, 0x00, 0x00,
170 \'f\', \'o\', \'o\', 0 };
171 DATA_BLOB b = { data, 8 };
172 struct ndr_pull *ndr = ndr_pull_init_blob(&b, NULL);
173 struct TestString r;
174 char *str = NULL;
175 r.out.data = &str;
176
177 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_TestString(ndr, NDR_IN, &r)))
178 return 1;
179
180 if (r.out.data == NULL)
181 return 2;
182
183 if (*r.out.data == NULL)
184 return 3;
185
186 if (strncmp(r.out.data, "foo", 3) != 0)
187 return 4;
188
189 if (r.out.data[4] != 0)
190 return 5;
191');
192}
Note: See TracBrowser for help on using the repository browser.