From f8003f67b58a4813c925e6a533f4a917bbd80d69 Mon Sep 17 00:00:00 2001 From: Nick Chambers Date: Thu, 7 Jul 2022 18:45:17 -0500 Subject: [PATCH] Test invalid integer values --- include/gargoyle/test/gargoyle.h | 9 +++ test/gargoyle.c | 115 +++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 include/gargoyle/test/gargoyle.h create mode 100644 test/gargoyle.c diff --git a/include/gargoyle/test/gargoyle.h b/include/gargoyle/test/gargoyle.h new file mode 100644 index 0000000..1eb533c --- /dev/null +++ b/include/gargoyle/test/gargoyle.h @@ -0,0 +1,9 @@ +#ifndef __GARGOYLE_TEST_GARGOYLE_H_ +#define __GARGOYLE_TEST_GARGOYLE_H_ + +int init_suite_gargoyle(void); +int clean_suite_gargoyle(void); +void gargoyle_test_digest_argv(void); +void gargoyle_test_digest_envh(void); + +#endif diff --git a/test/gargoyle.c b/test/gargoyle.c new file mode 100644 index 0000000..28f6d2c --- /dev/null +++ b/test/gargoyle.c @@ -0,0 +1,115 @@ +#include +#include +#include + +int init_suite_gargoyle(void) { + return CUE_SUCCESS; +} + +int clean_suite_gargoyle(void) { + return CUE_SUCCESS; +} + +void gargoyle_test_digest_argv(void) { +} + +void gargoyle_test_digest_envh(void) { + const char prefix[] = "GARGOYLE"; + const uint16_t prefix_sz = sizeof(prefix) - 1; + struct gargoyle_err err; + uint64_t uint_val = 0; + int64_t sint_val = 0; + + struct gargoyle_opt optv[] = { + { GARGOYLE_EZ_OPT("uint", uint_val), GARGOYLE_TYPE_UINT }, + { GARGOYLE_EZ_OPT("sint", sint_val), GARGOYLE_TYPE_SINT } + }; + + uint16_t optc = sizeof(optv) / sizeof(struct gargoyle_opt); + + char *dirty_env[] = { + "GARGOYLE_*(#&(%&)*=", + "==============", + "GARGOYLE_\0=straw", + NULL + }; + + char **env = dirty_env; + uint8_t res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, 0); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_SUCCESS); + + env = dirty_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_STRCT); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_UNKNOWN_OPTN); + + char *normal_env[] = { + "SHELL=/bin/bash", + "PWD=/Users/uplime/gargoyle", + "HOME=/Users/uplime", + "LANG=en_US.UTF-8", + "TMPDIR=/tmp", + "USER=uplime", + "PAGER=less", + "PATH=/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:.", + NULL + }; + + env = normal_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, 0); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_SUCCESS); + + env = normal_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_STRCT); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_SUCCESS); + + char *option_env[] = { + "SHELL=/bin/bash", + "PWD=/Users/uplime/gargoyle", + "HOME=/Users/uplime", + "LANG=en_US.UTF-8", + "TMPDIR=/tmp", + "USER=uplime", + "PAGER=less", + "PATH=/usr/gnu/bin:/usr/local/bin:/bin:/usr/bin:.", + "GARGOYLE_sint=-2022", + "GARGOYLE_uint=42", + "GARGOYLE_UINT=43", + "GARGOYLE_NOT_AN_OPT=racket", + NULL + }; + + env = option_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, 0); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_SUCCESS); + CU_ASSERT_EQUAL(uint_val, 42); + CU_ASSERT_EQUAL(sint_val, -2022); + + sint_val = 0; + env = option_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_BCASE); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_SUCCESS); + CU_ASSERT_EQUAL(uint_val, 43); + CU_ASSERT_EQUAL(sint_val, -2022); + + env = option_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_STRCT); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_UNKNOWN_OPTN); + + char *uint_env[] = { + "GARGOYLE_UINT=43l", + NULL + }; + + env = uint_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_BCASE); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_INVALID_UINT); + + char *sint_env[] = { + "GARGOYLE_SINT=thunderfury", + NULL + }; + + env = sint_env; + res = gargoyle_digest_envh(optc, optv, prefix, prefix_sz, &env, &err, GARGOYLE_FLG_BCASE); + CU_ASSERT_EQUAL(res, GARGOYLE_ERR_INVALID_SINT); +}