xref: /aosp_15_r20/external/openscreen/cast/sender/testing/test_helpers.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/testing/test_helpers.h"
6 
7 #include "cast/common/channel/message_util.h"
8 #include "cast/receiver/channel/message_util.h"
9 #include "cast/sender/channel/message_util.h"
10 #include "gtest/gtest.h"
11 #include "util/json/json_serialization.h"
12 #include "util/json/json_value.h"
13 #include "util/osp_logging.h"
14 
15 namespace openscreen {
16 namespace cast {
17 
18 using ::cast::channel::CastMessage;
19 
VerifyAppAvailabilityRequest(const CastMessage & message,const std::string & expected_app_id,int * request_id_out,std::string * sender_id_out)20 void VerifyAppAvailabilityRequest(const CastMessage& message,
21                                   const std::string& expected_app_id,
22                                   int* request_id_out,
23                                   std::string* sender_id_out) {
24   std::string app_id_out;
25   VerifyAppAvailabilityRequest(message, &app_id_out, request_id_out,
26                                sender_id_out);
27   EXPECT_EQ(app_id_out, expected_app_id);
28 }
29 
VerifyAppAvailabilityRequest(const CastMessage & message,std::string * app_id_out,int * request_id_out,std::string * sender_id_out)30 void VerifyAppAvailabilityRequest(const CastMessage& message,
31                                   std::string* app_id_out,
32                                   int* request_id_out,
33                                   std::string* sender_id_out) {
34   EXPECT_EQ(message.namespace_(), kReceiverNamespace);
35   EXPECT_EQ(message.destination_id(), kPlatformReceiverId);
36   EXPECT_EQ(message.payload_type(),
37             ::cast::channel::CastMessage_PayloadType_STRING);
38   EXPECT_NE(message.source_id(), kPlatformSenderId);
39   *sender_id_out = message.source_id();
40 
41   ErrorOr<Json::Value> maybe_value = json::Parse(message.payload_utf8());
42   ASSERT_TRUE(maybe_value);
43   Json::Value& value = maybe_value.value();
44 
45   absl::optional<absl::string_view> maybe_type =
46       MaybeGetString(value, JSON_EXPAND_FIND_CONSTANT_ARGS(kMessageKeyType));
47   ASSERT_TRUE(maybe_type);
48   EXPECT_EQ(maybe_type.value(),
49             CastMessageTypeToString(CastMessageType::kGetAppAvailability));
50 
51   absl::optional<int> maybe_id =
52       MaybeGetInt(value, JSON_EXPAND_FIND_CONSTANT_ARGS(kMessageKeyRequestId));
53   ASSERT_TRUE(maybe_id);
54   *request_id_out = maybe_id.value();
55 
56   const Json::Value* maybe_app_ids =
57       value.find(JSON_EXPAND_FIND_CONSTANT_ARGS(kMessageKeyAppId));
58   ASSERT_TRUE(maybe_app_ids);
59   ASSERT_TRUE(maybe_app_ids->isArray());
60   ASSERT_EQ(maybe_app_ids->size(), 1u);
61   Json::Value app_id_value = maybe_app_ids->get(0u, Json::Value(""));
62   absl::optional<absl::string_view> maybe_app_id = MaybeGetString(app_id_value);
63   ASSERT_TRUE(maybe_app_id);
64   *app_id_out =
65       std::string(maybe_app_id.value().begin(), maybe_app_id.value().end());
66 }
67 
CreateAppAvailableResponseChecked(int request_id,const std::string & sender_id,const std::string & app_id)68 CastMessage CreateAppAvailableResponseChecked(int request_id,
69                                               const std::string& sender_id,
70                                               const std::string& app_id) {
71   ErrorOr<CastMessage> message =
72       CreateAppAvailableResponse(request_id, sender_id, app_id);
73   OSP_CHECK(message);
74   return std::move(message.value());
75 }
76 
CreateAppUnavailableResponseChecked(int request_id,const std::string & sender_id,const std::string & app_id)77 CastMessage CreateAppUnavailableResponseChecked(int request_id,
78                                                 const std::string& sender_id,
79                                                 const std::string& app_id) {
80   ErrorOr<CastMessage> message =
81       CreateAppUnavailableResponse(request_id, sender_id, app_id);
82   OSP_CHECK(message);
83   return std::move(message.value());
84 }
85 
86 }  // namespace cast
87 }  // namespace openscreen
88