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(SetRecvEcn, 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 74 MOCK_METHOD0(DetachFromThread, void()); 75 76 void SetResponsePacket(const std::string& response_packet); 77 78 int HandleRecvNow(IOBuffer* buffer, 79 int size, 80 IPEndPoint* address, 81 CompletionOnceCallback callback); 82 83 int HandleRecvLater(IOBuffer* buffer, 84 int size, 85 IPEndPoint* address, 86 CompletionOnceCallback callback); 87 88 private: 89 std::string response_packet_; 90 IPEndPoint local_address_; 91 }; 92 93 class MockMDnsSocketFactory : public MDnsSocketFactory { 94 public: 95 MockMDnsSocketFactory(); 96 ~MockMDnsSocketFactory() override; 97 98 void CreateSockets( 99 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets) override; 100 101 void SimulateReceive(const uint8_t* packet, int size); 102 103 MOCK_METHOD1(OnSendTo, void(const std::string&)); 104 105 private: 106 int SendToInternal(const std::string& packet, 107 const std::string& address, 108 CompletionOnceCallback callback); 109 110 // The latest receive callback is always saved, since the MDnsConnection 111 // does not care which socket a packet is received on. 112 int RecvFromInternal(IOBuffer* buffer, 113 int size, 114 IPEndPoint* address, 115 CompletionOnceCallback callback); 116 117 void CreateSocket( 118 AddressFamily address_family, 119 std::vector<std::unique_ptr<DatagramServerSocket>>* sockets); 120 121 scoped_refptr<IOBuffer> recv_buffer_; 122 int recv_buffer_size_; 123 CompletionOnceCallback recv_callback_; 124 }; 125 126 } // namespace net 127 128 #endif // NET_DNS_MOCK_MDNS_SOCKET_FACTORY_H_ 129