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