Skip to content

Commit

Permalink
tests: More coverage. 100% function coverage now
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Collins <[email protected]>
  • Loading branch information
benmcollins committed Feb 6, 2025
1 parent c5bbbf7 commit 8db8704
Show file tree
Hide file tree
Showing 4 changed files with 151 additions and 2 deletions.
107 changes: 105 additions & 2 deletions tests/jwt_builder.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ START_TEST(gen_wcb)
out = jwt_builder_generate(builder);
ck_assert_ptr_nonnull(out);
ck_assert_str_eq(out, exp);


}
END_TEST

Expand Down Expand Up @@ -151,6 +153,22 @@ START_TEST(null_handling)

out = jwt_builder_generate(NULL);
ck_assert_ptr_null(out);

/* Some alg mismatches */
read_json("eddsa_key_ed25519.json");
ret = jwt_builder_setkey(builder, JWT_ALG_NONE, g_item);
ck_assert_int_ne(ret, 0);

jwt_builder_error_clear(builder);

read_json("oct_key_256.json");
ret = jwt_builder_setkey(builder, JWT_ALG_ES256, g_item);
ck_assert_int_ne(ret, 0);

jwt_builder_error_clear(builder);

ret = jwt_builder_setcb(builder, NULL, "test");
ck_assert_int_ne(ret, 0);
}
END_TEST

Expand Down Expand Up @@ -183,7 +201,7 @@ START_TEST(gen_hs256)
}
END_TEST

START_TEST(gen_es384_pub)
START_TEST(gen_hs256_bits)
{
jwt_builder_auto_t *builder = NULL;
int ret;
Expand All @@ -197,8 +215,91 @@ START_TEST(gen_es384_pub)
ret = jwt_builder_setclaims(builder, JWT_CLAIM_NONE);
ck_assert_int_eq(ret, 0);

/* Pub key will fail to set */
read_json("oct_key_256.json");
ret = jwt_builder_setkey(builder, JWT_ALG_HS384, g_item);
ck_assert_int_ne(ret, 0);

free_key();
}
END_TEST

START_TEST(claims_set_errors)
{
jwt_builder_auto_t *builder = NULL;
char *out = NULL;
const char exp[] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.";
int ret;

SET_OPS();

builder = jwt_builder_new();
ck_assert_ptr_nonnull(builder);
ck_assert_int_eq(jwt_builder_error(builder), 0);

ret = jwt_builder_setclaims(builder, JWT_CLAIM_DEFAULT);
ck_assert_int_eq(ret, 0);

read_json("oct_key_256.json");
ret = jwt_builder_setkey(builder, JWT_ALG_HS256, g_item);
ck_assert_int_eq(ret, 0);

out = jwt_builder_generate(builder);
ck_assert_ptr_nonnull(out);
ck_assert_mem_eq(out, exp, strlen(exp));

ret = jwt_builder_setclaims(builder, JWT_CLAIM_NONE | JWT_CLAIM_SUB);
ck_assert_int_ne(ret, 0);

ret = jwt_builder_setclaims(builder, ~JWT_CLAIM_NONE);
ck_assert_int_ne(ret, 0);

ret = jwt_builder_setclaims(builder, JWT_CLAIM_AUD);
ck_assert_int_eq(ret, 0);

free_key();
}
END_TEST

