iso: Shell-quote an alternative isoprog
[nbdkit/ericb.git] / server / test-utils.c
blobd6bdf465af81a1727d435a74ab5df599c42221a7
1 /* nbdkit
2 * Copyright (C) 2018 Red Hat Inc.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
11 * * Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * * Neither the name of Red Hat nor the names of its contributors may be
16 * used to endorse or promote products derived from this software without
17 * specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
22 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
26 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
29 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
33 #include <config.h>
35 #include <stdio.h>
36 #include <inttypes.h>
37 #include <stdbool.h>
39 #include "internal.h"
41 static bool error_flagged;
43 /* Stub for linking against minimal source files, and for proving that
44 * an error message is issued when expected. */
45 void
46 nbdkit_error (const char *fs, ...)
48 error_flagged = true;
51 static bool
52 test_nbdkit_parse_size (void)
54 bool pass = true;
55 struct pair {
56 const char *str;
57 int64_t res;
58 } pairs[] = {
59 /* Bogus strings */
60 { "", -1 },
61 { "0x0", -1 },
62 { "garbage", -1 },
63 { "0garbage", -1 },
64 { "8E", -1 },
65 { "8192P", -1 },
67 /* Strings leading to overflow */
68 { "9223372036854775808", -1 }, /* INT_MAX + 1 */
69 { "18446744073709551614", -1 }, /* UINT64_MAX - 1 */
70 { "18446744073709551615", -1 }, /* UINT64_MAX */
71 { "18446744073709551616", -1 }, /* UINT64_MAX + 1 */
72 { "999999999999999999999999", -1 },
74 /* Strings representing negative values */
75 { "-1", -1 },
76 { "-2", -1 },
77 { "-9223372036854775809", -1 }, /* INT64_MIN - 1 */
78 { "-9223372036854775808", -1 }, /* INT64_MIN */
79 { "-9223372036854775807", -1 }, /* INT64_MIN + 1 */
80 { "-18446744073709551616", -1 }, /* -UINT64_MAX - 1 */
81 { "-18446744073709551615", -1 }, /* -UINT64_MAX */
82 { "-18446744073709551614", -1 }, /* -UINT64_MAX + 1 */
84 /* Strings we may want to support in the future */
85 { "M", -1 },
86 { "1MB", -1 },
87 { "1MiB", -1 },
88 { "1.5M", -1 },
90 /* Valid strings */
91 { "-0", 0 },
92 { "0", 0 },
93 { "+0", 0 },
94 { " 08", 8 },
95 { "1", 1 },
96 { "+1", 1 },
97 { "1234567890", 1234567890 },
98 { "+1234567890", 1234567890 },
99 { "9223372036854775807", INT64_MAX },
100 { "1s", 512 },
101 { "2S", 1024 },
102 { "1b", 1 },
103 { "1B", 1 },
104 { "1k", 1024 },
105 { "1K", 1024 },
106 { "1m", 1024 * 1024 },
107 { "1M", 1024 * 1024 },
108 { "+1M", 1024 * 1024 },
109 { "1g", 1024 * 1024 * 1024 },
110 { "1G", 1024 * 1024 * 1024 },
111 { "1t", 1024LL * 1024 * 1024 * 1024 },
112 { "1T", 1024LL * 1024 * 1024 * 1024 },
113 { "1p", 1024LL * 1024 * 1024 * 1024 * 1024 },
114 { "1P", 1024LL * 1024 * 1024 * 1024 * 1024 },
115 { "8191p", 1024LL * 1024 * 1024 * 1024 * 1024 * 8191 },
116 { "1e", 1024LL * 1024 * 1024 * 1024 * 1024 * 1024 },
117 { "1E", 1024LL * 1024 * 1024 * 1024 * 1024 * 1024 },
120 for (size_t i = 0; i < sizeof pairs / sizeof pairs[0]; i++) {
121 int64_t r;
123 error_flagged = false;
124 r = nbdkit_parse_size (pairs[i].str);
125 if (r != pairs[i].res) {
126 fprintf (stderr,
127 "Wrong parse for %s, got %" PRId64 ", expected %" PRId64 "\n",
128 pairs[i].str, r, pairs[i].res);
129 pass = false;
131 if ((r == -1) != error_flagged) {
132 fprintf (stderr, "Wrong error message handling for %s\n", pairs[i].str);
133 pass = false;
137 return pass;
141 main (int argc, char *argv[])
143 bool pass = true;
144 pass &= test_nbdkit_parse_size ();
145 /* XXX add tests for nbdkit_absolute_path, nbdkit_read_password */
146 return pass ? 0 : 1;