source: heimdal/trunk/lib/asn1/check-template.c@ 9

Last change on this file since 9 was 1, checked in by Paul Smedley, 10 years ago

Initial commit of Heimdal 1.5.3

File size: 5.9 KB
Line 
1/*
2 * Copyright (c) 1999 - 2005 Kungliga Tekniska Högskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Portions Copyright (c) 2009 Apple Inc. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of the Institute nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 */
35
36#include <config.h>
37
38#include <stdio.h>
39#include <string.h>
40#include <err.h>
41#include <roken.h>
42
43#include <asn1-common.h>
44#include <asn1_err.h>
45#include <der.h>
46#include <test_asn1.h>
47
48#include "check-common.h"
49
50static int
51cmp_dummy (void *a, void *b)
52{
53 return 0;
54}
55
56static int
57test_seqofseq(void)
58{
59 struct test_case tests[] = {
60 { NULL, 2,
61 "\x30\x00",
62 "seqofseq 0" },
63 { NULL, 9,
64 "\x30\x07\x30\x05\xa0\x03\x02\x01\x00",
65 "seqofseq 1" },
66 { NULL, 16,
67 "\x30\x0e\x30\x05\xa0\x03\x02\x01\x00\x30\x05\xa0\x03\x02\x01\x01",
68 "seqofseq 2" }
69 };
70
71 int ret = 0, ntests = sizeof(tests) / sizeof(*tests);
72 TESTSeqOfSeq c0, c1, c2;
73 struct TESTSeqOfSeq_val i[2];
74
75 i[0].zero = 0;
76 i[1].zero = 1;
77
78 c0.len = 0;
79 c0.val = NULL;
80 tests[0].val = &c0;
81
82 c1.len = 1;
83 c1.val = i;
84 tests[1].val = &c1;
85
86 c2.len = 2;
87 c2.val = i;
88 tests[2].val = &c2;
89
90 ret += generic_test (tests, ntests, sizeof(TESTSeqOfSeq),
91 (generic_encode)encode_TESTSeqOfSeq,
92 (generic_length)length_TESTSeqOfSeq,
93 (generic_decode)decode_TESTSeqOfSeq,
94 (generic_free)free_TESTSeqOfSeq,
95 cmp_dummy,
96 NULL);
97 return ret;
98}
99
100static int
101test_seqofseq2(void)
102{
103 struct test_case tests[] = {
104 { NULL, 2,
105 "\x30\x00",
106 "seqofseq2 0" },
107 { NULL, 11,
108 "\x30\x09\x30\x07\xa0\x05\x1b\x03\x65\x74\x74",
109 "seqofseq2 1" },
110 { NULL, 21,
111 "\x30\x13\x30\x07\xa0\x05\x1b\x03\x65\x74\x74\x30\x08\xa0"
112 "\x06\x1b\x04\x74\x76\x61\x61",
113 "seqofseq2 2" }
114 };
115
116 int ret = 0, ntests = sizeof(tests) / sizeof(*tests);
117 TESTSeqOfSeq2 c0, c1, c2;
118 struct TESTSeqOfSeq2_val i[2];
119
120 i[0].string = "ett";
121 i[1].string = "tvaa";
122
123 c0.len = 0;
124 c0.val = NULL;
125 tests[0].val = &c0;
126
127 c1.len = 1;
128 c1.val = i;
129 tests[1].val = &c1;
130
131 c2.len = 2;
132 c2.val = i;
133 tests[2].val = &c2;
134
135 ret += generic_test (tests, ntests, sizeof(TESTSeqOfSeq2),
136 (generic_encode)encode_TESTSeqOfSeq2,
137 (generic_length)length_TESTSeqOfSeq2,
138 (generic_decode)decode_TESTSeqOfSeq2,
139 (generic_free)free_TESTSeqOfSeq2,
140 cmp_dummy,
141 NULL);
142 return ret;
143}
144
145static int
146test_seqof2(void)
147{
148 struct test_case tests[] = {
149 { NULL, 4,
150 "\x30\x02\x30\x00",
151 "seqof2 1" },
152 { NULL, 9,
153 "\x30\x07\x30\x05\x1b\x03\x66\x6f\x6f",
154 "seqof2 2" },
155 { NULL, 14,
156 "\x30\x0c\x30\x0a\x1b\x03\x66\x6f\x6f\x1b\x03\x62\x61\x72",
157 "seqof2 3" }
158 };
159
160 int ret = 0, ntests = sizeof(tests) / sizeof(*tests);
161 TESTSeqOf2 c0, c1, c2;
162 heim_general_string i[2];
163
164 i[0] = "foo";
165 i[1] = "bar";
166
167 c0.strings.val = NULL;
168 c0.strings.len = 0;
169 tests[0].val = &c0;
170
171 c1.strings.len = 1;
172 c1.strings.val = i;
173 tests[1].val = &c1;
174
175 c2.strings.len = 2;
176 c2.strings.val = i;
177 tests[2].val = &c2;
178
179 ret += generic_test (tests, ntests, sizeof(TESTSeqOf2),
180 (generic_encode)encode_TESTSeqOf2,
181 (generic_length)length_TESTSeqOf2,
182 (generic_decode)decode_TESTSeqOf2,
183 (generic_free)free_TESTSeqOf2,
184 cmp_dummy,
185 NULL);
186 return ret;
187}
188
189static int
190test_seqof3(void)
191{
192 struct test_case tests[] = {
193 { NULL, 2,
194 "\x30\x00",
195 "seqof3 0" },
196 { NULL, 4,
197 "\x30\x02\x30\x00",
198 "seqof3 1" },
199 { NULL, 9,
200 "\x30\x07\x30\x05\x1b\x03\x66\x6f\x6f",
201 "seqof3 2" },
202 { NULL, 14,
203 "\x30\x0c\x30\x0a\x1b\x03\x66\x6f\x6f\x1b\x03\x62\x61\x72",
204 "seqof3 3" }
205 };
206
207 int ret = 0, ntests = sizeof(tests) / sizeof(*tests);
208 TESTSeqOf3 c0, c1, c2, c3;
209 struct TESTSeqOf3_strings s1, s2, s3;
210 heim_general_string i[2];
211
212 i[0] = "foo";
213 i[1] = "bar";
214
215 c0.strings = NULL;
216 tests[0].val = &c0;
217
218 s1.val = NULL;
219 s1.len = 0;
220 c1.strings = &s1;
221 tests[1].val = &c1;
222
223 s2.len = 1;
224 s2.val = i;
225 c2.strings = &s2;
226 tests[2].val = &c2;
227
228 s3.len = 2;
229 s3.val = i;
230 c3.strings = &s3;
231 tests[3].val = &c3;
232
233 ret += generic_test (tests, ntests, sizeof(TESTSeqOf3),
234 (generic_encode)encode_TESTSeqOf3,
235 (generic_length)length_TESTSeqOf3,
236 (generic_decode)decode_TESTSeqOf3,
237 (generic_free)free_TESTSeqOf3,
238 cmp_dummy,
239 NULL);
240 return ret;
241}
242
243
244int
245main(int argc, char **argv)
246{
247 int ret = 0;
248
249 ret += test_seqofseq();
250 ret += test_seqofseq2();
251 ret += test_seqof2();
252 ret += test_seqof3();
253
254 return ret;
255}
Note: See TracBrowser for help on using the repository browser.