summaryrefslogtreecommitdiff
path: root/test/base32.c
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /test/base32.c
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14438.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'test/base32.c')
-rw-r--r--test/base32.c209
1 files changed, 0 insertions, 209 deletions
diff --git a/test/base32.c b/test/base32.c
deleted file mode 100644
index faaefc266f..0000000000
--- a/test/base32.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/* Copyright 2017 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Test Base-32 encoding/decoding
- */
-
-#include <stdio.h>
-#include "common.h"
-#include "base32.h"
-#include "test_util.h"
-#include "util.h"
-
-DECLARE_EC_TEST(test_crc5)
-{
- uint32_t seen;
- int i, j, c;
- int errors = 0;
-
- /*
- * For every current CRC value and symbol, new CRC value is unique.
- * This guarantees a single-character typo will be detected.
- */
- for (i = 0; i < 32; i++) {
- seen = 0;
- for (j = 0; j < 32; j++)
- seen |= 1 << crc5_sym(j, i);
- zassert_equal(seen, 0xffffffff, NULL);
- }
-
- /*
- * Do the same in the opposite order, to make sure a subsequent
- * character doesn't obscure a previous typo.
- */
- for (i = 0; i < 32; i++) {
- seen = 0;
- for (j = 0; j < 32; j++)
- seen |= 1 << crc5_sym(i, j);
- zassert_equal(seen, 0xffffffff, NULL);
- }
-
- /* Transposing different symbols generates distinct CRCs */
- for (c = 0; c < 32; c++) {
- for (i = 0; i < 32; i++) {
- for (j = i + 1; j < 32; j++) {
- if (crc5_sym(j, crc5_sym(i, c)) ==
- crc5_sym(i, crc5_sym(j, c)))
- errors++;
- }
- }
- }
- zassert_equal(errors, 0, NULL);
-
- return EC_SUCCESS;
-}
-
-static int enctest(const void *src, int srcbits, int crc_every,
- const char *enc)
-{
- char dest[32];
-
- if (base32_encode(dest, sizeof(dest), src, srcbits, crc_every))
- return -1;
- if (strlen(dest) != strlen(enc) || strncmp(dest, enc, strlen(dest))) {
- fprintf(stderr, "expected encode: \"%s\"\n", enc);
- fprintf(stderr, "got encode: \"%s\"\n", dest);
- return -2;
- }
- return 0;
-}
-
-#define ENCTEST(a, b, c, d) zassert_equal(enctest(a, b, c, d), 0, NULL)
-
-DECLARE_EC_TEST(test_encode)
-{
- const uint8_t src1[5] = {0xff, 0x00, 0xff, 0x00, 0xff};
- char enc[32];
-
- /* Test for enough space; error produces null string */
- *enc = 1;
- zassert_equal(base32_encode(enc, 3, src1, 15, 0), EC_ERROR_INVAL, NULL);
- zassert_equal(*enc, 0, NULL);
-
- /* Empty source */
- ENCTEST("\x00", 0, 0, "");
-
- /* Single symbol uses top 5 bits */
- ENCTEST("\x07", 5, 0, "A");
- ENCTEST("\xb8", 5, 0, "Z");
- ENCTEST("\xc0", 5, 0, "2");
- ENCTEST("\xf8", 5, 0, "9");
-
- /* Multiples of 5 bits use top bits */
- ENCTEST("\x08\x86", 10, 0, "BC");
- ENCTEST("\x08\x86", 15, 0, "BCD");
-
- /* Multiples of 8 bits pad with 0 bits */
- ENCTEST("\xff", 8, 0, "96");
- ENCTEST("\x08\x87", 16, 0, "BCDS");
-
- /* Multiples of 40 bits use all the bits */
- ENCTEST("\xff\x00\xff\x00\xff", 40, 0, "96AR8AH9");
-
- /* CRC requires exact multiple of symbol count */
- ENCTEST("\xff\x00\xff\x00\xff", 40, 4, "96ARU8AH9D");
- ENCTEST("\xff\x00\xff\x00\xff", 40, 8, "96AR8AH9L");
- zassert_equal(
- base32_encode(enc, 16, (uint8_t *)"\xff\x00\xff\x00\xff",
- 40, 6),
- EC_ERROR_INVAL, NULL);
- /* But what matters is symbol count, not bit count */
- ENCTEST("\xff\x00\xff\x00\xfe", 39, 4, "96ARU8AH8P");
-
- return EC_SUCCESS;
-}
-
-static int cmpbytes(const uint8_t *expect, const uint8_t *got, int len,
- const char *desc)
-{
- int i;
-
- if (!memcmp(expect, got, len))
- return 0;
-
- fprintf(stderr, "expected %s:", desc);
- for (i = 0; i < len; i++)
- fprintf(stderr, " %02x", expect[i]);
- fprintf(stderr, "\ngot %s: ", desc);
- for (i = 0; i < len; i++)
- fprintf(stderr, " %02x", got[i]);
- fprintf(stderr, "\n");
-
- return -2;
-}
-
-static int dectest(const void *dec, int decbits, int crc_every, const char *enc)
-{
- uint8_t dest[32];
- int destbits = decbits > 0 ? decbits : sizeof(dest) * 8;
- int wantbits = decbits > 0 ? decbits : 5 * strlen(enc);
- int gotbits = base32_decode(dest, destbits, enc, crc_every);
-
- zassert_equal(gotbits, wantbits, NULL);
- if (gotbits != wantbits)
- return -1;
- return cmpbytes(dec, dest, (decbits + 7) / 8, "decode");
-}
-
-#define DECTEST(a, b, c, d) zassert_equal(dectest(a, b, c, d), 0, NULL)
-
-DECLARE_EC_TEST(test_decode)
-{
- uint8_t dec[32];
-
- /* Decode tests, dest-limited */
- DECTEST("\xf8", 5, 0, "97");
- DECTEST("\x08", 5, 0, "BCDS");
- DECTEST("\x08\x80", 10, 0, "BCDS");
- DECTEST("\x08\x86", 15, 0, "BCDS");
- DECTEST("\xff", 8, 0, "96");
- DECTEST("\x08\x87", 16, 0, "BCDS");
- DECTEST("\xff\x00\xff\x00\xff", 40, 0, "96AR8AH9");
- DECTEST("\xff\x00\xff\x00\xfe", 39, 4, "96ARU8AH8P");
-
- /* Decode ignores whitespace and dashes */
- DECTEST("\xff\x00\xff\x00\xff", 40, 0, " 96\tA-R\r8A H9\n");
-
- /* Invalid symbol fails */
- zassert_equal(base32_decode(dec, 16, "AI", 0), -1, NULL);
-
- /* If dest buffer is big, use all the source bits */
- DECTEST("", 0, 0, "");
- DECTEST("\xf8", 0, 0, "9");
- DECTEST("\x07\xc0", 0, 0, "A9");
- DECTEST("\x00\x3e", 0, 0, "AA9");
- DECTEST("\x00\x01\xf0", 0, 0, "AAA9");
- DECTEST("\xff\x00\xff\x00\xff", 0, 0, "96AR8AH9");
-
- /* Decode always overwrites destination */
- memset(dec, 0xff, sizeof(dec));
- DECTEST("\x00\x00\x00\x00\x00", 0, 0, "AAAAAAAA");
- memset(dec, 0x00, sizeof(dec));
- DECTEST("\xff\xff\xff\xff\xff", 0, 0, "99999999");
-
- /* Good CRCs */
- DECTEST("\xff\x00\xff\x00\xff", 40, 4, "96ARU8AH9D");
- DECTEST("\xff\x00\xff\x00\xff", 40, 8, "96AR8AH9L");
-
- /* CRC requires exact multiple of symbol count */
- zassert_equal(base32_decode(dec, 40, "96ARL8AH9", 4), -1, NULL);
- /* But what matters is symbol count, not bit count */
- DECTEST("\xff\x00\xff\x00\xfe", 39, 4, "96ARU8AH8P");
-
- /* Detect errors in data, CRC, and transposition */
- zassert_equal(base32_decode(dec, 40, "96AQL", 4), -1, NULL);
- zassert_equal(base32_decode(dec, 40, "96ARM", 4), -1, NULL);
- zassert_equal(base32_decode(dec, 40, "96RAL", 4), -1, NULL);
-
- return EC_SUCCESS;
-}
-
-TEST_MAIN()
-{
- ztest_test_suite(test_base32_lib,
- ztest_unit_test(test_crc5),
- ztest_unit_test(test_encode),
- ztest_unit_test(test_decode));
- ztest_run_test_suite(test_base32_lib);
-}