1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2016 Red Hat, Inc.
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
20 #include "common/config.h"
21 #include "common/ceph_argparse.h"
22 #include "common/debug.h"
23 #include "global/global_init.h"
24 #include "include/assert.h"
25 #include "gtest/gtest.h"
26 #include "rgw/rgw_token.h"
27 #include "rgw/rgw_b64.h"
29 #define dout_subsys ceph_subsys_rgw
37 string access_key
{"Smonny"};
38 string secret_key
{"Turjan of Miir"};
40 std::vector
<RGWToken
> tokens
;
42 std::string enc_ad
{"ewogICAgIlJHV19UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAiYWQiLAogICAgICAgICJpZCI6ICJTbW9ubnkiLAogICAgICAgICJrZXkiOiAiVHVyamFuIG9mIE1paXIiCiAgICB9Cn0K"};
44 std::string enc_ldap
{"ewogICAgIlJHV19UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAibGRhcCIsCiAgICAgICAgImlkIjogIlNtb25ueSIsCiAgICAgICAgImtleSI6ICJUdXJqYW4gb2YgTWlpciIKICAgIH0KfQo="};
46 std::string non_base64
{"stuff here"};
47 std::string non_base64_sploded
{"90KLscc0Dz4U49HX-7Tx"};
49 Formatter
* formatter
{nullptr};
54 formatter
= new JSONFormatter(true /* pretty */);
55 ASSERT_NE(formatter
, nullptr);
59 // encode the two supported types
60 RGWToken
token_ad(RGWToken::TOKEN_AD
, access_key
, secret_key
);
61 ASSERT_EQ(token_ad
.encode_json_base64(formatter
), enc_ad
);
62 tokens
.push_back(token_ad
); // provies copiable
64 RGWToken
token_ldap(RGWToken::TOKEN_LDAP
, access_key
, secret_key
);
65 ASSERT_EQ(token_ldap
.encode_json_base64(formatter
), enc_ldap
);
66 tokens
.push_back(token_ldap
);
70 for (const auto& enc_tok
: {enc_ad
, enc_ldap
}) {
71 RGWToken token
{from_base64(enc_tok
)}; // decode ctor
72 ASSERT_EQ(token
.id
, access_key
);
73 ASSERT_EQ(token
.key
, secret_key
);
78 std::string empty
{""};
79 RGWToken token
{from_base64(empty
)}; // decode ctor
80 ASSERT_FALSE(token
.valid());
83 TEST(TOKEN
, BADINPUT
) {
84 RGWToken token
{from_base64(non_base64
)}; // decode ctor
85 ASSERT_FALSE(token
.valid());
88 TEST(TOKEN
, BADINPUT2
) {
89 RGWToken token
{from_base64(non_base64_sploded
)}; // decode ctor
90 ASSERT_FALSE(token
.valid());
93 TEST(TOKEN
, BADINPUT3
) {
95 std::string stuff
= from_base64(non_base64_sploded
); // decode
102 TEST(TOKEN
, SHUTDOWN
) {
106 int main(int argc
, char *argv
[])
109 vector
<const char*> args
;
111 argv_to_vec(argc
, const_cast<const char**>(argv
), args
);
114 for (auto arg_iter
= args
.begin(); arg_iter
!= args
.end();) {
115 if (ceph_argparse_flag(args
, arg_iter
, "--verbose",
123 ::testing::InitGoogleTest(&argc
, argv
);
124 return RUN_ALL_TESTS();