test_store.c revision 178826
1/*
2 * Copyright (c) 2006 Kungliga Tekniska H�gskolan
3 * (Royal Institute of Technology, Stockholm, Sweden).
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 *
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * 3. Neither the name of KTH nor the names of its contributors may be
18 *    used to endorse or promote products derived from this software without
19 *    specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
28 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
32
33#include "krb5_locl.h"
34#include <getarg.h>
35
36RCSID("$Id: test_store.c 20192 2007-02-05 23:21:03Z lha $");
37
38static void
39test_int8(krb5_context context, krb5_storage *sp)
40{
41    krb5_error_code ret;
42    int i;
43    int8_t val[] = {
44	0, 1, -1, 128, -127
45    }, v;
46
47    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
48
49	ret = krb5_store_int8(sp, val[i]);
50	if (ret)
51	    krb5_err(context, 1, ret, "krb5_store_int8");
52	krb5_storage_seek(sp, 0, SEEK_SET);
53	ret = krb5_ret_int8(sp, &v);
54	if (ret)
55	    krb5_err(context, 1, ret, "krb5_ret_int8");
56	if (v != val[i])
57	    krb5_errx(context, 1, "store and ret mismatch");
58    }
59}
60
61static void
62test_int16(krb5_context context, krb5_storage *sp)
63{
64    krb5_error_code ret;
65    int i;
66    int16_t val[] = {
67	0, 1, -1, 32768, -32767
68    }, v;
69
70    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
71
72	ret = krb5_store_int16(sp, val[i]);
73	if (ret)
74	    krb5_err(context, 1, ret, "krb5_store_int16");
75	krb5_storage_seek(sp, 0, SEEK_SET);
76	ret = krb5_ret_int16(sp, &v);
77	if (ret)
78	    krb5_err(context, 1, ret, "krb5_ret_int16");
79	if (v != val[i])
80	    krb5_errx(context, 1, "store and ret mismatch");
81    }
82}
83
84static void
85test_int32(krb5_context context, krb5_storage *sp)
86{
87    krb5_error_code ret;
88    int i;
89    int32_t val[] = {
90	0, 1, -1, 2147483647, -2147483646
91    }, v;
92
93    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
94
95	ret = krb5_store_int32(sp, val[i]);
96	if (ret)
97	    krb5_err(context, 1, ret, "krb5_store_int32");
98	krb5_storage_seek(sp, 0, SEEK_SET);
99	ret = krb5_ret_int32(sp, &v);
100	if (ret)
101	    krb5_err(context, 1, ret, "krb5_ret_int32");
102	if (v != val[i])
103	    krb5_errx(context, 1, "store and ret mismatch");
104    }
105}
106
107static void
108test_uint8(krb5_context context, krb5_storage *sp)
109{
110    krb5_error_code ret;
111    int i;
112    uint8_t val[] = {
113	0, 1, 255
114    }, v;
115
116    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
117
118	ret = krb5_store_uint8(sp, val[i]);
119	if (ret)
120	    krb5_err(context, 1, ret, "krb5_store_uint8");
121	krb5_storage_seek(sp, 0, SEEK_SET);
122	ret = krb5_ret_uint8(sp, &v);
123	if (ret)
124	    krb5_err(context, 1, ret, "krb5_ret_uint8");
125	if (v != val[i])
126	    krb5_errx(context, 1, "store and ret mismatch");
127    }
128}
129
130static void
131test_uint16(krb5_context context, krb5_storage *sp)
132{
133    krb5_error_code ret;
134    int i;
135    uint16_t val[] = {
136	0, 1, 65535
137    }, v;
138
139    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
140
141	ret = krb5_store_uint16(sp, val[i]);
142	if (ret)
143	    krb5_err(context, 1, ret, "krb5_store_uint16");
144	krb5_storage_seek(sp, 0, SEEK_SET);
145	ret = krb5_ret_uint16(sp, &v);
146	if (ret)
147	    krb5_err(context, 1, ret, "krb5_ret_uint16");
148	if (v != val[i])
149	    krb5_errx(context, 1, "store and ret mismatch");
150    }
151}
152
153static void
154test_uint32(krb5_context context, krb5_storage *sp)
155{
156    krb5_error_code ret;
157    int i;
158    uint32_t val[] = {
159	0, 1, 4294967295UL
160    }, v;
161
162    for (i = 0; i < sizeof(val[0])/sizeof(val); i++) {
163
164	ret = krb5_store_uint32(sp, val[i]);
165	if (ret)
166	    krb5_err(context, 1, ret, "krb5_store_uint32");
167	krb5_storage_seek(sp, 0, SEEK_SET);
168	ret = krb5_ret_uint32(sp, &v);
169	if (ret)
170	    krb5_err(context, 1, ret, "krb5_ret_uint32");
171	if (v != val[i])
172	    krb5_errx(context, 1, "store and ret mismatch");
173    }
174}
175
176
177static void
178test_storage(krb5_context context)
179{
180    krb5_storage *sp;
181
182    sp = krb5_storage_emem();
183    if (sp == NULL)
184	krb5_errx(context, 1, "krb5_storage_emem: no mem");
185
186    test_int8(context, sp);
187    test_int16(context, sp);
188    test_int32(context, sp);
189    test_uint8(context, sp);
190    test_uint16(context, sp);
191    test_uint32(context, sp);
192
193    krb5_storage_free(sp);
194}
195
196/*
197 *
198 */
199
200static int version_flag = 0;
201static int help_flag	= 0;
202
203static struct getargs args[] = {
204    {"version",	0,	arg_flag,	&version_flag,
205     "print version", NULL },
206    {"help",	0,	arg_flag,	&help_flag,
207     NULL, NULL }
208};
209
210static void
211usage (int ret)
212{
213    arg_printusage (args,
214		    sizeof(args)/sizeof(*args),
215		    NULL,
216		    "");
217    exit (ret);
218}
219
220int
221main(int argc, char **argv)
222{
223    krb5_context context;
224    krb5_error_code ret;
225    int optidx = 0;
226
227    setprogname(argv[0]);
228
229    if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optidx))
230	usage(1);
231
232    if (help_flag)
233	usage (0);
234
235    if(version_flag){
236	print_version(NULL);
237	exit(0);
238    }
239
240    argc -= optidx;
241    argv += optidx;
242
243    ret = krb5_init_context (&context);
244    if (ret)
245	errx (1, "krb5_init_context failed: %d", ret);
246
247    test_storage(context);
248
249    krb5_free_context(context);
250
251    return 0;
252}
253