blob: a66ca96342bf573d2f97f7302c801ebf34c3636c [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/system_data/client_secret.h"
#include <string>
#include <utility>
#include <gtest/gtest.h>
namespace cobalt::system_data {
// Tests the basic functionality of ClientSecret.
TEST(ClientSecretTest, BasicTest) {
// Generate two ClientSecrets and get tokens for them.
ClientSecret secret1 = ClientSecret::GenerateNewSecret();
std::string token1 = secret1.GetToken();
ClientSecret secret2 = ClientSecret::GenerateNewSecret();
std::string token2 = secret2.GetToken();
// Now make copies of the secrets from their tokens.
ClientSecret secret1b = ClientSecret::FromToken(token1);
ClientSecret secret2b = ClientSecret::FromToken(token2);
// Check that the two secrets are different from each other but
// the copies are equal to their originals.
EXPECT_EQ(secret1, secret1b);
EXPECT_EQ(secret2, secret2b);
EXPECT_NE(secret1, secret2);
// Construct secret1c by moving data out of secret1b.
// Now secret1 should equal secret 1c.
ClientSecret secret1c(std::move(secret1b));
EXPECT_EQ(secret1, secret1c);
// All secrets are valid except for 1b because it was moved from.
EXPECT_TRUE(secret1.valid());
EXPECT_FALSE(secret1b.valid()); // NOLINT bugprone-use-after-move
EXPECT_TRUE(secret1c.valid());
EXPECT_TRUE(secret2.valid());
EXPECT_TRUE(secret2b.valid());
// A bad token yields an invalid ClientSecret.
ClientSecret invalid_secret = ClientSecret::FromToken("fake token");
EXPECT_FALSE(invalid_secret.valid());
EXPECT_EQ(std::string(), invalid_secret.GetToken());
}
} // namespace cobalt::system_data