blob: 6ae8e0f376c8e4e509296e0e1ff68e30a8b39e10 [file] [log] [blame] [edit]
/* Public domain, no copyright. Use at your own risk. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include "jwt_tests.h"
START_TEST(test_jwks_bad_json)
{
const char *json = "INVALID";
jwk_set_t *jwk_set = NULL;
const char *msg;
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(jwks_error(jwk_set));
msg = jwks_error_msg(jwk_set);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(msg[0] != '\0');
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_unknown_kty)
{
const char *json = "{\"kty\":\"INVALID\"}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Unknown or unsupported kty type";
int ret;
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ret = strncmp(exp, jwks_item_error_msg(item), strlen(exp));
ck_assert_int_eq(ret, 0);
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_missing_kty)
{
const char *json = "{\"NOT-kty\":\"INVALID\"}";
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item;
const char exp[] = "Invalid JWK: missing kty value";
int ret;
SET_OPS();
jwk_set = jwks_create(json);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
item = jwks_item_get(jwk_set, 0);
ck_assert_ptr_nonnull(item);
ck_assert_int_ne(jwks_item_error(item), 0);
ret = strncmp(exp, jwks_item_error_msg(item), strlen(exp));
ck_assert_int_eq(ret, 0);
jwks_free(jwk_set);
}
END_TEST
START_TEST(test_jwks_empty)
{
jwk_set_t *jwk_set = NULL;
const jwk_item_t *item = NULL;
int ret;
SET_OPS();
jwk_set = jwks_create(NULL);
ck_assert_ptr_nonnull(jwk_set);
ck_assert(!jwks_error(jwk_set));
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
static Suite *libjwt_suite(const char *title)
{
Suite *s;
TCase *tc_core;
int i = ARRAY_SIZE(jwt_test_ops);
s = suite_create(title);
tc_core = tcase_create("jwt_jwks_errors");
/* Core JWKS Error path tests */
tcase_add_loop_test(tc_core, test_jwks_bad_json, 0, i);
tcase_add_loop_test(tc_core, test_jwks_empty, 0, i);
tcase_add_loop_test(tc_core, test_jwks_unknown_kty, 0, i);
tcase_add_loop_test(tc_core, test_jwks_missing_kty, 0, i);
tcase_set_timeout(tc_core, 30);
suite_add_tcase(s, tc_core);
return s;
}
int main(void)
{
JWT_TEST_MAIN("LibJWT JWKS Error Path Testing");
}