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

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

Issue 21534003: avoid char+'\xHH' as it's too easy to use values > 127 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: corresponding change in chrome unit tests Created 7 years, 4 months 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
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 10 matching lines...) Expand all
21 using ::testing::NiceMock; 21 using ::testing::NiceMock;
22 using ::testing::Exactly; 22 using ::testing::Exactly;
23 using ::testing::Return; 23 using ::testing::Return;
24 using ::testing::SaveArg; 24 using ::testing::SaveArg;
25 using ::testing::_; 25 using ::testing::_;
26 26
27 namespace net { 27 namespace net {
28 28
29 namespace { 29 namespace {
30 30
31 const char kSamplePacket1[] = { 31 const uint8 kSamplePacket1[] = {
32 // Header 32 // Header
33 '\x00', '\x00', // ID is zeroed out 33 0x00, 0x00, // ID is zeroed out
34 '\x81', '\x80', // Standard query response, RA, no error 34 0x81, 0x80, // Standard query response, RA, no error
35 '\x00', '\x00', // No questions (for simplicity) 35 0x00, 0x00, // No questions (for simplicity)
36 '\x00', '\x02', // 2 RRs (answers) 36 0x00, 0x02, // 2 RRs (answers)
37 '\x00', '\x00', // 0 authority RRs 37 0x00, 0x00, // 0 authority RRs
38 '\x00', '\x00', // 0 additional RRs 38 0x00, 0x00, // 0 additional RRs
39 39
40 // Answer 1 40 // Answer 1
41 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 41 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
42 '\x04', '_', 't', 'c', 'p', 42 0x04, '_', 't', 'c', 'p',
43 '\x05', 'l', 'o', 'c', 'a', 'l', 43 0x05, 'l', 'o', 'c', 'a', 'l',
44 '\x00', 44 0x00,
45 '\x00', '\x0c', // TYPE is PTR. 45 0x00, 0x0c, // TYPE is PTR.
46 '\x00', '\x01', // CLASS is IN. 46 0x00, 0x01, // CLASS is IN.
47 '\x00', '\x00', // TTL (4 bytes) is 1 second; 47 0x00, 0x00, // TTL (4 bytes) is 1 second;
48 '\x00', '\x01', 48 0x00, 0x01,
49 '\x00', '\x08', // RDLENGTH is 8 bytes. 49 0x00, 0x08, // RDLENGTH is 8 bytes.
50 '\x05', 'h', 'e', 'l', 'l', 'o', 50 0x05, 'h', 'e', 'l', 'l', 'o',
51 '\xc0', '\x0c', 51 0xc0, 0x0c,
52 52
53 // Answer 2 53 // Answer 2
54 '\x08', '_', 'p', 'r', 'i', 'n', 't', 'e', 'r', 54 0x08, '_', 'p', 'r', 'i', 'n', 't', 'e', 'r',
55 '\xc0', '\x14', // Pointer to "._tcp.local" 55 0xc0, 0x14, // Pointer to "._tcp.local"
56 '\x00', '\x0c', // TYPE is PTR. 56 0x00, 0x0c, // TYPE is PTR.
57 '\x00', '\x01', // CLASS is IN. 57 0x00, 0x01, // CLASS is IN.
58 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 49 seconds. 58 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 49 seconds.
59 '\x24', '\x75', 59 0x24, 0x75,
60 '\x00', '\x08', // RDLENGTH is 8 bytes. 60 0x00, 0x08, // RDLENGTH is 8 bytes.
61 '\x05', 'h', 'e', 'l', 'l', 'o', 61 0x05, 'h', 'e', 'l', 'l', 'o',
62 '\xc0', '\x32' 62 0xc0, 0x32
63 }; 63 };
64 64
65 const char kCorruptedPacketBadQuestion[] = { 65 const uint8 kCorruptedPacketBadQuestion[] = {
66 // Header 66 // Header
67 '\x00', '\x00', // ID is zeroed out 67 0x00, 0x00, // ID is zeroed out
68 '\x81', '\x80', // Standard query response, RA, no error 68 0x81, 0x80, // Standard query response, RA, no error
69 '\x00', '\x01', // One question 69 0x00, 0x01, // One question
70 '\x00', '\x02', // 2 RRs (answers) 70 0x00, 0x02, // 2 RRs (answers)
71 '\x00', '\x00', // 0 authority RRs 71 0x00, 0x00, // 0 authority RRs
72 '\x00', '\x00', // 0 additional RRs 72 0x00, 0x00, // 0 additional RRs
73 73
74 // Question is corrupted and cannot be read. 74 // Question is corrupted and cannot be read.
75 '\x99', 'h', 'e', 'l', 'l', 'o', 75 0x99, 'h', 'e', 'l', 'l', 'o',
76 '\x00', 76 0x00,
77 '\x00', '\x00', 77 0x00, 0x00,
78 '\x00', '\x00', 78 0x00, 0x00,
79 79
80 // Answer 1 80 // Answer 1
81 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 81 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
82 '\x04', '_', 't', 'c', 'p', 82 0x04, '_', 't', 'c', 'p',
83 '\x05', 'l', 'o', 'c', 'a', 'l', 83 0x05, 'l', 'o', 'c', 'a', 'l',
84 '\x00', 84 0x00,
85 '\x00', '\x0c', // TYPE is PTR. 85 0x00, 0x0c, // TYPE is PTR.
86 '\x00', '\x01', // CLASS is IN. 86 0x00, 0x01, // CLASS is IN.
87 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 87 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
88 '\x24', '\x74', 88 0x24, 0x74,
89 '\x00', '\x99', // RDLENGTH is impossible 89 0x00, 0x99, // RDLENGTH is impossible
90 '\x05', 'h', 'e', 'l', 'l', 'o', 90 0x05, 'h', 'e', 'l', 'l', 'o',
91 '\xc0', '\x0c', 91 0xc0, 0x0c,
92 92
93 // Answer 2 93 // Answer 2
94 '\x08', '_', 'p', 'r', // Useless trailing data. 94 0x08, '_', 'p', 'r', // Useless trailing data.
95 }; 95 };
96 96
97 const char kCorruptedPacketUnsalvagable[] = { 97 const uint8 kCorruptedPacketUnsalvagable[] = {
98 // Header 98 // Header
99 '\x00', '\x00', // ID is zeroed out 99 0x00, 0x00, // ID is zeroed out
100 '\x81', '\x80', // Standard query response, RA, no error 100 0x81, 0x80, // Standard query response, RA, no error
101 '\x00', '\x00', // No questions (for simplicity) 101 0x00, 0x00, // No questions (for simplicity)
102 '\x00', '\x02', // 2 RRs (answers) 102 0x00, 0x02, // 2 RRs (answers)
103 '\x00', '\x00', // 0 authority RRs 103 0x00, 0x00, // 0 authority RRs
104 '\x00', '\x00', // 0 additional RRs 104 0x00, 0x00, // 0 additional RRs
105 105
106 // Answer 1 106 // Answer 1
107 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 107 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
108 '\x04', '_', 't', 'c', 'p', 108 0x04, '_', 't', 'c', 'p',
109 '\x05', 'l', 'o', 'c', 'a', 'l', 109 0x05, 'l', 'o', 'c', 'a', 'l',
110 '\x00', 110 0x00,
111 '\x00', '\x0c', // TYPE is PTR. 111 0x00, 0x0c, // TYPE is PTR.
112 '\x00', '\x01', // CLASS is IN. 112 0x00, 0x01, // CLASS is IN.
113 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 113 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
114 '\x24', '\x74', 114 0x24, 0x74,
115 '\x00', '\x99', // RDLENGTH is impossible 115 0x00, 0x99, // RDLENGTH is impossible
116 '\x05', 'h', 'e', 'l', 'l', 'o', 116 0x05, 'h', 'e', 'l', 'l', 'o',
117 '\xc0', '\x0c', 117 0xc0, 0x0c,
118 118
119 // Answer 2 119 // Answer 2
120 '\x08', '_', 'p', 'r', // Useless trailing data. 120 0x08, '_', 'p', 'r', // Useless trailing data.
121 }; 121 };
122 122
123 const char kCorruptedPacketDoubleRecord[] = { 123 const uint8 kCorruptedPacketDoubleRecord[] = {
124 // Header 124 // Header
125 '\x00', '\x00', // ID is zeroed out 125 0x00, 0x00, // ID is zeroed out
126 '\x81', '\x80', // Standard query response, RA, no error 126 0x81, 0x80, // Standard query response, RA, no error
127 '\x00', '\x00', // No questions (for simplicity) 127 0x00, 0x00, // No questions (for simplicity)
128 '\x00', '\x02', // 2 RRs (answers) 128 0x00, 0x02, // 2 RRs (answers)
129 '\x00', '\x00', // 0 authority RRs 129 0x00, 0x00, // 0 authority RRs
130 '\x00', '\x00', // 0 additional RRs 130 0x00, 0x00, // 0 additional RRs
131 131
132 // Answer 1 132 // Answer 1
133 '\x06', 'p', 'r', 'i', 'v', 'e', 't', 133 0x06, 'p', 'r', 'i', 'v', 'e', 't',
134 '\x05', 'l', 'o', 'c', 'a', 'l', 134 0x05, 'l', 'o', 'c', 'a', 'l',
135 '\x00', 135 0x00,
136 '\x00', '\x01', // TYPE is A. 136 0x00, 0x01, // TYPE is A.
137 '\x00', '\x01', // CLASS is IN. 137 0x00, 0x01, // CLASS is IN.
138 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 138 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
139 '\x24', '\x74', 139 0x24, 0x74,
140 '\x00', '\x04', // RDLENGTH is 4 140 0x00, 0x04, // RDLENGTH is 4
141 '\x05', '\x03', 141 0x05, 0x03,
142 '\xc0', '\x0c', 142 0xc0, 0x0c,
143 143
144 // Answer 2 -- Same key 144 // Answer 2 -- Same key
145 '\x06', 'p', 'r', 'i', 'v', 'e', 't', 145 0x06, 'p', 'r', 'i', 'v', 'e', 't',
146 '\x05', 'l', 'o', 'c', 'a', 'l', 146 0x05, 'l', 'o', 'c', 'a', 'l',
147 '\x00', 147 0x00,
148 '\x00', '\x01', // TYPE is A. 148 0x00, 0x01, // TYPE is A.
149 '\x00', '\x01', // CLASS is IN. 149 0x00, 0x01, // CLASS is IN.
150 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 150 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
151 '\x24', '\x74', 151 0x24, 0x74,
152 '\x00', '\x04', // RDLENGTH is 4 152 0x00, 0x04, // RDLENGTH is 4
153 '\x02', '\x03', 153 0x02, 0x03,
154 '\x04', '\x05', 154 0x04, 0x05,
155 }; 155 };
156 156
157 const char kCorruptedPacketSalvagable[] = { 157 const uint8 kCorruptedPacketSalvagable[] = {
158 // Header 158 // Header
159 '\x00', '\x00', // ID is zeroed out 159 0x00, 0x00, // ID is zeroed out
160 '\x81', '\x80', // Standard query response, RA, no error 160 0x81, 0x80, // Standard query response, RA, no error
161 '\x00', '\x00', // No questions (for simplicity) 161 0x00, 0x00, // No questions (for simplicity)
162 '\x00', '\x02', // 2 RRs (answers) 162 0x00, 0x02, // 2 RRs (answers)
163 '\x00', '\x00', // 0 authority RRs 163 0x00, 0x00, // 0 authority RRs
164 '\x00', '\x00', // 0 additional RRs 164 0x00, 0x00, // 0 additional RRs
165 165
166 // Answer 1 166 // Answer 1
167 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 167 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
168 '\x04', '_', 't', 'c', 'p', 168 0x04, '_', 't', 'c', 'p',
169 '\x05', 'l', 'o', 'c', 'a', 'l', 169 0x05, 'l', 'o', 'c', 'a', 'l',
170 '\x00', 170 0x00,
171 '\x00', '\x0c', // TYPE is PTR. 171 0x00, 0x0c, // TYPE is PTR.
172 '\x00', '\x01', // CLASS is IN. 172 0x00, 0x01, // CLASS is IN.
173 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 173 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
174 '\x24', '\x74', 174 0x24, 0x74,
175 '\x00', '\x08', // RDLENGTH is 8 bytes. 175 0x00, 0x08, // RDLENGTH is 8 bytes.
176 '\x99', 'h', 'e', 'l', 'l', 'o', // Bad RDATA format. 176 0x99, 'h', 'e', 'l', 'l', 'o', // Bad RDATA format.
177 '\xc0', '\x0c', 177 0xc0, 0x0c,
178 178
179 // Answer 2 179 // Answer 2
180 '\x08', '_', 'p', 'r', 'i', 'n', 't', 'e', 'r', 180 0x08, '_', 'p', 'r', 'i', 'n', 't', 'e', 'r',
181 '\xc0', '\x14', // Pointer to "._tcp.local" 181 0xc0, 0x14, // Pointer to "._tcp.local"
182 '\x00', '\x0c', // TYPE is PTR. 182 0x00, 0x0c, // TYPE is PTR.
183 '\x00', '\x01', // CLASS is IN. 183 0x00, 0x01, // CLASS is IN.
184 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 49 seconds. 184 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 49 seconds.
185 '\x24', '\x75', 185 0x24, 0x75,
186 '\x00', '\x08', // RDLENGTH is 8 bytes. 186 0x00, 0x08, // RDLENGTH is 8 bytes.
187 '\x05', 'h', 'e', 'l', 'l', 'o', 187 0x05, 'h', 'e', 'l', 'l', 'o',
188 '\xc0', '\x32' 188 0xc0, 0x32
189 }; 189 };
190 190
191 const char kSamplePacket2[] = { 191 const uint8 kSamplePacket2[] = {
192 // Header 192 // Header
193 '\x00', '\x00', // ID is zeroed out 193 0x00, 0x00, // ID is zeroed out
194 '\x81', '\x80', // Standard query response, RA, no error 194 0x81, 0x80, // Standard query response, RA, no error
195 '\x00', '\x00', // No questions (for simplicity) 195 0x00, 0x00, // No questions (for simplicity)
196 '\x00', '\x02', // 2 RRs (answers) 196 0x00, 0x02, // 2 RRs (answers)
197 '\x00', '\x00', // 0 authority RRs 197 0x00, 0x00, // 0 authority RRs
198 '\x00', '\x00', // 0 additional RRs 198 0x00, 0x00, // 0 additional RRs
199 199
200 // Answer 1 200 // Answer 1
201 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 201 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
202 '\x04', '_', 't', 'c', 'p', 202 0x04, '_', 't', 'c', 'p',
203 '\x05', 'l', 'o', 'c', 'a', 'l', 203 0x05, 'l', 'o', 'c', 'a', 'l',
204 '\x00', 204 0x00,
205 '\x00', '\x0c', // TYPE is PTR. 205 0x00, 0x0c, // TYPE is PTR.
206 '\x00', '\x01', // CLASS is IN. 206 0x00, 0x01, // CLASS is IN.
207 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 207 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
208 '\x24', '\x74', 208 0x24, 0x74,
209 '\x00', '\x08', // RDLENGTH is 8 bytes. 209 0x00, 0x08, // RDLENGTH is 8 bytes.
210 '\x05', 'z', 'z', 'z', 'z', 'z', 210 0x05, 'z', 'z', 'z', 'z', 'z',
211 '\xc0', '\x0c', 211 0xc0, 0x0c,
212 212
213 // Answer 2 213 // Answer 2
214 '\x08', '_', 'p', 'r', 'i', 'n', 't', 'e', 'r', 214 0x08, '_', 'p', 'r', 'i', 'n', 't', 'e', 'r',
215 '\xc0', '\x14', // Pointer to "._tcp.local" 215 0xc0, 0x14, // Pointer to "._tcp.local"
216 '\x00', '\x0c', // TYPE is PTR. 216 0x00, 0x0c, // TYPE is PTR.
217 '\x00', '\x01', // CLASS is IN. 217 0x00, 0x01, // CLASS is IN.
218 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 218 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
219 '\x24', '\x74', 219 0x24, 0x74,
220 '\x00', '\x08', // RDLENGTH is 8 bytes. 220 0x00, 0x08, // RDLENGTH is 8 bytes.
221 '\x05', 'z', 'z', 'z', 'z', 'z', 221 0x05, 'z', 'z', 'z', 'z', 'z',
222 '\xc0', '\x32' 222 0xc0, 0x32
223 }; 223 };
224 224
225 const char kQueryPacketPrivet[] = { 225 const uint8 kQueryPacketPrivet[] = {
226 // Header 226 // Header
227 '\x00', '\x00', // ID is zeroed out 227 0x00, 0x00, // ID is zeroed out
228 '\x00', '\x00', // No flags. 228 0x00, 0x00, // No flags.
229 '\x00', '\x01', // One question. 229 0x00, 0x01, // One question.
230 '\x00', '\x00', // 0 RRs (answers) 230 0x00, 0x00, // 0 RRs (answers)
231 '\x00', '\x00', // 0 authority RRs 231 0x00, 0x00, // 0 authority RRs
232 '\x00', '\x00', // 0 additional RRs 232 0x00, 0x00, // 0 additional RRs
233 233
234 // Question 234 // Question
235 // This part is echoed back from the respective query. 235 // This part is echoed back from the respective query.
236 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 236 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
237 '\x04', '_', 't', 'c', 'p', 237 0x04, '_', 't', 'c', 'p',
238 '\x05', 'l', 'o', 'c', 'a', 'l', 238 0x05, 'l', 'o', 'c', 'a', 'l',
239 '\x00', 239 0x00,
240 '\x00', '\x0c', // TYPE is PTR. 240 0x00, 0x0c, // TYPE is PTR.
241 '\x00', '\x01', // CLASS is IN. 241 0x00, 0x01, // CLASS is IN.
242 }; 242 };
243 243
244 const char kSamplePacketAdditionalOnly[] = { 244 const uint8 kSamplePacketAdditionalOnly[] = {
245 // Header 245 // Header
246 '\x00', '\x00', // ID is zeroed out 246 0x00, 0x00, // ID is zeroed out
247 '\x81', '\x80', // Standard query response, RA, no error 247 0x81, 0x80, // Standard query response, RA, no error
248 '\x00', '\x00', // No questions (for simplicity) 248 0x00, 0x00, // No questions (for simplicity)
249 '\x00', '\x00', // 2 RRs (answers) 249 0x00, 0x00, // 2 RRs (answers)
250 '\x00', '\x00', // 0 authority RRs 250 0x00, 0x00, // 0 authority RRs
251 '\x00', '\x01', // 0 additional RRs 251 0x00, 0x01, // 0 additional RRs
252 252
253 // Answer 1 253 // Answer 1
254 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 254 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
255 '\x04', '_', 't', 'c', 'p', 255 0x04, '_', 't', 'c', 'p',
256 '\x05', 'l', 'o', 'c', 'a', 'l', 256 0x05, 'l', 'o', 'c', 'a', 'l',
257 '\x00', 257 0x00,
258 '\x00', '\x0c', // TYPE is PTR. 258 0x00, 0x0c, // TYPE is PTR.
259 '\x00', '\x01', // CLASS is IN. 259 0x00, 0x01, // CLASS is IN.
260 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 260 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
261 '\x24', '\x74', 261 0x24, 0x74,
262 '\x00', '\x08', // RDLENGTH is 8 bytes. 262 0x00, 0x08, // RDLENGTH is 8 bytes.
263 '\x05', 'h', 'e', 'l', 'l', 'o', 263 0x05, 'h', 'e', 'l', 'l', 'o',
264 '\xc0', '\x0c', 264 0xc0, 0x0c,
265 }; 265 };
266 266
267 const char kSamplePacketNsec[] = { 267 const uint8 kSamplePacketNsec[] = {
268 // Header 268 // Header
269 '\x00', '\x00', // ID is zeroed out 269 0x00, 0x00, // ID is zeroed out
270 '\x81', '\x80', // Standard query response, RA, no error 270 0x81, 0x80, // Standard query response, RA, no error
271 '\x00', '\x00', // No questions (for simplicity) 271 0x00, 0x00, // No questions (for simplicity)
272 '\x00', '\x01', // 1 RR (answers) 272 0x00, 0x01, // 1 RR (answers)
273 '\x00', '\x00', // 0 authority RRs 273 0x00, 0x00, // 0 authority RRs
274 '\x00', '\x00', // 0 additional RRs 274 0x00, 0x00, // 0 additional RRs
275 275
276 // Answer 1 276 // Answer 1
277 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 277 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
278 '\x04', '_', 't', 'c', 'p', 278 0x04, '_', 't', 'c', 'p',
279 '\x05', 'l', 'o', 'c', 'a', 'l', 279 0x05, 'l', 'o', 'c', 'a', 'l',
280 '\x00', 280 0x00,
281 '\x00', '\x2f', // TYPE is NSEC. 281 0x00, 0x2f, // TYPE is NSEC.
282 '\x00', '\x01', // CLASS is IN. 282 0x00, 0x01, // CLASS is IN.
283 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 283 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
284 '\x24', '\x74', 284 0x24, 0x74,
285 '\x00', '\x06', // RDLENGTH is 6 bytes. 285 0x00, 0x06, // RDLENGTH is 6 bytes.
286 '\xc0', '\x0c', 286 0xc0, 0x0c,
287 '\x00', '\x02', '\x00', '\x08' // Only A record present 287 0x00, 0x02, 0x00, 0x08 // Only A record present
288 }; 288 };
289 289
290 const char kSamplePacketAPrivet[] = { 290 const uint8 kSamplePacketAPrivet[] = {
291 // Header 291 // Header
292 '\x00', '\x00', // ID is zeroed out 292 0x00, 0x00, // ID is zeroed out
293 '\x81', '\x80', // Standard query response, RA, no error 293 0x81, 0x80, // Standard query response, RA, no error
294 '\x00', '\x00', // No questions (for simplicity) 294 0x00, 0x00, // No questions (for simplicity)
295 '\x00', '\x01', // 1 RR (answers) 295 0x00, 0x01, // 1 RR (answers)
296 '\x00', '\x00', // 0 authority RRs 296 0x00, 0x00, // 0 authority RRs
297 '\x00', '\x00', // 0 additional RRs 297 0x00, 0x00, // 0 additional RRs
298 298
299 // Answer 1 299 // Answer 1
300 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 300 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
301 '\x04', '_', 't', 'c', 'p', 301 0x04, '_', 't', 'c', 'p',
302 '\x05', 'l', 'o', 'c', 'a', 'l', 302 0x05, 'l', 'o', 'c', 'a', 'l',
303 '\x00', 303 0x00,
304 '\x00', '\x01', // TYPE is A. 304 0x00, 0x01, // TYPE is A.
305 '\x00', '\x01', // CLASS is IN. 305 0x00, 0x01, // CLASS is IN.
306 '\x00', '\x01', // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds. 306 0x00, 0x01, // TTL (4 bytes) is 20 hours, 47 minutes, 48 seconds.
307 '\x24', '\x74', 307 0x24, 0x74,
308 '\x00', '\x04', // RDLENGTH is 4 bytes. 308 0x00, 0x04, // RDLENGTH is 4 bytes.
309 '\xc0', '\x0c', 309 0xc0, 0x0c,
310 '\x00', '\x02', 310 0x00, 0x02,
311 }; 311 };
312 312
313 const char kSamplePacketGoodbye[] = { 313 const uint8 kSamplePacketGoodbye[] = {
314 // Header 314 // Header
315 '\x00', '\x00', // ID is zeroed out 315 0x00, 0x00, // ID is zeroed out
316 '\x81', '\x80', // Standard query response, RA, no error 316 0x81, 0x80, // Standard query response, RA, no error
317 '\x00', '\x00', // No questions (for simplicity) 317 0x00, 0x00, // No questions (for simplicity)
318 '\x00', '\x01', // 2 RRs (answers) 318 0x00, 0x01, // 2 RRs (answers)
319 '\x00', '\x00', // 0 authority RRs 319 0x00, 0x00, // 0 authority RRs
320 '\x00', '\x00', // 0 additional RRs 320 0x00, 0x00, // 0 additional RRs
321 321
322 // Answer 1 322 // Answer 1
323 '\x07', '_', 'p', 'r', 'i', 'v', 'e', 't', 323 0x07, '_', 'p', 'r', 'i', 'v', 'e', 't',
324 '\x04', '_', 't', 'c', 'p', 324 0x04, '_', 't', 'c', 'p',
325 '\x05', 'l', 'o', 'c', 'a', 'l', 325 0x05, 'l', 'o', 'c', 'a', 'l',
326 '\x00', 326 0x00,
327 '\x00', '\x0c', // TYPE is PTR. 327 0x00, 0x0c, // TYPE is PTR.
328 '\x00', '\x01', // CLASS is IN. 328 0x00, 0x01, // CLASS is IN.
329 '\x00', '\x00', // TTL (4 bytes) is zero; 329 0x00, 0x00, // TTL (4 bytes) is zero;
330 '\x00', '\x00', 330 0x00, 0x00,
331 '\x00', '\x08', // RDLENGTH is 8 bytes. 331 0x00, 0x08, // RDLENGTH is 8 bytes.
332 '\x05', 'z', 'z', 'z', 'z', 'z', 332 0x05, 'z', 'z', 'z', 'z', 'z',
333 '\xc0', '\x0c', 333 0xc0, 0x0c,
334 }; 334 };
335
336 std::string MakeString(const uint8* data, unsigned size) {
337 return std::string(reinterpret_cast<const char*>(data), size);
338 }
335 339
336 class PtrRecordCopyContainer { 340 class PtrRecordCopyContainer {
337 public: 341 public:
338 PtrRecordCopyContainer() {} 342 PtrRecordCopyContainer() {}
339 ~PtrRecordCopyContainer() {} 343 ~PtrRecordCopyContainer() {}
340 344
341 bool is_set() const { return set_; } 345 bool is_set() const { return set_; }
342 346
343 void SaveWithDummyArg(int unused, const RecordParsed* value) { 347 void SaveWithDummyArg(int unused, const RecordParsed* value) {
344 Save(value); 348 Save(value);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 void Stop(); 382 void Stop();
379 383
380 MOCK_METHOD2(MockableRecordCallback, void(MDnsTransaction::Result result, 384 MOCK_METHOD2(MockableRecordCallback, void(MDnsTransaction::Result result,
381 const RecordParsed* record)); 385 const RecordParsed* record));
382 386
383 MOCK_METHOD2(MockableRecordCallback2, void(MDnsTransaction::Result result, 387 MOCK_METHOD2(MockableRecordCallback2, void(MDnsTransaction::Result result,
384 const RecordParsed* record)); 388 const RecordParsed* record));
385 389
386 390
387 protected: 391 protected:
388 void ExpectPacket(const char* packet, unsigned size); 392 void ExpectPacket(const uint8* packet, unsigned size);
389 void SimulatePacketReceive(const char* packet, unsigned size); 393 void SimulatePacketReceive(const uint8* packet, unsigned size);
390 394
391 scoped_ptr<MDnsClientImpl> test_client_; 395 scoped_ptr<MDnsClientImpl> test_client_;
392 IPEndPoint mdns_ipv4_endpoint_; 396 IPEndPoint mdns_ipv4_endpoint_;
393 StrictMock<MockMDnsSocketFactory>* socket_factory_; 397 StrictMock<MockMDnsSocketFactory>* socket_factory_;
394 398
395 // Transactions and listeners that can be deleted by class methods for 399 // Transactions and listeners that can be deleted by class methods for
396 // reentrancy tests. 400 // reentrancy tests.
397 scoped_ptr<MDnsTransaction> transaction_; 401 scoped_ptr<MDnsTransaction> transaction_;
398 scoped_ptr<MDnsListener> listener1_; 402 scoped_ptr<MDnsListener> listener1_;
399 scoped_ptr<MDnsListener> listener2_; 403 scoped_ptr<MDnsListener> listener2_;
(...skipping 17 matching lines...) Expand all
417 MDnsTest::~MDnsTest() { 421 MDnsTest::~MDnsTest() {
418 } 422 }
419 423
420 void MDnsTest::SetUp() { 424 void MDnsTest::SetUp() {
421 test_client_->StartListening(); 425 test_client_->StartListening();
422 } 426 }
423 427
424 void MDnsTest::TearDown() { 428 void MDnsTest::TearDown() {
425 } 429 }
426 430
427 void MDnsTest::SimulatePacketReceive(const char* packet, unsigned size) { 431 void MDnsTest::SimulatePacketReceive(const uint8* packet, unsigned size) {
428 socket_factory_->SimulateReceive(packet, size); 432 socket_factory_->SimulateReceive(packet, size);
429 } 433 }
430 434
431 void MDnsTest::ExpectPacket(const char* packet, unsigned size) { 435 void MDnsTest::ExpectPacket(const uint8* packet, unsigned size) {
432 EXPECT_CALL(*socket_factory_, OnSendTo(std::string(packet, size))) 436 EXPECT_CALL(*socket_factory_, OnSendTo(MakeString(packet, size)))
433 .Times(2); 437 .Times(2);
434 } 438 }
435 439
436 void MDnsTest::DeleteTransaction() { 440 void MDnsTest::DeleteTransaction() {
437 transaction_.reset(); 441 transaction_.reset();
438 } 442 }
439 443
440 void MDnsTest::DeleteBothListeners() { 444 void MDnsTest::DeleteBothListeners() {
441 listener1_.reset(); 445 listener1_.reset();
442 listener2_.reset(); 446 listener2_.reset();
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
1089 StrictMock<MockMDnsConnectionDelegate> delegate_; 1093 StrictMock<MockMDnsConnectionDelegate> delegate_;
1090 1094
1091 MockMDnsDatagramServerSocket* socket_ipv4_; 1095 MockMDnsDatagramServerSocket* socket_ipv4_;
1092 MockMDnsDatagramServerSocket* socket_ipv6_; 1096 MockMDnsDatagramServerSocket* socket_ipv6_;
1093 SimpleMockSocketFactory factory_; 1097 SimpleMockSocketFactory factory_;
1094 MDnsConnection connection_; 1098 MDnsConnection connection_;
1095 TestCompletionCallback callback_; 1099 TestCompletionCallback callback_;
1096 }; 1100 };
1097 1101
1098 TEST_F(MDnsConnectionTest, ReceiveSynchronous) { 1102 TEST_F(MDnsConnectionTest, ReceiveSynchronous) {
1099 std::string sample_packet = 1103 std::string sample_packet = MakeString(kSamplePacket1,
1100 std::string(kSamplePacket1, sizeof(kSamplePacket1)); 1104 sizeof(kSamplePacket1));
1101 1105
1102 socket_ipv6_->SetResponsePacket(sample_packet); 1106 socket_ipv6_->SetResponsePacket(sample_packet);
1103 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _)) 1107 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
1104 .WillOnce(Return(ERR_IO_PENDING)); 1108 .WillOnce(Return(ERR_IO_PENDING));
1105 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _)) 1109 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
1106 .WillOnce( 1110 .WillOnce(
1107 Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvNow)) 1111 Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvNow))
1108 .WillOnce(Return(ERR_IO_PENDING)); 1112 .WillOnce(Return(ERR_IO_PENDING));
1109 1113
1110 EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet)); 1114 EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet));
1111 1115
1112 ASSERT_TRUE(InitConnection()); 1116 ASSERT_TRUE(InitConnection());
1113 } 1117 }
1114 1118
1115 TEST_F(MDnsConnectionTest, ReceiveAsynchronous) { 1119 TEST_F(MDnsConnectionTest, ReceiveAsynchronous) {
1116 std::string sample_packet = 1120 std::string sample_packet = MakeString(kSamplePacket1,
1117 std::string(kSamplePacket1, sizeof(kSamplePacket1)); 1121 sizeof(kSamplePacket1));
1118 socket_ipv6_->SetResponsePacket(sample_packet); 1122 socket_ipv6_->SetResponsePacket(sample_packet);
1119 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _)) 1123 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
1120 .WillOnce(Return(ERR_IO_PENDING)); 1124 .WillOnce(Return(ERR_IO_PENDING));
1121 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _)) 1125 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
1122 .WillOnce( 1126 .WillOnce(
1123 Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvLater)) 1127 Invoke(socket_ipv6_, &MockMDnsDatagramServerSocket::HandleRecvLater))
1124 .WillOnce(Return(ERR_IO_PENDING)); 1128 .WillOnce(Return(ERR_IO_PENDING));
1125 1129
1126 ASSERT_TRUE(InitConnection()); 1130 ASSERT_TRUE(InitConnection());
1127 1131
1128 EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet)); 1132 EXPECT_CALL(delegate_, HandlePacketInternal(sample_packet));
1129 1133
1130 base::MessageLoop::current()->RunUntilIdle(); 1134 base::MessageLoop::current()->RunUntilIdle();
1131 } 1135 }
1132 1136
1133 TEST_F(MDnsConnectionTest, Send) { 1137 TEST_F(MDnsConnectionTest, Send) {
1134 std::string sample_packet = 1138 std::string sample_packet = MakeString(kSamplePacket1,
1135 std::string(kSamplePacket1, sizeof(kSamplePacket1)); 1139 sizeof(kSamplePacket1));
1136 1140
1137 scoped_refptr<IOBufferWithSize> buf( 1141 scoped_refptr<IOBufferWithSize> buf(
1138 new IOBufferWithSize(sizeof kSamplePacket1)); 1142 new IOBufferWithSize(sizeof kSamplePacket1));
1139 memcpy(buf->data(), kSamplePacket1, sizeof(kSamplePacket1)); 1143 memcpy(buf->data(), kSamplePacket1, sizeof(kSamplePacket1));
1140 1144
1141 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _)) 1145 EXPECT_CALL(*socket_ipv4_, RecvFrom(_, _, _, _))
1142 .WillOnce(Return(ERR_IO_PENDING)); 1146 .WillOnce(Return(ERR_IO_PENDING));
1143 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _)) 1147 EXPECT_CALL(*socket_ipv6_, RecvFrom(_, _, _, _))
1144 .WillOnce(Return(ERR_IO_PENDING)); 1148 .WillOnce(Return(ERR_IO_PENDING));
1145 1149
(...skipping 17 matching lines...) Expand all
1163 1167
1164 ASSERT_TRUE(InitConnection()); 1168 ASSERT_TRUE(InitConnection());
1165 1169
1166 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED)); 1170 EXPECT_CALL(delegate_, OnConnectionError(ERR_SOCKET_NOT_CONNECTED));
1167 callback.Run(ERR_SOCKET_NOT_CONNECTED); 1171 callback.Run(ERR_SOCKET_NOT_CONNECTED);
1168 } 1172 }
1169 1173
1170 } // namespace 1174 } // namespace
1171 1175
1172 } // namespace net 1176 } // namespace net
OLDNEW
« no previous file with comments | « chrome/utility/local_discovery/service_discovery_client_unittest.cc ('k') | net/dns/mock_mdns_socket_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698