START_TEST(gen_es384_pub)
{
jwt_builder_auto_t *builder = NULL;
const unsigned char *buf = NULL;
jwk_key_type_t kty;
const char *crv;
size_t len = 0;
int ret, bits;

SET_OPS();

builder = jwt_builder_new();
ck_assert_ptr_nonnull(builder);
ck_assert_int_eq(jwt_builder_error(builder), 0);

ret = jwt_builder_setclaims(builder, JWT_CLAIM_NONE);
ck_assert_int_eq(ret, 0);

/* Pub key */
read_json("ec_key_secp384r1_pub.json");

/* Check the curve */
crv = jwks_item_curve(g_item);
ck_assert_str_eq(crv, "P-384");

/* Check kty */
kty = jwks_item_kty(g_item);
ck_assert_int_eq(kty, JWK_KEY_TYPE_EC);

/* Check bits */
bits = jwks_item_key_bits(g_item);
ck_assert_int_eq(bits, 384);

/* Check that these aren't there */
ret = jwks_item_key_oct(g_item, &buf, &len);
ck_assert_int_ne(ret, 0);
ck_assert_ptr_null(buf);
ck_assert_int_eq(len, 0);

/* Pub key will fail to set */
ret = jwt_builder_setkey(builder, JWT_ALG_ES384, g_item);
ck_assert_int_ne(ret, 0);
ck_assert_str_eq(jwt_builder_error_msg(builder),
Expand Down Expand Up @@ -612,6 +713,7 @@ static Suite *libjwt_suite(const char *title)

tc_core = tcase_create("HS256 Key Gen");
tcase_add_loop_test(tc_core, gen_hs256, 0, i);
tcase_add_loop_test(tc_core, gen_hs256_bits, 0, i);
tcase_add_loop_test(tc_core, gen_hs256_wcb, 0, i);
tcase_add_loop_test(tc_core, gen_hs256_stress, 0, i);
suite_add_tcase(s, tc_core);
Expand All @@ -621,6 +723,7 @@ static Suite *libjwt_suite(const char *title)
tcase_add_loop_test(tc_core, claim_int_addgetdel, 0, i);
tcase_add_loop_test(tc_core, claim_bool_addgetdel, 0, i);
tcase_add_loop_test(tc_core, claim_json_addgetdel, 0, i);
tcase_add_loop_test(tc_core, claims_set_errors, 0, i);
suite_add_tcase(s, tc_core);

tc_core = tcase_create("Header AddGetDel");
Expand Down
22 changes: 22 additions & 0 deletions tests/jwt_checker.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,9 +81,31 @@ END_TEST

static int __verify_wcb(jwt_t *jwt, jwt_config_t *config)
{
jwt_value_error_t err;
jwt_value_t jval;

ck_assert_ptr_nonnull(jwt);
ck_assert_ptr_nonnull(config);

jwt_set_GET_STR(&jval, "alg");
err = jwt_header_get(jwt, &jval);
ck_assert_int_eq(err, JWT_VALUE_ERR_NONE);
ck_assert_int_eq(jval.error, JWT_VALUE_ERR_NONE);
ck_assert_ptr_nonnull(jval.str_val);
ck_assert_str_eq(jval.str_val, "none");

jwt_set_GET_INT(&jval, "iat");
err = jwt_claim_get(jwt, &jval);
ck_assert_int_eq(err, JWT_VALUE_ERR_NOEXIST);
ck_assert_int_eq(jval.error, JWT_VALUE_ERR_NOEXIST);
ck_assert_int_eq(jval.int_val, 0);

err = jwt_header_del(jwt, "alg");
ck_assert_int_eq(err, JWT_VALUE_ERR_NONE);

err = jwt_claim_del(jwt, "iat");
ck_assert_int_eq(err, JWT_VALUE_ERR_NONE);

ck_assert_str_eq(config->ctx, "testing");

return 0;
Expand Down
8 changes: 8 additions & 0 deletions tests/jwt_hs.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ static void __verify_token(const char *token, jwt_alg_t alg)
static void __test_alg(const char *key_file, jwt_alg_t alg, const char *expected)
{
jwt_builder_auto_t *builder = NULL;
const unsigned char *buf = NULL;
char *out = NULL;
size_t len = 0;
int ret;

builder = jwt_builder_new();
Expand All @@ -44,6 +46,12 @@ static void __test_alg(const char *key_file, jwt_alg_t alg, const char *expected
ret = jwt_builder_setkey(builder, alg, g_item);
ck_assert_int_eq(ret, 0);

/* Check the values */
ret = jwks_item_key_oct(g_item, &buf, &len);
ck_assert_int_eq(ret, 0);
ck_assert_ptr_nonnull(buf);
ck_assert_int_ge(len, 32);

out = jwt_builder_generate(builder);
ck_assert_ptr_nonnull(out);
ck_assert_str_eq(out, expected);
Expand Down
16 changes: 16 additions & 0 deletions tests/jwt_jwks_errors.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ START_TEST(test_jwks_empty)
{
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item = NULL;
int ret;

SET_OPS();

Expand All @@ -96,6 +97,21 @@ START_TEST(test_jwks_empty)
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_null(item);

/* Try some null things */
ret = jwks_item_free(NULL, 0);
ck_assert_int_eq(ret, 0);

ret = jwks_item_free_all(NULL);
ck_assert_int_eq(ret, 0);

jwks_free(NULL);

ck_assert_ptr_null(jwks_create_strn(NULL, 0));

ck_assert_ptr_null(jwks_create_fromfile(NULL));

ck_assert_ptr_null(jwks_create_fromfp(NULL));

jwks_free(jwk_set);
}
END_TEST
Expand Down

0 comments on commit 8db8704

Please sign in to comment.