diff options
Diffstat (limited to 'chromium/media/capture/video/chromeos/token_manager_unittest.cc')
-rw-r--r-- | chromium/media/capture/video/chromeos/token_manager_unittest.cc | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/chromium/media/capture/video/chromeos/token_manager_unittest.cc b/chromium/media/capture/video/chromeos/token_manager_unittest.cc new file mode 100644 index 00000000000..1cc351b590d --- /dev/null +++ b/chromium/media/capture/video/chromeos/token_manager_unittest.cc @@ -0,0 +1,97 @@ +// Copyright 2020 The Chromium 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 "media/capture/video/chromeos/token_manager.h" + +#include <string> + +#include "base/containers/flat_map.h" +#include "base/files/file_util.h" +#include "base/unguessable_token.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace media { + +class TokenManagerTest : public ::testing::Test { + public: + TokenManagerTest() { + // Generate server token. + server_token_ = base::UnguessableToken::Create(); + manager_.AssignServerTokenForTesting(server_token_); + + // Generate tokens from trusted clients. + for (const auto& type : TokenManager::kTrustedClientTypes) { + auto& token = client_token_map_[type]; + token = base::UnguessableToken::Create(); + manager_.AssignClientTokenForTesting(type, token); + } + } + + ~TokenManagerTest() override = default; + + protected: + TokenManager manager_; + base::UnguessableToken server_token_; + base::flat_map<cros::mojom::CameraClientType, base::UnguessableToken> + client_token_map_; +}; + +// Test that TokenManager authenticates token for CameraHalServer. +TEST_F(TokenManagerTest, AuthenticateServer) { + EXPECT_TRUE(manager_.AuthenticateServer(server_token_)); +} + +// Test that TokenManager authenticates token for CameraHalClient. +TEST_F(TokenManagerTest, AuthenticateClient) { + for (auto type : TokenManager::kTrustedClientTypes) { + auto authenticated_type = + manager_.AuthenticateClient(type, client_token_map_[type]); + ASSERT_TRUE(authenticated_type.has_value()); + EXPECT_EQ(authenticated_type.value(), type); + + // Verify that an empty token fails authentication. + authenticated_type = + manager_.AuthenticateClient(type, base::UnguessableToken()); + EXPECT_FALSE(authenticated_type.has_value()); + } +} + +// Test that TokanManager authenticates token for pluginvm and the +// authentication fails when the token is unregistered. +TEST_F(TokenManagerTest, AuthenticatePluginvm) { + // Create a fake token for pluginvm. + auto token = base::UnguessableToken::Create(); + + manager_.RegisterPluginVmToken(token); + auto authenticated_type = manager_.AuthenticateClient( + cros::mojom::CameraClientType::UNKNOWN, token); + ASSERT_TRUE(authenticated_type.has_value()); + EXPECT_EQ(authenticated_type.value(), + cros::mojom::CameraClientType::PLUGINVM); + + manager_.UnregisterPluginVmToken(token); + authenticated_type = manager_.AuthenticateClient( + cros::mojom::CameraClientType::UNKNOWN, token); + EXPECT_FALSE(authenticated_type.has_value()); +} + +// Test that CameraClientType::UNKNOWN with an empty token is rejected. +TEST_F(TokenManagerTest, AuthenticateUnknown) { + auto authenticated_type = manager_.AuthenticateClient( + cros::mojom::CameraClientType::UNKNOWN, base::UnguessableToken::Create()); + EXPECT_FALSE(authenticated_type.has_value()); +} + +// Test that TokenManager::GetTokenForTrustedClient returns an empty token for +// untrusted clients. +TEST_F(TokenManagerTest, GetTokenForTrustedClientFailForUntrustedClients) { + EXPECT_TRUE( + manager_.GetTokenForTrustedClient(cros::mojom::CameraClientType::UNKNOWN) + .is_empty()); + EXPECT_TRUE( + manager_.GetTokenForTrustedClient(cros::mojom::CameraClientType::PLUGINVM) + .is_empty()); +} + +} // namespace media |