| OLD | NEW |
| 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 "net/websockets/websocket_inflater.h" | 5 #include "net/websockets/websocket_inflater.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 } | 30 } |
| 31 | 31 |
| 32 TEST(WebSocketInflaterTest, InflateHelloTakeOverContext) { | 32 TEST(WebSocketInflaterTest, InflateHelloTakeOverContext) { |
| 33 WebSocketInflater inflater; | 33 WebSocketInflater inflater; |
| 34 ASSERT_TRUE(inflater.Initialize(15)); | 34 ASSERT_TRUE(inflater.Initialize(15)); |
| 35 scoped_refptr<IOBufferWithSize> actual1, actual2; | 35 scoped_refptr<IOBufferWithSize> actual1, actual2; |
| 36 | 36 |
| 37 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 37 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 38 ASSERT_TRUE(inflater.Finish()); | 38 ASSERT_TRUE(inflater.Finish()); |
| 39 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); | 39 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); |
| 40 ASSERT_TRUE(actual1); | 40 ASSERT_TRUE(actual1.get()); |
| 41 EXPECT_EQ("Hello", ToString(actual1.get())); | 41 EXPECT_EQ("Hello", ToString(actual1.get())); |
| 42 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 42 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 43 | 43 |
| 44 ASSERT_TRUE(inflater.AddBytes("\xf2\x00\x11\x00\x00", 5)); | 44 ASSERT_TRUE(inflater.AddBytes("\xf2\x00\x11\x00\x00", 5)); |
| 45 ASSERT_TRUE(inflater.Finish()); | 45 ASSERT_TRUE(inflater.Finish()); |
| 46 actual2 = inflater.GetOutput(inflater.CurrentOutputSize()); | 46 actual2 = inflater.GetOutput(inflater.CurrentOutputSize()); |
| 47 ASSERT_TRUE(actual2); | 47 ASSERT_TRUE(actual2.get()); |
| 48 EXPECT_EQ("Hello", ToString(actual2.get())); | 48 EXPECT_EQ("Hello", ToString(actual2.get())); |
| 49 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 49 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 50 } | 50 } |
| 51 | 51 |
| 52 TEST(WebSocketInflaterTest, InflateHelloSmallCapacity) { | 52 TEST(WebSocketInflaterTest, InflateHelloSmallCapacity) { |
| 53 WebSocketInflater inflater(1, 1); | 53 WebSocketInflater inflater(1, 1); |
| 54 ASSERT_TRUE(inflater.Initialize(15)); | 54 ASSERT_TRUE(inflater.Initialize(15)); |
| 55 std::string actual; | 55 std::string actual; |
| 56 | 56 |
| 57 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 57 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 58 ASSERT_TRUE(inflater.Finish()); | 58 ASSERT_TRUE(inflater.Finish()); |
| 59 for (size_t i = 0; i < 5; ++i) { | 59 for (size_t i = 0; i < 5; ++i) { |
| 60 ASSERT_EQ(1u, inflater.CurrentOutputSize()); | 60 ASSERT_EQ(1u, inflater.CurrentOutputSize()); |
| 61 scoped_refptr<IOBufferWithSize> buffer = inflater.GetOutput(1); | 61 scoped_refptr<IOBufferWithSize> buffer = inflater.GetOutput(1); |
| 62 ASSERT_TRUE(buffer); | 62 ASSERT_TRUE(buffer.get()); |
| 63 ASSERT_EQ(1, buffer->size()); | 63 ASSERT_EQ(1, buffer->size()); |
| 64 actual += ToString(buffer.get()); | 64 actual += ToString(buffer.get()); |
| 65 } | 65 } |
| 66 EXPECT_EQ("Hello", actual); | 66 EXPECT_EQ("Hello", actual); |
| 67 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 67 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 68 } | 68 } |
| 69 | 69 |
| 70 TEST(WebSocketInflaterTest, InflateHelloSmallCapacityGetTotalOutput) { | 70 TEST(WebSocketInflaterTest, InflateHelloSmallCapacityGetTotalOutput) { |
| 71 WebSocketInflater inflater(1, 1); | 71 WebSocketInflater inflater(1, 1); |
| 72 ASSERT_TRUE(inflater.Initialize(15)); | 72 ASSERT_TRUE(inflater.Initialize(15)); |
| 73 scoped_refptr<IOBufferWithSize> actual; | 73 scoped_refptr<IOBufferWithSize> actual; |
| 74 | 74 |
| 75 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 75 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 76 ASSERT_TRUE(inflater.Finish()); | 76 ASSERT_TRUE(inflater.Finish()); |
| 77 ASSERT_EQ(1u, inflater.CurrentOutputSize()); | 77 ASSERT_EQ(1u, inflater.CurrentOutputSize()); |
| 78 actual = inflater.GetOutput(1024); | 78 actual = inflater.GetOutput(1024); |
| 79 EXPECT_EQ("Hello", ToString(actual)); | 79 EXPECT_EQ("Hello", ToString(actual.get())); |
| 80 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 80 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 81 } | 81 } |
| 82 | 82 |
| 83 TEST(WebSocketInflaterTest, InflateInvalidData) { | 83 TEST(WebSocketInflaterTest, InflateInvalidData) { |
| 84 WebSocketInflater inflater; | 84 WebSocketInflater inflater; |
| 85 ASSERT_TRUE(inflater.Initialize(15)); | 85 ASSERT_TRUE(inflater.Initialize(15)); |
| 86 EXPECT_FALSE(inflater.AddBytes("\xf2\x48\xcd\xc9INVALID DATA", 16)); | 86 EXPECT_FALSE(inflater.AddBytes("\xf2\x48\xcd\xc9INVALID DATA", 16)); |
| 87 } | 87 } |
| 88 | 88 |
| 89 TEST(WebSocketInflaterTest, ChokedInvalidData) { | 89 TEST(WebSocketInflaterTest, ChokedInvalidData) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 100 WebSocketInflater inflater; | 100 WebSocketInflater inflater; |
| 101 ASSERT_TRUE(inflater.Initialize(15)); | 101 ASSERT_TRUE(inflater.Initialize(15)); |
| 102 std::string input("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); | 102 std::string input("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); |
| 103 scoped_refptr<IOBufferWithSize> actual; | 103 scoped_refptr<IOBufferWithSize> actual; |
| 104 | 104 |
| 105 for (size_t i = 0; i < input.size(); ++i) { | 105 for (size_t i = 0; i < input.size(); ++i) { |
| 106 ASSERT_TRUE(inflater.AddBytes(&input[i], 1)); | 106 ASSERT_TRUE(inflater.AddBytes(&input[i], 1)); |
| 107 } | 107 } |
| 108 ASSERT_TRUE(inflater.Finish()); | 108 ASSERT_TRUE(inflater.Finish()); |
| 109 actual = inflater.GetOutput(5); | 109 actual = inflater.GetOutput(5); |
| 110 ASSERT_TRUE(actual); | 110 ASSERT_TRUE(actual.get()); |
| 111 EXPECT_EQ("Hello", ToString(actual.get())); | 111 EXPECT_EQ("Hello", ToString(actual.get())); |
| 112 } | 112 } |
| 113 | 113 |
| 114 TEST(WebSocketInflaterTest, Reset) { | 114 TEST(WebSocketInflaterTest, Reset) { |
| 115 WebSocketInflater inflater; | 115 WebSocketInflater inflater; |
| 116 ASSERT_TRUE(inflater.Initialize(15)); | 116 ASSERT_TRUE(inflater.Initialize(15)); |
| 117 scoped_refptr<IOBufferWithSize> actual1, actual2; | 117 scoped_refptr<IOBufferWithSize> actual1, actual2; |
| 118 | 118 |
| 119 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 119 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 120 ASSERT_TRUE(inflater.Finish()); | 120 ASSERT_TRUE(inflater.Finish()); |
| 121 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); | 121 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); |
| 122 ASSERT_TRUE(actual1); | 122 ASSERT_TRUE(actual1.get()); |
| 123 EXPECT_EQ("Hello", ToString(actual1.get())); | 123 EXPECT_EQ("Hello", ToString(actual1.get())); |
| 124 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 124 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 125 | 125 |
| 126 // Reset the stream with a block [BFINAL = 1, BTYPE = 00, LEN = 0] | 126 // Reset the stream with a block [BFINAL = 1, BTYPE = 00, LEN = 0] |
| 127 ASSERT_TRUE(inflater.AddBytes("\x01", 1)); | 127 ASSERT_TRUE(inflater.AddBytes("\x01", 1)); |
| 128 ASSERT_TRUE(inflater.Finish()); | 128 ASSERT_TRUE(inflater.Finish()); |
| 129 ASSERT_EQ(0u, inflater.CurrentOutputSize()); | 129 ASSERT_EQ(0u, inflater.CurrentOutputSize()); |
| 130 | 130 |
| 131 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 131 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 132 ASSERT_TRUE(inflater.Finish()); | 132 ASSERT_TRUE(inflater.Finish()); |
| 133 actual2 = inflater.GetOutput(inflater.CurrentOutputSize()); | 133 actual2 = inflater.GetOutput(inflater.CurrentOutputSize()); |
| 134 ASSERT_TRUE(actual2); | 134 ASSERT_TRUE(actual2.get()); |
| 135 EXPECT_EQ("Hello", ToString(actual2.get())); | 135 EXPECT_EQ("Hello", ToString(actual2.get())); |
| 136 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 136 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 137 } | 137 } |
| 138 | 138 |
| 139 TEST(WebSocketInflaterTest, ResetAndLostContext) { | 139 TEST(WebSocketInflaterTest, ResetAndLostContext) { |
| 140 WebSocketInflater inflater; | 140 WebSocketInflater inflater; |
| 141 scoped_refptr<IOBufferWithSize> actual1, actual2; | 141 scoped_refptr<IOBufferWithSize> actual1, actual2; |
| 142 ASSERT_TRUE(inflater.Initialize(15)); | 142 ASSERT_TRUE(inflater.Initialize(15)); |
| 143 | 143 |
| 144 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 144 ASSERT_TRUE(inflater.AddBytes("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| 145 ASSERT_TRUE(inflater.Finish()); | 145 ASSERT_TRUE(inflater.Finish()); |
| 146 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); | 146 actual1 = inflater.GetOutput(inflater.CurrentOutputSize()); |
| 147 ASSERT_TRUE(actual1); | 147 ASSERT_TRUE(actual1.get()); |
| 148 EXPECT_EQ("Hello", ToString(actual1.get())); | 148 EXPECT_EQ("Hello", ToString(actual1.get())); |
| 149 EXPECT_EQ(0u, inflater.CurrentOutputSize()); | 149 EXPECT_EQ(0u, inflater.CurrentOutputSize()); |
| 150 | 150 |
| 151 // Reset the stream with a block [BFINAL = 1, BTYPE = 00, LEN = 0] | 151 // Reset the stream with a block [BFINAL = 1, BTYPE = 00, LEN = 0] |
| 152 ASSERT_TRUE(inflater.AddBytes("\x01", 1)); | 152 ASSERT_TRUE(inflater.AddBytes("\x01", 1)); |
| 153 ASSERT_TRUE(inflater.Finish()); | 153 ASSERT_TRUE(inflater.Finish()); |
| 154 ASSERT_EQ(0u, inflater.CurrentOutputSize()); | 154 ASSERT_EQ(0u, inflater.CurrentOutputSize()); |
| 155 | 155 |
| 156 // The context is already reset. | 156 // The context is already reset. |
| 157 ASSERT_FALSE(inflater.AddBytes("\xf2\x00\x11\x00\x00", 5)); | 157 ASSERT_FALSE(inflater.AddBytes("\xf2\x00\x11\x00\x00", 5)); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 ASSERT_TRUE(inflater.Initialize(8)); | 194 ASSERT_TRUE(inflater.Initialize(8)); |
| 195 | 195 |
| 196 for (size_t i = 0; i < size; ++i) | 196 for (size_t i = 0; i < size; ++i) |
| 197 input.push_back(static_cast<char>(generator.Generate())); | 197 input.push_back(static_cast<char>(generator.Generate())); |
| 198 | 198 |
| 199 ASSERT_TRUE(deflater.AddBytes(&input[0], input.size())); | 199 ASSERT_TRUE(deflater.AddBytes(&input[0], input.size())); |
| 200 ASSERT_TRUE(deflater.Finish()); | 200 ASSERT_TRUE(deflater.Finish()); |
| 201 | 201 |
| 202 compressed = deflater.GetOutput(deflater.CurrentOutputSize()); | 202 compressed = deflater.GetOutput(deflater.CurrentOutputSize()); |
| 203 | 203 |
| 204 ASSERT_TRUE(compressed); | 204 ASSERT_TRUE(compressed.get()); |
| 205 ASSERT_EQ(0u, deflater.CurrentOutputSize()); | 205 ASSERT_EQ(0u, deflater.CurrentOutputSize()); |
| 206 | 206 |
| 207 ASSERT_TRUE(inflater.AddBytes(compressed->data(), compressed->size())); | 207 ASSERT_TRUE(inflater.AddBytes(compressed->data(), compressed->size())); |
| 208 ASSERT_TRUE(inflater.Finish()); | 208 ASSERT_TRUE(inflater.Finish()); |
| 209 | 209 |
| 210 while (inflater.CurrentOutputSize() > 0) { | 210 while (inflater.CurrentOutputSize() > 0) { |
| 211 scoped_refptr<IOBufferWithSize> uncompressed = | 211 scoped_refptr<IOBufferWithSize> uncompressed = |
| 212 inflater.GetOutput(inflater.CurrentOutputSize()); | 212 inflater.GetOutput(inflater.CurrentOutputSize()); |
| 213 ASSERT_TRUE(uncompressed); | 213 ASSERT_TRUE(uncompressed.get()); |
| 214 output.insert(output.end(), | 214 output.insert(output.end(), |
| 215 uncompressed->data(), | 215 uncompressed->data(), |
| 216 uncompressed->data() + uncompressed->size()); | 216 uncompressed->data() + uncompressed->size()); |
| 217 } | 217 } |
| 218 | 218 |
| 219 EXPECT_EQ(output, input); | 219 EXPECT_EQ(output, input); |
| 220 } | 220 } |
| 221 | 221 |
| 222 } // unnamed namespace | 222 } // unnamed namespace |
| 223 | 223 |
| 224 } // namespace net | 224 } // namespace net |
| OLD | NEW |