1 // Copyright 2017 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 "chrome/common/media_router/mojom/media_router_mojom_traits.h"
6
7 #include <utility>
8
9 #include "base/test/task_environment.h"
10 #include "chrome/common/media_router/discovery/media_sink_internal.h"
11 #include "chrome/common/media_router/mojom/media_router.mojom.h"
12 #include "chrome/common/media_router/mojom/media_router_traits_test_service.mojom.h"
13 #include "mojo/public/cpp/bindings/receiver_set.h"
14 #include "mojo/public/cpp/bindings/remote.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16
17 namespace media_router {
18
19 class MediaRouterStructTraitsTest
20 : public testing::Test,
21 public media_router::mojom::MediaRouterTraitsTestService {
22 public:
MediaRouterStructTraitsTest()23 MediaRouterStructTraitsTest() {}
24
25 protected:
GetTraitsTestRemote()26 mojo::Remote<mojom::MediaRouterTraitsTestService> GetTraitsTestRemote() {
27 mojo::Remote<mojom::MediaRouterTraitsTestService> remote;
28 traits_test_receivers_.Add(this, remote.BindNewPipeAndPassReceiver());
29 return remote;
30 }
31
32 private:
33 // MediaRouterTraitsTestService Impl
EchoMediaSink(const MediaSinkInternal & sink,EchoMediaSinkCallback callback)34 void EchoMediaSink(const MediaSinkInternal& sink,
35 EchoMediaSinkCallback callback) override {
36 std::move(callback).Run(sink);
37 }
38
39 base::test::TaskEnvironment task_environment_;
40 mojo::ReceiverSet<MediaRouterTraitsTestService> traits_test_receivers_;
41
42 DISALLOW_COPY_AND_ASSIGN(MediaRouterStructTraitsTest);
43 };
44
TEST_F(MediaRouterStructTraitsTest,DialMediaSink)45 TEST_F(MediaRouterStructTraitsTest, DialMediaSink) {
46 MediaSink::Id sink_id("sinkId123");
47 std::string sink_name("The sink");
48 SinkIconType icon_type(SinkIconType::CAST);
49 MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
50 std::string ip_address("192.168.1.2");
51 std::string model_name("model name");
52 GURL app_url("https://example.com");
53
54 MediaSink sink(sink_id, sink_name, icon_type, provider_id);
55 DialSinkExtraData extra_data;
56 EXPECT_TRUE(extra_data.ip_address.AssignFromIPLiteral(ip_address));
57 extra_data.model_name = model_name;
58 extra_data.app_url = app_url;
59
60 MediaSinkInternal dial_sink(sink, extra_data);
61
62 mojo::Remote<mojom::MediaRouterTraitsTestService> remote =
63 GetTraitsTestRemote();
64 MediaSinkInternal output;
65 remote->EchoMediaSink(dial_sink, &output);
66
67 EXPECT_EQ(dial_sink, output);
68 }
69
TEST_F(MediaRouterStructTraitsTest,CastMediaSink)70 TEST_F(MediaRouterStructTraitsTest, CastMediaSink) {
71 MediaSink::Id sink_id("sinkId123");
72 std::string sink_name("The sink");
73 SinkIconType icon_type(SinkIconType::CAST);
74 MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
75 std::string model_name("model name");
76
77 MediaSink sink(sink_id, sink_name, icon_type, provider_id);
78 CastSinkExtraData extra_data;
79 extra_data.ip_endpoint = net::IPEndPoint(net::IPAddress(192, 168, 1, 2), 0);
80 extra_data.model_name = model_name;
81 extra_data.capabilities = 2;
82 extra_data.cast_channel_id = 3;
83
84 MediaSinkInternal cast_sink(sink, extra_data);
85
86 mojo::Remote<mojom::MediaRouterTraitsTestService> remote =
87 GetTraitsTestRemote();
88 MediaSinkInternal output;
89 remote->EchoMediaSink(cast_sink, &output);
90
91 EXPECT_EQ(cast_sink, output);
92 }
93
TEST_F(MediaRouterStructTraitsTest,GenericMediaSink)94 TEST_F(MediaRouterStructTraitsTest, GenericMediaSink) {
95 MediaSink::Id sink_id("sinkId123");
96 std::string sink_name("The sink");
97 SinkIconType icon_type(SinkIconType::CAST);
98 MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
99
100 MediaSink sink(sink_id, sink_name, icon_type, provider_id);
101 MediaSinkInternal generic_sink;
102 generic_sink.set_sink(sink);
103
104 mojo::Remote<mojom::MediaRouterTraitsTestService> remote =
105 GetTraitsTestRemote();
106 MediaSinkInternal output;
107 remote->EchoMediaSink(generic_sink, &output);
108
109 EXPECT_EQ(generic_sink, output);
110 }
111
112 } // namespace media_router
113