// Copyright 2019 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "cast/receiver/channel/device_auth_namespace_handler.h" #include <utility> #include "cast/common/certificate/testing/test_helpers.h" #include "cast/common/channel/message_util.h" #include "cast/common/channel/proto/cast_channel.pb.h" #include "cast/common/channel/testing/fake_cast_socket.h" #include "cast/common/channel/testing/mock_socket_error_handler.h" #include "cast/common/channel/virtual_connection_router.h" #include "cast/common/public/cast_socket.h" #include "cast/receiver/channel/static_credentials.h" #include "cast/receiver/channel/testing/device_auth_test_helpers.h" #include "gmock/gmock.h" #include "gtest/gtest.h" #include "platform/test/paths.h" #include "util/read_file.h" namespace openscreen::cast { namespace { AuthResponse; CastMessage; DeviceAuthMessage; SignatureAlgorithm; _; ElementsAreArray; Invoke; const std::string& GetSpecificTestDataPath() { … } class DeviceAuthNamespaceHandlerTest : public ::testing::Test { … }; // The tests in this file use a pre-recorded AuthChallenge as input and a // matching pre-recorded AuthResponse for verification. This is to make it // easier to keep sender and receiver code separate, because the code that would // really generate an AuthChallenge and verify an AuthResponse is under // //cast/sender. The pre-recorded messages come from an integration test which // _does_ properly call both sender and receiver sides, but can optionally // record the messages for use in these unit tests. That test is currently // under //cast/test. See //cast/test/README.md for more information. // // The tests generally follow this procedure: // 1. Read a fake device certificate chain + TLS certificate from disk. // 2. Read a pre-recorded CastMessage proto containing an AuthChallenge. // 3. Send this CastMessage over a CastSocket to a DeviceAuthNamespaceHandler. // 4. Catch the CastMessage response and check that it has an AuthResponse. // 5. Check the AuthResponse against another pre-recorded protobuf. TEST_F(DeviceAuthNamespaceHandlerTest, AuthResponse) { … } TEST_F(DeviceAuthNamespaceHandlerTest, BadNonce) { … } TEST_F(DeviceAuthNamespaceHandlerTest, UnsupportedSignatureAlgorithm) { … } } // namespace } // namespace openscreen::cast