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_METHOD1(SetMsgConfirm, void(bool confirm)); 52 53 MOCK_METHOD0(Close, void()); 54 55 MOCK_CONST_METHOD1(GetPeerAddress, int(IPEndPoint* address)); 56 int GetLocalAddress(IPEndPoint* address) const override; 57 MOCK_METHOD0(UseNonBlockingIO, void()); 58 MOCK_CONST_METHOD0(NetLog, const NetLogWithSource&()); 59 60 MOCK_METHOD0(AllowAddressReuse, void()); 61 MOCK_METHOD0(AllowBroadcast, void()); 62 MOCK_METHOD0(AllowAddressSharingForMulticast, void()); 63 64 MOCK_CONST_METHOD1(JoinGroup, int(const IPAddress& group_address)); 65 MOCK_CONST_METHOD1(LeaveGroup, int(const IPAddress& address)); 66 67 MOCK_METHOD1(SetMulticastInterface, int(uint32_t interface_index)); 68 MOCK_METHOD1(SetMulticastTimeToLive, int(int ttl)); 69 MOCK_METHOD1(SetMulticastLoopbackMode, int(bool loopback)); 70 71 MOCK_METHOD1(SetDiffServCodePoint, int(DiffServCodePoint dscp)); 72 73 MOCK_METHOD0(DetachFromThread, void()); 74 75 void SetResponsePacket(const std::string& response_packet); 76 77 int HandleRecvNow(IOBuffer* buffer, 78 int size, 79 IPEndPoint* address, 80 CompletionOnceCallback callback); 81 82 int HandleRecvLater(IOBuffer* buffer, 83 int size, 84 IPEndPoint* address, 85 CompletionOnceCallback callback); 86 87 private: 88 std::string response_packet_; 89 IPEndPoint local_address_; 90 }; 91 92 class MockMDnsSocketFactory : public MDnsSocketFactory { 93 public: 94 MockMDnsSocketFactory(); 95 ~MockMDnsSocketFactory() override; 96 97 void CreateSockets( 98 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override; 99 100 void SimulateReceive(const uint8_t* packet, int size); 101 102 MOCK_METHOD1(OnSendTo, void(const std::string&)); 103 104 private: 105 int SendToInternal(const std::string& packet, 106 const std::string& address, 107 CompletionOnceCallback callback); 108 109 // The latest receive callback is always saved, since the MDnsConnection 110 // does not care which socket a packet is received on. 111 int RecvFromInternal(IOBuffer* buffer, 112 int size, 113 IPEndPoint* address, 114 CompletionOnceCallback callback); 115 116 void CreateSocket( 117 AddressFamily address_family, 118 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets); 119 120 scoped_refptr<IOBuffer> recv_buffer_; 121 int recv_buffer_size_; 122 CompletionOnceCallback recv_callback_; 123 }; 124 125 } // namespace net 126 127 #endif // NET_DNS_MOCK_MDNS_SOCKET_FACTORY_H_ 128