Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(622)

Side by Side Diff: net/dns/mdns_client_unittest.cc

Issue 87693002: Refactored to make MDnsSocketFactory return array of sockets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <queue> 5 #include <queue>
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "net/base/rand_callback.h" 9 #include "net/base/rand_callback.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
(...skipping 1006 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 // This is a simplifying assumption based on the way the code works now. 1017 // This is a simplifying assumption based on the way the code works now.
1018 1018
1019 class SimpleMockSocketFactory 1019 class SimpleMockSocketFactory
1020 : public MDnsConnection::SocketFactory { 1020 : public MDnsConnection::SocketFactory {
1021 public: 1021 public:
1022 SimpleMockSocketFactory() { 1022 SimpleMockSocketFactory() {
1023 } 1023 }
1024 virtual ~SimpleMockSocketFactory() { 1024 virtual ~SimpleMockSocketFactory() {
1025 } 1025 }
1026 1026
1027 virtual scoped_ptr<DatagramServerSocket> CreateSocket() OVERRIDE { 1027 virtual void CreateSockets(
1028 MockMDnsDatagramServerSocket* socket = sockets_.back(); 1028 ScopedVector<MDnsConnection::Socket>* sockets) OVERRIDE {
1029 sockets_.weak_erase(sockets_.end() - 1); 1029 sockets->swap(sockets_);
1030 return scoped_ptr<DatagramServerSocket>(socket);
1031 } 1030 }
szym 2013/11/27 07:37:44 To avoid weird bugs, either sockets->clear() or DC
Vitaly Buka (NO REVIEWS) 2013/11/27 08:45:37 Done.
1032 1031
1033 void PushSocket(MockMDnsDatagramServerSocket* socket) { 1032 void PushSocket(MDnsConnection::Socket* socket) {
1034 sockets_.push_back(socket); 1033 sockets_.push_back(socket);
1035 } 1034 }
1036 1035
1037 private: 1036 private:
1038 ScopedVector<MockMDnsDatagramServerSocket> sockets_; 1037 ScopedVector<MDnsConnection::Socket> sockets_;
1039 }; 1038 };
1040 1039
1041 class MockMDnsConnectionDelegate : public MDnsConnection::Delegate { 1040 class MockMDnsConnectionDelegate : public MDnsConnection::Delegate {
1042 public: 1041 public:
1043 virtual void HandlePacket(DnsResponse* response, int size) { 1042 virtual void HandlePacket(DnsResponse* response, int size) {
1044 HandlePacketInternal(std::string(response->io_buffer()->data(), size)); 1043 HandlePacketInternal(std::string(response->io_buffer()->data(), size));
1045 } 1044 }
1046 1045
1047 MOCK_METHOD1(HandlePacketInternal, void(std::string packet)); 1046 MOCK_METHOD1(HandlePacketInternal, void(std::string packet));
1048 1047
1049 MOCK_METHOD1(OnConnectionError, void(int error)); 1048 MOCK_METHOD1(OnConnectionError, void(int error));
1050 }; 1049 };
1051 1050
1052 class MDnsConnectionTest : public ::testing::Test { 1051 class MDnsConnectionTest : public ::testing::Test {
1053 public: 1052 public:
1054 MDnsConnectionTest() : connection_(&delegate_) { 1053 MDnsConnectionTest() : connection_(&delegate_) {
1055 } 1054 }
1056 1055
1057 protected: 1056 protected:
1058 // Follow successful connection initialization. 1057 // Follow successful connection initialization.
1059 virtual void SetUp() OVERRIDE { 1058 virtual void SetUp() OVERRIDE {
1060 socket_ipv4_ = new MockMDnsDatagramServerSocket; 1059 socket_ipv4_ = new MockMDnsDatagramServerSocket;
1061 socket_ipv6_ = new MockMDnsDatagramServerSocket; 1060 socket_ipv6_ = new MockMDnsDatagramServerSocket;
1062 factory_.PushSocket(socket_ipv6_); 1061 factory_.PushSocket(socket_ipv6_);
1063 factory_.PushSocket(socket_ipv4_); 1062 factory_.PushSocket(socket_ipv4_);
1064 } 1063 }
1065 1064
1066 bool InitConnection() { 1065 bool InitConnection() {
1067 EXPECT_CALL(*socket_ipv4_, AllowAddressReuse());
1068 EXPECT_CALL(*socket_ipv6_, AllowAddressReuse());
1069
1070 EXPECT_CALL(*socket_ipv4_, SetMulticastLoopbackMode(false));
1071 EXPECT_CALL(*socket_ipv6_, SetMulticastLoopbackMode(false));
1072
1073 EXPECT_CALL(*socket_ipv4_, ListenInternal("0.0.0.0:5353"))
1074 .WillOnce(Return(OK));
1075 EXPECT_CALL(*socket_ipv6_, ListenInternal("[::]:5353"))
1076 .WillOnce(Return(OK));
1077
1078 EXPECT_CALL(*socket_ipv4_, JoinGroupInternal("224.0.0.251"))
1079 .WillOnce(Return(OK));
1080 EXPECT_CALL(*socket_ipv6_, JoinGroupInternal("ff02::fb"))
1081 .WillOnce(Return(OK));
1082
1083 return connection_.Init(&factory_); 1066 return connection_.Init(&factory_);
1084 } 1067 }
1085 1068
1086 StrictMock<MockMDnsConnectionDelegate> delegate_; 1069 StrictMock<MockMDnsConnectionDelegate> delegate_;
1087 1070
1088 MockMDnsDatagramServerSocket* socket_ipv4_; 1071 MockMDnsDatagramServerSocket* socket_ipv4_;
1089 MockMDnsDatagramServerSocket* socket_ipv6_; 1072 MockMDnsDatagramServerSocket* socket_ipv6_;
1090 SimpleMockSocketFactory factory_; 1073 SimpleMockSocketFactory factory_;
1091 MDnsConnection connection_; 1074 MDnsConnection connection_;
1092 TestCompletionCallback callback_; 1075 TestCompletionCallback callback_;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1135 new IOBufferWithSize(sizeof kSamplePacket1)); 1118 new IOBufferWithSize(sizeof kSamplePacket1));
1136 memcpy(buf->data(), kSamplePacket1, sizeof(kSamplePacket1)); 1119 memcpy(buf->data(), kSamplePacket1, sizeof(kSamplePacket1));
1137 1120
1138 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _)) 1121 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
1139 .WillOnce(Return(ERR_IO_PENDING)); 1122 .WillOnce(Return(ERR_IO_PENDING));
1140 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _)) 1123 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
1141 .WillOnce(Return(ERR_IO_PENDING)); 1124 .WillOnce(Return(ERR_IO_PENDING));
1142 1125
1143 ASSERT_TRUE(InitConnection()); 1126 ASSERT_TRUE(InitConnection());
1144 1127
1145 EXPECT_CALL(*socket_ipv4_, 1128 EXPECT_CALL(*socket_ipv4_, SendToInternal(sample_packet, _));
1146 SendToInternal(sample_packet, "224.0.0.251:5353", _)); 1129 EXPECT_CALL(*socket_ipv6_, SendToInternal(sample_packet, _));
1147 EXPECT_CALL(*socket_ipv6_,
1148 SendToInternal(sample_packet, "[ff02::fb]:5353", _));
1149 1130
1150 connection_.Send(buf, buf->size()); 1131 connection_.Send(buf, buf->size());
1151 } 1132 }
1152 1133
1153 TEST_F(MDnsConnectionTest, Error) { 1134 TEST_F(MDnsConnectionTest, Error) {
1154 CompletionCallback callback; 1135 CompletionCallback callback;
1155 1136
1156 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _)) 1137 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
1157 .WillOnce(Return(ERR_IO_PENDING)); 1138 .WillOnce(Return(ERR_IO_PENDING));
1158 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _)) 1139 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
1159 .WillOnce(DoAll(SaveArg<3>(&callback), Return(ERR_IO_PENDING))); 1140 .WillOnce(DoAll(SaveArg<3>(&callback), Return(ERR_IO_PENDING)));
1160 1141
1161 ASSERT_TRUE(InitConnection()); 1142 ASSERT_TRUE(InitConnection());
1162 1143
1163 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED)); 1144 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
1164 callback.Run(ERR_SOCKET_NOT_CONNECTED); 1145 callback.Run(ERR_SOCKET_NOT_CONNECTED);
1165 } 1146 }
1166 1147
1167 } // namespace 1148 } // namespace
1168 1149
1169 } // namespace net 1150 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698