Clang-format a few files to make CI happy
[collectd.git] / src / utils / oauth / oauth_test.c
1 /**
2  * collectd - src/tests/utils_oauth_test.c
3  * Copyright (C) 2015  Google Inc.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in
13  * all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21  * DEALINGS IN THE SOFTWARE.
22  *
23  * Authors:
24  *   Florian Forster <octo at google.com>
25  **/
26
27 #include "testing.h"
28 #include "utils/oauth/oauth.h"
29
30 struct {
31   char *json;
32   int status;
33   char *access_token;
34   cdtime_t expires_in;
35 } cases[] = {
36     {
37         "{\"access_token\":\"MaeC6kaePhie1ree\",\"expires_in\":3600}",
38         /* status = */ 0,
39         "MaeC6kaePhie1ree",
40         TIME_T_TO_CDTIME_T_STATIC(3600),
41     },
42     {
43         "{\"token_type\":\"Bearer\",\"expires_in\":1800,\"access_token\":"
44         "\"aeThiebee2gushuY\"}",
45         /* status = */ 0,
46         "aeThiebee2gushuY",
47         TIME_T_TO_CDTIME_T_STATIC(1800),
48     },
49     {
50         "{\"ignored_key\":\"uaph5aewaeghi1Ge\",\"expires_in\":3600}",
51         /* status = */ -1,
52         NULL,
53         0,
54     },
55     {
56         /* expires_in missing */
57         "{\"access_token\":\"shaephohbie9Ahch\"}",
58         /* status = */ -1,
59         NULL,
60         0,
61     },
62 };
63
64 DEF_TEST(simple) /* {{{ */
65 {
66   size_t i;
67   _Bool success = 1;
68
69   for (i = 0; i < (sizeof(cases) / sizeof(cases[0])); i++) {
70     char buffer[1024];
71     cdtime_t expires_in;
72
73     EXPECT_EQ_INT(cases[i].status,
74                   oauth_parse_json_token(cases[i].json, buffer, sizeof(buffer),
75                                          &expires_in));
76     if (cases[i].status != 0)
77       continue;
78
79     EXPECT_EQ_STR(cases[i].access_token, buffer);
80     EXPECT_EQ_UINT64(cases[i].expires_in, expires_in);
81   }
82
83   return success ? 0 : -1;
84 } /* }}} simple */
85
86 DEF_TEST(oauth_create_google_json) {
87   char const *in =
88       "{\"type\": \"service_account\","
89       "\"project_id\":\"collectd.org:unit-test\","
90       "\"private_key_id\": \"ed7b4eb6c1b61a7bedab5bcafff374f7fc820698\","
91       "\"private_key\":\"-----BEGIN PRIVATE KEY-----\\n"
92       "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNvS71Lr2WIEqx\\n"
93       "U766iJGORVVib0FnHhOf/0FEI4Hw+tF11vP3LZj0AyQFIi/h2l2EDXOr43C6Gt+K\\n"
94       "0stsyaWvRNzeQa+dUFY5A/ZEtdvYVPq7KudML5Hs9DNmWFlM/iIfQyIUJ+vHv7fe\\n"
95       "pJGgu4ZgSkNWehmWj3qiRzIvYxKvDIQizqPZNlTh+33KQcT2x+ErkuB3snQu8hSK\\n"
96       "HAg2sCvORqKGOvN9F4bAqXt5T0NVjGy4YXeuif1p/Np/GH6Ys1p+etgGwvIimXIv\\n"
97       "jFL9K/ZtrTOcFdy4R5bwrj2piCZa2T5H6fupVp2tVgIuS53r2fEaBMLD97oAvwZ3\\n"
98       "9XPxG1NLAgMBAAECggEACgHroKcrN1FkdgyzSIKFG1evCBCOV17kqHyI5wYXzNTT\\n"
99       "zyNrZDjBFGQkt+U0/AucTznnnahSCZNuD+QiBgLRqYgJevwp99Z6YzVDS438Xsuq\\n"
100       "Ezmf3O+sGEu78Pys11cTP38LT3yuS4iSqo9Jus5JrTG05dDJoYO4J4rxW3xlDRj8\\n"
101       "lQUimXI+S9skaSusf0oErDrjuQG9dxmhnGcSEX+rIe9G0UygTNuI0KKGJ8jmnPz5\\n"
102       "OS+sM8qrKcnjrvENFWKLb11HlliHkh6dILoO5rvf5DR+XGKM7BFAsdWg6oI7SFGh\\n"
103       "S6zGZ0jUR7QAugrjbTlDOCnAuZ+Mbc/4yHZ3u5PlcQKBgQDuvH1ds1YmmbOllOK5\\n"
104       "JtkdjCUUyH1bgkMrmcg/KkRARPRHQvfAioZsC6d0fa6jq0kTW/3Zu14IsVXgM8xK\\n"
105       "fuNSp8LdY+NCtJnfvdLaChgAwZaQLX4qgV0qYw8iLv5ifa4ZY0qaZioJCzkv57y1\\n"
106       "KkavYvITboO7aUSa441Zko9c+wKBgQDcndg0QpWH6JMz/FkCf/KDyW/cUODfKXhP\\n"
107       "5p9eTcVlfDL2sAb2RzVhvKZcuWXVwnfaDP0oBj2/SBLGx0idUb+VHdM/IGiLroyK\\n"
108       "pAHpNM//dowiGL1qPPOLXrzF/vn+w4t2Dqggfcqu52SzRiyaxUtSMnNyyyU19cO+\\n"
109       "pb7wAS5x8QKBgCW7WL0UeQtEw6Xp8CN/RlVrLvkn7tglsGQVvBZvobXesBULOokN\\n"
110       "28z70o2Qx6dKjRQoN+jPuj75eC8lQKaNg3Qu25eOD/8c+CzqnYakjcKg1iEXb5dc\\n"
111       "NtNaMKwgbUg3wOp2TPY2K3KeeX1ezO59LgrOQqBbmSpnqtYoHNEJXus9AoGAWl/y\\n"
112       "9J2eIdm9i5tBX0vIrgHz5/3d0K1tUtX3zSrwxT0Wp4W+pF7RWGNuhyePtvx+Gn4d\\n"
113       "qqq72sMMpg93CLM3Vz+rjP2atjXf7t92xPDUkCMhDsqxtXaYkixSCo4EHUA/vjIM\\n"
114       "35qIUBQMZYBGv3Q5AcgXERx09uDhuhSt3iWtwBECgYAHFnCh8fKsJbQrVN10tU/h\\n"
115       "ofVx0KZkUpBz8eNQPuxt4aY+LyWsKVKtnduw2WdumuOY66cUN1lsi8Bz/cq1dhPt\\n"
116       "Oc2S7pqjbu2Q1Oqx+/yr6jqsvKaSxHmcpbWQBsGn6UaWZgYZcAtQBcqDAp7pylwj\\n"
117       "tejRh0NB8d81H5Dli1Qfzw==\\n"
118       "-----END PRIVATE KEY-----\\n\","
119       "\"client_email\":\"example-sacct@unit-test.iam.gserviceaccount.com\", "
120       "\"client_id\": \"109958449193027604084\","
121       "\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\","
122       "\"token_uri\":\"https://accounts.google.com/o/oauth2/token\","
123       "\"auth_provider_x509_cert_url\":"
124       "\"https://www.googleapis.com/oauth2/v1/certs\","
125       "\"client_x509_cert_url\":\"https://www.googleapis.com/robot/v1/"
126       "metadata/x509/example-sacct%40ssc-serv-dev.iam.gserviceaccount.com\"}";
127
128   oauth_google_t ret =
129       oauth_create_google_json(in, "https://collectd.org/example.scope");
130
131   EXPECT_EQ_STR("collectd.org:unit-test", ret.project_id);
132
133   CHECK_NOT_NULL(ret.oauth);
134   struct {
135     char *url;
136     char *iss;
137     char *aud;
138     char *scope;
139   } *obj = (void *)ret.oauth;
140
141   EXPECT_EQ_STR("https://accounts.google.com/o/oauth2/token", obj->url);
142   EXPECT_EQ_STR("example-sacct@unit-test.iam.gserviceaccount.com", obj->iss);
143   EXPECT_EQ_STR("https://collectd.org/example.scope", obj->scope);
144
145   free(ret.project_id);
146   oauth_destroy(ret.oauth);
147
148   return 0;
149 }
150
151 int main(int argc, char **argv) /* {{{ */
152 {
153   RUN_TEST(simple);
154   RUN_TEST(oauth_create_google_json);
155
156   END_TEST;
157 } /* }}} int main */