1 // Copyright 2018 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 "components/mirroring/service/fake_network_service.h"
6 
7 #include "media/cast/test/utility/net_utility.h"
8 #include "mojo/public/cpp/bindings/self_owned_receiver.h"
9 #include "services/network/test/test_url_loader_factory.h"
10 
11 namespace mirroring {
12 
MockUdpSocket(mojo::PendingReceiver<network::mojom::UDPSocket> receiver,mojo::PendingRemote<network::mojom::UDPSocketListener> listener)13 MockUdpSocket::MockUdpSocket(
14     mojo::PendingReceiver<network::mojom::UDPSocket> receiver,
15     mojo::PendingRemote<network::mojom::UDPSocketListener> listener)
16     : receiver_(this, std::move(receiver)), listener_(std::move(listener)) {}
17 
~MockUdpSocket()18 MockUdpSocket::~MockUdpSocket() {}
19 
Connect(const net::IPEndPoint & remote_addr,network::mojom::UDPSocketOptionsPtr options,ConnectCallback callback)20 void MockUdpSocket::Connect(const net::IPEndPoint& remote_addr,
21                             network::mojom::UDPSocketOptionsPtr options,
22                             ConnectCallback callback) {
23   std::move(callback).Run(net::OK, media::cast::test::GetFreeLocalPort());
24 }
25 
ReceiveMore(uint32_t num_additional_datagrams)26 void MockUdpSocket::ReceiveMore(uint32_t num_additional_datagrams) {
27   num_ask_for_receive_ += num_additional_datagrams;
28 }
29 
Send(base::span<const uint8_t> data,const net::MutableNetworkTrafficAnnotationTag & traffic_annotation,SendCallback callback)30 void MockUdpSocket::Send(
31     base::span<const uint8_t> data,
32     const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
33     SendCallback callback) {
34   sending_packet_ =
35       std::make_unique<media::cast::Packet>(data.begin(), data.end());
36   std::move(callback).Run(net::OK);
37   OnSend();
38 }
39 
OnReceivedPacket(const media::cast::Packet & packet)40 void MockUdpSocket::OnReceivedPacket(const media::cast::Packet& packet) {
41   if (num_ask_for_receive_) {
42     listener_->OnReceived(
43         net::OK, base::nullopt,
44         base::span<const uint8_t>(
45             reinterpret_cast<const uint8_t*>(packet.data()), packet.size()));
46     ASSERT_LT(0, num_ask_for_receive_);
47     --num_ask_for_receive_;
48   }
49 }
50 
VerifySendingPacket(const media::cast::Packet & packet)51 void MockUdpSocket::VerifySendingPacket(const media::cast::Packet& packet) {
52   EXPECT_TRUE(
53       std::equal(packet.begin(), packet.end(), sending_packet_->begin()));
54 }
55 
MockNetworkContext(mojo::PendingReceiver<network::mojom::NetworkContext> receiver)56 MockNetworkContext::MockNetworkContext(
57     mojo::PendingReceiver<network::mojom::NetworkContext> receiver)
58     : receiver_(this, std::move(receiver)) {}
~MockNetworkContext()59 MockNetworkContext::~MockNetworkContext() {}
60 
CreateUDPSocket(mojo::PendingReceiver<network::mojom::UDPSocket> receiver,mojo::PendingRemote<network::mojom::UDPSocketListener> listener)61 void MockNetworkContext::CreateUDPSocket(
62     mojo::PendingReceiver<network::mojom::UDPSocket> receiver,
63     mojo::PendingRemote<network::mojom::UDPSocketListener> listener) {
64   udp_socket_ =
65       std::make_unique<MockUdpSocket>(std::move(receiver), std::move(listener));
66   OnUDPSocketCreated();
67 }
68 
CreateURLLoaderFactory(mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,network::mojom::URLLoaderFactoryParamsPtr params)69 void MockNetworkContext::CreateURLLoaderFactory(
70     mojo::PendingReceiver<network::mojom::URLLoaderFactory> receiver,
71     network::mojom::URLLoaderFactoryParamsPtr params) {
72   ASSERT_TRUE(params);
73   mojo::MakeSelfOwnedReceiver(std::make_unique<network::TestURLLoaderFactory>(),
74                               std::move(receiver));
75 }
76 
77 }  // namespace mirroring
78