blob: b6acc675aa4e15dcaca24b399c6825e8c649f524 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/common/media_router/mojo/media_router_struct_traits.h"
#include <utility>
#include "base/test/scoped_task_environment.h"
#include "chrome/common/media_router/discovery/media_sink_internal.h"
#include "chrome/common/media_router/mojo/media_router.mojom.h"
#include "chrome/common/media_router/mojo/media_router_traits_test_service.mojom.h"
#include "mojo/public/cpp/bindings/binding_set.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media_router {
class MediaRouterStructTraitsTest
: public testing::Test,
public media_router::mojom::MediaRouterTraitsTestService {
public:
MediaRouterStructTraitsTest() {}
protected:
mojom::MediaRouterTraitsTestServicePtr GetTraitsTestProxy() {
mojom::MediaRouterTraitsTestServicePtr proxy;
traits_test_bindings_.AddBinding(this, mojo::MakeRequest(&proxy));
return proxy;
}
private:
// MediaRouterTraitsTestService Impl
void EchoMediaSink(const MediaSinkInternal& sink,
EchoMediaSinkCallback callback) override {
std::move(callback).Run(sink);
}
base::test::ScopedTaskEnvironment scoped_task_environment_;
mojo::BindingSet<MediaRouterTraitsTestService> traits_test_bindings_;
DISALLOW_COPY_AND_ASSIGN(MediaRouterStructTraitsTest);
};
TEST_F(MediaRouterStructTraitsTest, DialMediaSink) {
MediaSink::Id sink_id("sinkId123");
std::string sink_name("The sink");
SinkIconType icon_type(SinkIconType::CAST);
MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
std::string ip_address("192.168.1.2");
std::string model_name("model name");
GURL app_url("https://example.com");
MediaSink sink(sink_id, sink_name, icon_type, provider_id);
DialSinkExtraData extra_data;
EXPECT_TRUE(extra_data.ip_address.AssignFromIPLiteral(ip_address));
extra_data.model_name = model_name;
extra_data.app_url = app_url;
MediaSinkInternal dial_sink(sink, extra_data);
mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy();
MediaSinkInternal output;
proxy->EchoMediaSink(dial_sink, &output);
EXPECT_EQ(dial_sink, output);
}
TEST_F(MediaRouterStructTraitsTest, CastMediaSink) {
MediaSink::Id sink_id("sinkId123");
std::string sink_name("The sink");
SinkIconType icon_type(SinkIconType::CAST);
MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
std::string model_name("model name");
MediaSink sink(sink_id, sink_name, icon_type, provider_id);
CastSinkExtraData extra_data;
extra_data.ip_endpoint = net::IPEndPoint(net::IPAddress(192, 168, 1, 2), 0);
extra_data.model_name = model_name;
extra_data.capabilities = 2;
extra_data.cast_channel_id = 3;
MediaSinkInternal cast_sink(sink, extra_data);
mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy();
MediaSinkInternal output;
proxy->EchoMediaSink(cast_sink, &output);
EXPECT_EQ(cast_sink, output);
}
TEST_F(MediaRouterStructTraitsTest, GenericMediaSink) {
MediaSink::Id sink_id("sinkId123");
std::string sink_name("The sink");
SinkIconType icon_type(SinkIconType::CAST);
MediaRouteProviderId provider_id(MediaRouteProviderId::EXTENSION);
MediaSink sink(sink_id, sink_name, icon_type, provider_id);
MediaSinkInternal generic_sink;
generic_sink.set_sink(sink);
mojom::MediaRouterTraitsTestServicePtr proxy = GetTraitsTestProxy();
MediaSinkInternal output;
proxy->EchoMediaSink(generic_sink, &output);
EXPECT_EQ(generic_sink, output);
}
} // namespace media_router