1 // Copyright 2013 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_DNS_MOCK_MDNS_SOCKET_FACTORY_H_ 6 #define NET_DNS_MOCK_MDNS_SOCKET_FACTORY_H_ 7 8 #include <stdint.h> 9 10 #include <memory> 11 #include <string> 12 #include <vector> 13 14 #include "net/base/completion_once_callback.h" 15 #include "net/base/completion_repeating_callback.h" 16 #include "net/dns/mdns_client_impl.h" 17 #include "net/log/net_log_with_source.h" 18 #include "testing/gmock/include/gmock/gmock.h" 19 20 namespace net { 21 22 class IPAddress; 23 24 class MockMDnsDatagramServerSocket : public DatagramServerSocket { 25 public: 26 explicit MockMDnsDatagramServerSocket(AddressFamily address_family); 27 ~MockMDnsDatagramServerSocket() override; 28 29 // DatagramServerSocket implementation: 30 MOCK_METHOD1(Listen, int(const IPEndPoint& address)); 31 32 MOCK_METHOD4(RecvFrom, 33 int(IOBuffer* buffer, 34 int size, 35 IPEndPoint* address, 36 CompletionOnceCallback callback)); 37 38 int SendTo(IOBuffer* buf, 39 int buf_len, 40 const IPEndPoint& address, 41 CompletionOnceCallback callback) override; 42 43 MOCK_METHOD3(SendToInternal, 44 int(const std::string& packet, 45 const std::string address, 46 CompletionOnceCallback callback)); 47 48 MOCK_METHOD1(SetReceiveBufferSize, int(int32_t size)); 49 MOCK_METHOD1(SetSendBufferSize, int(int32_t size)); 50 MOCK_METHOD0(SetDoNotFragment, int()); 51 MOCK_METHOD0(SetRecvTos, int()); 52 MOCK_METHOD1(SetMsgConfirm, void(bool confirm)); 53 54 MOCK_METHOD0(Close, void()); 55 56 MOCK_CONST_METHOD1(GetPeerAddress, int(IPEndPoint* address)); 57 int GetLocalAddress(IPEndPoint* address) const override; 58 MOCK_METHOD0(UseNonBlockingIO, void()); 59 MOCK_CONST_METHOD0(NetLog, const NetLogWithSource&()); 60 61 MOCK_METHOD0(AllowAddressReuse, void()); 62 MOCK_METHOD0(AllowBroadcast, void()); 63 MOCK_METHOD0(AllowAddressSharingForMulticast, void()); 64 65 MOCK_CONST_METHOD1(JoinGroup, int(const IPAddress& group_address)); 66 MOCK_CONST_METHOD1(LeaveGroup, int(const IPAddress& address)); 67 68 MOCK_METHOD1(SetMulticastInterface, int(uint32_t interface_index)); 69 MOCK_METHOD1(SetMulticastTimeToLive, int(int ttl)); 70 MOCK_METHOD1(SetMulticastLoopbackMode, int(bool loopback)); 71 72 MOCK_METHOD1(SetDiffServCodePoint, int(DiffServCodePoint dscp)); 73 MOCK_METHOD2(SetTos, int(DiffServCodePoint dscp, EcnCodePoint ecn)); 74 75 MOCK_METHOD0(DetachFromThread, void()); 76 MOCK_CONST_METHOD0(GetLastTos, DscpAndEcn()); 77 78 void SetResponsePacket(const std::string& response_packet); 79 80 int HandleRecvNow(IOBuffer* buffer, 81 int size, 82 IPEndPoint* address, 83 CompletionOnceCallback callback); 84 85 int HandleRecvLater(IOBuffer* buffer, 86 int size, 87 IPEndPoint* address, 88 CompletionOnceCallback callback); 89 90 private: 91 std::string response_packet_; 92 IPEndPoint local_address_; 93 }; 94 95 class MockMDnsSocketFactory : public MDnsSocketFactory { 96 public: 97 MockMDnsSocketFactory(); 98 ~MockMDnsSocketFactory() override; 99 100 void CreateSockets( 101 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override; 102 103 void SimulateReceive(const uint8_t* packet, int size); 104 105 MOCK_METHOD1(OnSendTo, void(const std::string&)); 106 107 private: 108 int SendToInternal(const std::string& packet, 109 const std::string& address, 110 CompletionOnceCallback callback); 111 112 // The latest receive callback is always saved, since the MDnsConnection 113 // does not care which socket a packet is received on. 114 int RecvFromInternal(IOBuffer* buffer, 115 int size, 116 IPEndPoint* address, 117 CompletionOnceCallback callback); 118 119 void CreateSocket( 120 AddressFamily address_family, 121 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets); 122 123 scoped_refptr<IOBuffer> recv_buffer_; 124 int recv_buffer_size_; 125 CompletionOnceCallback recv_callback_; 126 }; 127 128 } // namespace net 129 130 #endif // NET_DNS_MOCK_MDNS_SOCKET_FACTORY_H_ 131