File: sso_token_util_tests.c

package info (click to toggle)
aws-crt-python 0.24.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 75,932 kB
  • sloc: ansic: 418,984; python: 23,626; makefile: 6,035; sh: 4,075; ruby: 208; java: 82; perl: 73; cpp: 25; xml: 11
file content (134 lines) | stat: -rw-r--r-- 6,831 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#include <aws/testing/aws_test_harness.h>

#include "shared_credentials_test_definitions.h"
#include <aws/auth/private/sso_token_utils.h>

static int s_parse_token_location_url_test(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *start_url = aws_string_new_from_c_str(allocator, "https://d-92671207e4.awsapps.com/start");
    struct aws_string *token_path = aws_construct_sso_token_path(allocator, start_url);

    struct aws_byte_cursor token_cursor = aws_byte_cursor_from_string(token_path);
    struct aws_byte_cursor expected_token_cursor =
        aws_byte_cursor_from_c_str("13f9d35043871d073ab260e020f0ffde092cb14b.json");
    struct aws_byte_cursor find_cursor;
    ASSERT_SUCCESS(aws_byte_cursor_find_exact(&token_cursor, &expected_token_cursor, &find_cursor));

    aws_string_destroy(start_url);
    aws_string_destroy(token_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_token_location_url_test, s_parse_token_location_url_test);

static int s_parse_token_location_session_test(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *session = aws_string_new_from_c_str(allocator, "admin");
    struct aws_string *token_path = aws_construct_sso_token_path(allocator, session);
    struct aws_byte_cursor token_cursor = aws_byte_cursor_from_string(token_path);
    struct aws_byte_cursor expected_token_cursor =
        aws_byte_cursor_from_c_str("d033e22ae348aeb5660fc2140aec35850c4da997.json");
    struct aws_byte_cursor find_cursor;
    ASSERT_SUCCESS(aws_byte_cursor_find_exact(&token_cursor, &expected_token_cursor, &find_cursor));

    aws_string_destroy(session);
    aws_string_destroy(token_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_token_location_session_test, s_parse_token_location_session_test);

AWS_STATIC_STRING_FROM_LITERAL(
    s_valid_token_json,
    "{\"accessToken\": \"string\",\"expiresAt\": \"2019-11-14T04:05:45Z\",\"refreshToken\": \"string\",\"clientId\": "
    "\"123321\",\"clientSecret\": \"ABCDE123\",\"registrationExpiresAt\": "
    "\"2022-03-06T19:53:17Z\",\"region\": \"us-west-2\",\"startUrl\": \"https://d-abc123.awsapps.com/start\"}");
static int s_parse_sso_token_valid(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *file_path = aws_create_process_unique_file_name(allocator);
    ASSERT_SUCCESS(aws_create_profile_file(file_path, s_valid_token_json));
    struct aws_sso_token *sso_token = aws_sso_token_new_from_file(allocator, file_path);
    ASSERT_TRUE(aws_string_eq_c_str(sso_token->access_token, "string"));
    ASSERT_INT_EQUALS((uint64_t)aws_date_time_as_epoch_secs(&sso_token->expiration), 1573704345);
    aws_string_destroy(file_path);
    aws_sso_token_destroy(sso_token);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_sso_token_valid, s_parse_sso_token_valid);

AWS_STATIC_STRING_FROM_LITERAL(s_invalid_token_json, "invalid json");
static int s_parse_sso_token_invalid(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *file_path = aws_create_process_unique_file_name(allocator);
    ASSERT_SUCCESS(aws_create_profile_file(file_path, s_invalid_token_json));
    ASSERT_NULL(aws_sso_token_new_from_file(allocator, file_path));
    ASSERT_INT_EQUALS(AWS_AUTH_SSO_TOKEN_INVALID, aws_last_error());
    aws_string_destroy(file_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_sso_token_invalid, s_parse_sso_token_invalid);

AWS_STATIC_STRING_FROM_LITERAL(
    s_missing_access_token_json,
    "{\"expiresAt\": \"2019-11-14T04:05:45Z\",\"refreshToken\": \"string\",\"clientId\": "
    "\"123321\",\"clientSecret\": \"ABCDE123\",\"registrationExpiresAt\": "
    "\"2022-03-06T19:53:17Z\",\"region\": \"us-west-2\",\"startUrl\": \"https://d-abc123.awsapps.com/start\"}");
static int s_parse_sso_token_invalid_missing_access_token(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *file_path = aws_create_process_unique_file_name(allocator);
    ASSERT_SUCCESS(aws_create_profile_file(file_path, s_missing_access_token_json));
    ASSERT_NULL(aws_sso_token_new_from_file(allocator, file_path));
    ASSERT_INT_EQUALS(AWS_AUTH_SSO_TOKEN_INVALID, aws_last_error());
    aws_string_destroy(file_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_sso_token_invalid_missing_access_token, s_parse_sso_token_invalid_missing_access_token);

AWS_STATIC_STRING_FROM_LITERAL(
    s_missing_expires_at_json,
    "{\"accessToken\": \"string\",\"refreshToken\": \"string\",\"clientId\": "
    "\"123321\",\"clientSecret\": \"ABCDE123\",\"registrationExpiresAt\": "
    "\"2022-03-06T19:53:17Z\",\"region\": \"us-west-2\",\"startUrl\": \"https://d-abc123.awsapps.com/start\"}");
static int s_parse_sso_token_missing_expires_at(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *file_path = aws_create_process_unique_file_name(allocator);
    ASSERT_SUCCESS(aws_create_profile_file(file_path, s_missing_expires_at_json));
    ASSERT_NULL(aws_sso_token_new_from_file(allocator, file_path));
    ASSERT_INT_EQUALS(AWS_AUTH_SSO_TOKEN_INVALID, aws_last_error());
    aws_string_destroy(file_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_sso_token_missing_expires_at, s_parse_sso_token_missing_expires_at);

AWS_STATIC_STRING_FROM_LITERAL(
    s_invalid_expires_at_json,
    "{\"accessToken\": \"string\",\"expiresAt\": \"1234567\",\"refreshToken\": \"string\",\"clientId\": "
    "\"123321\",\"clientSecret\": \"ABCDE123\",\"registrationExpiresAt\": "
    "\"2022-03-06T19:53:17Z\",\"region\": \"us-west-2\",\"startUrl\": \"https://d-abc123.awsapps.com/start\"}");
static int s_parse_sso_token_invalid_expires_at(struct aws_allocator *allocator, void *ctx) {
    (void)ctx;
    aws_auth_library_init(allocator);
    struct aws_string *file_path = aws_create_process_unique_file_name(allocator);
    ASSERT_SUCCESS(aws_create_profile_file(file_path, s_invalid_expires_at_json));
    ASSERT_NULL(aws_sso_token_new_from_file(allocator, file_path));
    ASSERT_INT_EQUALS(AWS_AUTH_SSO_TOKEN_INVALID, aws_last_error());
    aws_string_destroy(file_path);
    aws_auth_library_clean_up();
    return AWS_OP_SUCCESS;
}
AWS_TEST_CASE(parse_sso_token_invalid_expires_at, s_parse_sso_token_invalid_expires_at);