]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-oauth2: Add unit tests for valid tokens
authorAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 12 Aug 2021 09:40:39 +0000 (12:40 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Thu, 26 Aug 2021 07:38:11 +0000 (10:38 +0300)
src/lib-oauth2/test-oauth2-jwt.c

index 79f3740d1ee5a468d6057da0669399c6c091d376..aa8b1382f729f99f7ba0613d5f0d89cd979edb4f 100644 (file)
@@ -547,6 +547,76 @@ static void test_jwt_bad_valid_token(void)
        test_end();
 }
 
+static void test_jwt_valid_token(void)
+{
+       test_begin("JWT valid token tests");
+       time_t now = time(NULL);
+
+       struct test_cases {
+               time_t exp;
+               time_t iat;
+               time_t nbf;
+               const char *key_values[20];
+       } test_cases[] = {
+       {       /* valid token */
+               .exp = now + 500,
+               .key_values = {
+                       "sub", "testuser",
+                       NULL
+               },
+       },
+       {
+               .exp = now + 500,
+               .nbf = now - 500,
+               .iat = now - 250,
+               .key_values = {
+                       "sub", "testuser",
+                       NULL
+               },
+       },
+       {       /* token issued in advance */
+               .exp = now + 500,
+               .nbf = now - 500,
+               .iat = now - 3600,
+               .key_values = {
+                       "sub", "testuser",
+                       NULL,
+               },
+       },
+       };
+
+       for (size_t i = 0; i < N_ELEMENTS(test_cases); i++) T_BEGIN {
+               const struct test_cases *test_case = &test_cases[i];
+               ARRAY_TYPE(oauth2_field) fields;
+
+               t_array_init(&fields, 8);
+               for (unsigned int i = 0; test_case->key_values[i] != NULL; i += 2) {
+                       struct oauth2_field *field = array_append_space(&fields);
+                       field->name = test_case->key_values[i];
+                       field->value = test_case->key_values[i+1];
+               }
+
+               buffer_t *tokenbuf =
+                       create_jwt_token_fields("HS256", test_case->exp,
+                                               test_case->iat, test_case->nbf,
+                                               &fields);
+               sign_jwt_token_hs256(tokenbuf, hs_sign_key);
+
+               struct oauth2_request req;
+               const char *error = NULL;
+               bool is_jwt;
+
+               test_assert_idx(parse_jwt_token(&req, str_c(tokenbuf),
+                                               &is_jwt, &error) == 0, i);
+               test_assert_idx(is_jwt == TRUE, i);
+               test_assert_idx(error == NULL, i);
+               if (error != NULL)
+                       i_error("JWT validation error: %s", error);
+       } T_END;
+
+       test_end();
+}
+
 static void test_jwt_dates(void)
 {
        test_begin("JWT Token dates");
@@ -824,6 +894,7 @@ int main(void)
                test_do_init,
                test_jwt_hs_token,
                test_jwt_token_escape,
+               test_jwt_valid_token,
                test_jwt_bad_valid_token,
                test_jwt_broken_token,
                test_jwt_dates,