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

Side by Side Diff: net/ntlm/ntlm_buffer_writer_unittest.cc

Issue 2879353002: Add a buffer reader/writer for NTLM. (Closed)
Patch Set: EXPECT_* -> ASSERT_* Created 3 years, 5 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
« net/ntlm/OWNERS ('K') | « net/ntlm/ntlm_buffer_writer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "net/ntlm/ntlm_buffer_writer.h"
6
7 #include "base/macros.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace net {
12 namespace ntlm {
13
14 namespace {
15
16 // Helper method to hide all the ugly casting.
17 const uint8_t* GetBufferPtr(const NtlmBufferWriter& writer) {
18 return reinterpret_cast<const uint8_t*>(writer.GetBuffer().data());
19 }
20
21 // Helper method to get a byte at a specific index in the buffer.
22 uint8_t GetByteFromBuffer(const NtlmBufferWriter& writer, size_t index) {
23 base::StringPiece piece(writer.GetBuffer());
24 EXPECT_TRUE(index < piece.length());
25 return static_cast<uint8_t>(piece.data()[index]);
26 }
27
28 } // namespace
29
30 TEST(NtlmBufferWriterTest, Initialization) {
31 NtlmBufferWriter writer(1);
32
33 ASSERT_EQ(1u, writer.GetLength());
34 ASSERT_EQ(1u, writer.GetBuffer().length());
35 ASSERT_EQ(0u, writer.GetCursor());
36 ASSERT_FALSE(writer.IsEndOfBuffer());
37 ASSERT_TRUE(writer.CanWrite(1));
38 ASSERT_FALSE(writer.CanWrite(2));
39 }
40
41 TEST(NtlmBufferWriterTest, Write16) {
42 uint8_t expected[2] = {0x22, 0x11};
43 const uint16_t value = 0x1122;
44
45 NtlmBufferWriter writer(sizeof(uint16_t));
46
47 ASSERT_TRUE(writer.WriteUInt16(value));
48 ASSERT_TRUE(writer.IsEndOfBuffer());
49 ASSERT_EQ(arraysize(expected), writer.GetLength());
50 ASSERT_FALSE(writer.WriteUInt16(value));
51
52 std::unique_ptr<uint8_t[]> actual = writer.ReleaseBuffer();
53 ASSERT_EQ(0, memcmp(expected, actual.get(), arraysize(expected)));
54 }
55
56 TEST(NtlmBufferWriterTest, Write16PastEob) {
57 NtlmBufferWriter writer(sizeof(uint16_t) - 1);
58
59 ASSERT_FALSE(writer.WriteUInt16(0));
60 ASSERT_EQ(0u, writer.GetCursor());
61 }
62
63 TEST(NtlmBufferWriterTest, Write32) {
64 uint8_t expected[4] = {0x44, 0x33, 0x22, 0x11};
65 const uint32_t value = 0x11223344;
66
67 NtlmBufferWriter writer(sizeof(uint32_t));
68
69 ASSERT_TRUE(writer.WriteUInt32(value));
70 ASSERT_TRUE(writer.IsEndOfBuffer());
71 ASSERT_FALSE(writer.WriteUInt32(value));
72
73 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
74 }
75
76 TEST(NtlmBufferWriterTest, Write32PastEob) {
77 NtlmBufferWriter writer(sizeof(uint32_t) - 1);
78
79 ASSERT_FALSE(writer.WriteUInt32(0));
80 ASSERT_EQ(0u, writer.GetCursor());
81 }
82
83 TEST(NtlmBufferWriterTest, Write64) {
84 uint8_t expected[8] = {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11};
85 const uint64_t value = 0x1122334455667788;
86
87 NtlmBufferWriter writer(sizeof(uint64_t));
88
89 ASSERT_TRUE(writer.WriteUInt64(value));
90 ASSERT_TRUE(writer.IsEndOfBuffer());
91 ASSERT_FALSE(writer.WriteUInt64(value));
92
93 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
94 }
95
96 TEST(NtlmBufferWriterTest, Write64PastEob) {
97 NtlmBufferWriter writer(sizeof(uint64_t) - 1);
98
99 ASSERT_FALSE(writer.WriteUInt64(0));
100 ASSERT_EQ(0u, writer.GetCursor());
101 }
102
103 TEST(NtlmBufferWriterTest, WriteBytes) {
104 uint8_t expected[8] = {0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11};
105
106 NtlmBufferWriter writer(arraysize(expected));
107
108 ASSERT_TRUE(writer.WriteBytes(expected, arraysize(expected)));
109 ASSERT_EQ(0, memcmp(GetBufferPtr(writer), expected, arraysize(expected)));
110 ASSERT_TRUE(writer.IsEndOfBuffer());
111 ASSERT_FALSE(writer.WriteBytes(expected, 1));
112
113 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
114 }
115
116 TEST(NtlmBufferWriterTest, WriteBytesPastEob) {
117 uint8_t buffer[8];
118
119 NtlmBufferWriter writer(arraysize(buffer) - 1);
120
121 ASSERT_FALSE(writer.WriteBytes(buffer, arraysize(buffer)));
122 }
123
124 TEST(NtlmBufferWriterTest, WriteSecurityBuffer) {
125 uint8_t expected[8] = {0x22, 0x11, 0x22, 0x11, 0x88, 0x77, 0x66, 0x55};
126 uint16_t length = 0x1122;
127 uint32_t offset = 0x55667788;
128
129 NtlmBufferWriter writer(SECURITY_BUFFER_LEN);
130
131 ASSERT_TRUE(writer.WriteSecurityBuffer(SecurityBuffer(offset, length)));
132 ASSERT_TRUE(writer.IsEndOfBuffer());
133 ASSERT_FALSE(writer.WriteSecurityBuffer(SecurityBuffer(offset, length)));
134
135 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
136 }
137
138 TEST(NtlmBufferWriterTest, WriteSecurityBufferPastEob) {
139 SecurityBuffer sec_buf;
140 NtlmBufferWriter writer(SECURITY_BUFFER_LEN - 1);
141
142 ASSERT_FALSE(writer.WriteSecurityBuffer(sec_buf));
143 }
144
145 TEST(NtlmBufferWriterTest, WriteNarrowString) {
146 uint8_t expected[8] = {'1', '2', '3', '4', '5', '6', '7', '8'};
147 std::string value("12345678");
148
149 NtlmBufferWriter writer(value.size());
150
151 ASSERT_TRUE(writer.WriteUtf8String(value));
152 ASSERT_TRUE(writer.IsEndOfBuffer());
153 ASSERT_FALSE(writer.WriteUtf8String(value));
154
155 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
156 }
157
158 TEST(NtlmBufferWriterTest, WriteAsciiStringPastEob) {
159 std::string str("12345678");
160 NtlmBufferWriter writer(str.length() - 1);
161
162 ASSERT_FALSE(writer.WriteUtf8String(str));
163 }
164
165 TEST(NtlmBufferWriterTest, WriteUtf16String) {
166 uint8_t expected[16] = {'1', 0, '2', 0, '3', 0, '4', 0,
167 '5', 0, '6', 0, '7', 0, '8', 0};
168 base::string16 value = base::ASCIIToUTF16("12345678");
169
170 NtlmBufferWriter writer(value.size() * 2);
171
172 ASSERT_TRUE(writer.WriteUtf16String(value));
173 ASSERT_TRUE(writer.IsEndOfBuffer());
174 ASSERT_FALSE(writer.WriteUtf16String(value));
175
176 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
177 }
178
179 TEST(NtlmBufferWriterTest, WriteUtf16StringPastEob) {
180 base::string16 str = base::ASCIIToUTF16("12345678");
181 NtlmBufferWriter writer((str.length() * 2) - 1);
182
183 ASSERT_FALSE(writer.WriteUtf16String(str));
184 }
185
186 TEST(NtlmBufferWriterTest, WriteUtf8AsUtf16String) {
187 uint8_t expected[16] = {'1', 0, '2', 0, '3', 0, '4', 0,
188 '5', 0, '6', 0, '7', 0, '8', 0};
189 std::string input = "12345678";
190
191 NtlmBufferWriter writer(input.size() * 2);
192
193 ASSERT_TRUE(writer.WriteUtf8AsUtf16String(input));
194 ASSERT_TRUE(writer.IsEndOfBuffer());
195 ASSERT_FALSE(writer.WriteUtf8AsUtf16String(input));
196
197 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
198 }
199
200 TEST(NtlmBufferWriterTest, WriteSignature) {
201 uint8_t expected[8] = {'N', 'T', 'L', 'M', 'S', 'S', 'P', 0};
202 NtlmBufferWriter writer(SIGNATURE_LEN);
203
204 ASSERT_TRUE(writer.WriteSignature());
205 ASSERT_TRUE(writer.IsEndOfBuffer());
206
207 ASSERT_EQ(0, memcmp(expected, GetBufferPtr(writer), arraysize(expected)));
208 }
209
210 TEST(NtlmBufferWriterTest, WriteSignaturePastEob) {
211 NtlmBufferWriter writer(1);
212
213 ASSERT_FALSE(writer.WriteSignature());
214 }
215
216 TEST(NtlmBufferWriterTest, WriteMessageType) {
217 NtlmBufferWriter writer(4);
218
219 ASSERT_TRUE(writer.WriteMessageType(MessageType::NEGOTIATE));
220 ASSERT_TRUE(writer.IsEndOfBuffer());
221 ASSERT_EQ(static_cast<uint32_t>(MessageType::NEGOTIATE),
222 GetByteFromBuffer(writer, 0));
223 ASSERT_EQ(0, GetByteFromBuffer(writer, 1));
224 ASSERT_EQ(0, GetByteFromBuffer(writer, 2));
225 ASSERT_EQ(0, GetByteFromBuffer(writer, 3));
226 }
227
228 TEST(NtlmBufferWriterTest, WriteMessageTypePastEob) {
229 NtlmBufferWriter writer(sizeof(uint32_t) - 1);
230
231 ASSERT_FALSE(writer.WriteMessageType(MessageType::NEGOTIATE));
232 }
233
234 TEST(NtlmBufferWriterTest, ReleaseBuffer) {
235 size_t buf_len = 4;
236 NtlmBufferWriter writer(buf_len);
237
238 ASSERT_TRUE(writer.CanWrite(buf_len));
239 ASSERT_TRUE(GetBufferPtr(writer) != nullptr);
240 ASSERT_EQ(buf_len, writer.GetLength());
241 ASSERT_EQ(0u, writer.GetCursor());
242
243 // Write soemthing so that the cursor moves.
244 ASSERT_TRUE(writer.WriteUInt16(23));
245 ASSERT_EQ(sizeof(uint16_t), writer.GetCursor());
246 ASSERT_TRUE(writer.CanWrite(buf_len - sizeof(uint16_t)));
247
248 // Release the buffer from the writer.
249 std::unique_ptr<uint8_t[]> buf = writer.ReleaseBuffer();
250
251 // Expect that the writer behaves empty now.
252 ASSERT_TRUE(writer.IsEndOfBuffer());
253 ASSERT_FALSE(writer.CanWrite(buf_len - sizeof(uint16_t)));
254 ASSERT_EQ(0u, writer.GetCursor());
255 ASSERT_EQ(0u, writer.GetLength());
256 ASSERT_EQ(nullptr, GetBufferPtr(writer));
257 }
258
259 } // namespace ntlm
260 } // namespace net
OLDNEW
« net/ntlm/OWNERS ('K') | « net/ntlm/ntlm_buffer_writer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698