xref: /aosp_15_r20/external/openscreen/cast/sender/cast_platform_client_unittest.cc (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "cast/sender/cast_platform_client.h"
6 
7 #include <utility>
8 
9 #include "cast/common/channel/testing/fake_cast_socket.h"
10 #include "cast/common/channel/testing/mock_socket_error_handler.h"
11 #include "cast/common/channel/virtual_connection_router.h"
12 #include "cast/common/public/receiver_info.h"
13 #include "cast/sender/testing/test_helpers.h"
14 #include "gmock/gmock.h"
15 #include "gtest/gtest.h"
16 #include "platform/test/fake_clock.h"
17 #include "platform/test/fake_task_runner.h"
18 #include "util/json/json_serialization.h"
19 #include "util/json/json_value.h"
20 
21 namespace openscreen {
22 namespace cast {
23 
24 using ::cast::channel::CastMessage;
25 
26 using ::testing::_;
27 
28 class CastPlatformClientTest : public ::testing::Test {
29  public:
SetUp()30   void SetUp() override {
31     socket_ = fake_cast_socket_pair_.socket.get();
32     router_.TakeSocket(&mock_error_handler_,
33                        std::move(fake_cast_socket_pair_.socket));
34 
35     receiver_.v4_address = IPAddress{192, 168, 0, 17};
36     receiver_.port = 4434;
37     receiver_.unique_id = "receiverId1";
38     platform_client_.AddOrUpdateReceiver(receiver_, socket_->socket_id());
39   }
40 
41  protected:
peer_socket()42   CastSocket& peer_socket() { return *fake_cast_socket_pair_.peer_socket; }
peer_client()43   MockCastSocketClient& peer_client() {
44     return fake_cast_socket_pair_.mock_peer_client;
45   }
46 
47   FakeCastSocketPair fake_cast_socket_pair_;
48   CastSocket* socket_ = nullptr;
49   MockSocketErrorHandler mock_error_handler_;
50   VirtualConnectionRouter router_;
51   FakeClock clock_{Clock::now()};
52   FakeTaskRunner task_runner_{&clock_};
53   CastPlatformClient platform_client_{&router_, &FakeClock::now, &task_runner_};
54   ReceiverInfo receiver_;
55 };
56 
TEST_F(CastPlatformClientTest,AppAvailability)57 TEST_F(CastPlatformClientTest, AppAvailability) {
58   int request_id = -1;
59   std::string sender_id;
60   EXPECT_CALL(peer_client(), OnMessage(_, _))
61       .WillOnce([&request_id, &sender_id](CastSocket* socket,
62                                           CastMessage message) {
63         VerifyAppAvailabilityRequest(message, "AAA", &request_id, &sender_id);
64       });
65   bool ran = false;
66   platform_client_.RequestAppAvailability(
67       "receiverId1", "AAA",
68       [&ran](const std::string& app_id, AppAvailabilityResult availability) {
69         EXPECT_EQ("AAA", app_id);
70         EXPECT_EQ(availability, AppAvailabilityResult::kAvailable);
71         ran = true;
72       });
73 
74   CastMessage availability_response =
75       CreateAppAvailableResponseChecked(request_id, sender_id, "AAA");
76   EXPECT_TRUE(peer_socket().Send(availability_response).ok());
77   EXPECT_TRUE(ran);
78 
79   // NOTE: Callback should only fire once, so it should not fire again here.
80   ran = false;
81   EXPECT_TRUE(peer_socket().Send(availability_response).ok());
82   EXPECT_FALSE(ran);
83 }
84 
TEST_F(CastPlatformClientTest,CancelRequest)85 TEST_F(CastPlatformClientTest, CancelRequest) {
86   int request_id = -1;
87   std::string sender_id;
88   EXPECT_CALL(peer_client(), OnMessage(_, _))
89       .WillOnce([&request_id, &sender_id](CastSocket* socket,
90                                           CastMessage message) {
91         VerifyAppAvailabilityRequest(message, "AAA", &request_id, &sender_id);
92       });
93   absl::optional<int> maybe_request_id =
94       platform_client_.RequestAppAvailability(
95           "receiverId1", "AAA",
96           [](const std::string& app_id, AppAvailabilityResult availability) {
97             EXPECT_TRUE(false);
98           });
99   ASSERT_TRUE(maybe_request_id);
100   int local_request_id = maybe_request_id.value();
101   platform_client_.CancelRequest(local_request_id);
102 
103   CastMessage availability_response =
104       CreateAppAvailableResponseChecked(request_id, sender_id, "AAA");
105   EXPECT_TRUE(peer_socket().Send(availability_response).ok());
106 }
107 
108 }  // namespace cast
109 }  // namespace openscreen
110