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

Side by Side Diff: net/http2/decoder/payload_decoders/settings_payload_decoder_test.cc

Issue 2572343002: Use std::function instead of base::Callback in net/http2/. (Closed)
Patch Set: Remove unreachable return statements. Created 4 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/http2/decoder/payload_decoders/settings_payload_decoder.h" 5 #include "net/http2/decoder/payload_decoders/settings_payload_decoder.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h"
12 #include "base/logging.h" 11 #include "base/logging.h"
13 #include "net/http2/decoder/frame_parts.h" 12 #include "net/http2/decoder/frame_parts.h"
14 #include "net/http2/decoder/frame_parts_collector.h" 13 #include "net/http2/decoder/frame_parts_collector.h"
15 #include "net/http2/decoder/http2_frame_decoder_listener.h" 14 #include "net/http2/decoder/http2_frame_decoder_listener.h"
16 #include "net/http2/decoder/payload_decoders/payload_decoder_base_test_util.h" 15 #include "net/http2/decoder/payload_decoders/payload_decoder_base_test_util.h"
17 #include "net/http2/http2_constants.h" 16 #include "net/http2/http2_constants.h"
18 #include "net/http2/http2_constants_test_util.h" 17 #include "net/http2/http2_constants_test_util.h"
19 #include "net/http2/http2_structures_test_util.h" 18 #include "net/http2/http2_structures_test_util.h"
20 #include "net/http2/tools/http2_frame_builder.h" 19 #include "net/http2/tools/http2_frame_builder.h"
21 #include "net/http2/tools/http2_random.h" 20 #include "net/http2/tools/http2_random.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 void OnFrameSizeError(const Http2FrameHeader& header) override { 70 void OnFrameSizeError(const Http2FrameHeader& header) override {
72 VLOG(1) << "OnFrameSizeError: " << header; 71 VLOG(1) << "OnFrameSizeError: " << header;
73 FrameError(header)->OnFrameSizeError(header); 72 FrameError(header)->OnFrameSizeError(header);
74 } 73 }
75 }; 74 };
76 75
77 class SettingsPayloadDecoderTest 76 class SettingsPayloadDecoderTest
78 : public AbstractPayloadDecoderTest<SettingsPayloadDecoder, 77 : public AbstractPayloadDecoderTest<SettingsPayloadDecoder,
79 SettingsPayloadDecoderPeer, 78 SettingsPayloadDecoderPeer,
80 Listener> { 79 Listener> {
81 public:
82 static bool ApproveSizeForSettingsWrongSize(size_t size) {
83 // Should get an error if size is not an integral multiple of the size
84 // of one setting.
85 return 0 != (size % Http2SettingFields::EncodedSize());
86 }
87
88 static bool ApproveSizeForSettingsAkcWrongSize(size_t size) {
89 return size != 0;
90 }
91
92 protected: 80 protected:
93 Http2SettingFields RandSettingsFields() { 81 Http2SettingFields RandSettingsFields() {
94 Http2SettingFields fields; 82 Http2SettingFields fields;
95 test::Randomize(&fields, RandomPtr()); 83 test::Randomize(&fields, RandomPtr());
96 return fields; 84 return fields;
97 } 85 }
98 }; 86 };
99 87
100 // Confirm we get an error if the SETTINGS payload is not the correct size 88 // Confirm we get an error if the SETTINGS payload is not the correct size
101 // to hold exactly zero or more whole Http2SettingFields. 89 // to hold exactly zero or more whole Http2SettingFields.
102 TEST_F(SettingsPayloadDecoderTest, SettingsWrongSize) { 90 TEST_F(SettingsPayloadDecoderTest, SettingsWrongSize) {
91 auto approve_size = [](size_t size) {
92 // Should get an error if size is not an integral multiple of the size
93 // of one setting.
94 return 0 != (size % Http2SettingFields::EncodedSize());
95 };
103 Http2FrameBuilder fb; 96 Http2FrameBuilder fb;
104 fb.Append(RandSettingsFields()); 97 fb.Append(RandSettingsFields());
105 fb.Append(RandSettingsFields()); 98 fb.Append(RandSettingsFields());
106 fb.Append(RandSettingsFields()); 99 fb.Append(RandSettingsFields());
107 EXPECT_TRUE(VerifyDetectsFrameSizeError( 100 EXPECT_TRUE(VerifyDetectsFrameSizeError(0, fb.buffer(), approve_size));
108 0, fb.buffer(),
109 base::Bind(
110 &SettingsPayloadDecoderTest::ApproveSizeForSettingsWrongSize)));
111 } 101 }
112 102
113 // Confirm we get an error if the SETTINGS ACK payload is not empty. 103 // Confirm we get an error if the SETTINGS ACK payload is not empty.
114 TEST_F(SettingsPayloadDecoderTest, SettingsAkcWrongSize) { 104 TEST_F(SettingsPayloadDecoderTest, SettingsAkcWrongSize) {
105 auto approve_size = [](size_t size) { return size != 0; };
115 Http2FrameBuilder fb; 106 Http2FrameBuilder fb;
116 fb.Append(RandSettingsFields()); 107 fb.Append(RandSettingsFields());
117 fb.Append(RandSettingsFields()); 108 fb.Append(RandSettingsFields());
118 fb.Append(RandSettingsFields()); 109 fb.Append(RandSettingsFields());
119 EXPECT_TRUE(VerifyDetectsFrameSizeError( 110 EXPECT_TRUE(VerifyDetectsFrameSizeError(Http2FrameFlag::FLAG_ACK, fb.buffer(),
120 Http2FrameFlag::FLAG_ACK, fb.buffer(), 111 approve_size));
121 base::Bind(
122 &SettingsPayloadDecoderTest::ApproveSizeForSettingsAkcWrongSize)));
123 } 112 }
124 113
125 // SETTINGS must have stream_id==0, but the payload decoder doesn't check that. 114 // SETTINGS must have stream_id==0, but the payload decoder doesn't check that.
126 TEST_F(SettingsPayloadDecoderTest, SettingsAck) { 115 TEST_F(SettingsPayloadDecoderTest, SettingsAck) {
127 for (int stream_id = 0; stream_id < 3; ++stream_id) { 116 for (int stream_id = 0; stream_id < 3; ++stream_id) {
128 Http2FrameHeader header(0, Http2FrameType::SETTINGS, 117 Http2FrameHeader header(0, Http2FrameType::SETTINGS,
129 RandFlags() | Http2FrameFlag::FLAG_ACK, stream_id); 118 RandFlags() | Http2FrameFlag::FLAG_ACK, stream_id);
130 set_frame_header(header); 119 set_frame_header(header);
131 FrameParts expected(header); 120 FrameParts expected(header);
132 EXPECT_TRUE(DecodePayloadAndValidateSeveralWays("", expected)); 121 EXPECT_TRUE(DecodePayloadAndValidateSeveralWays("", expected));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 fb.Append(fields); 156 fb.Append(fields);
168 expected.settings.push_back(fields); 157 expected.settings.push_back(fields);
169 } 158 }
170 ASSERT_EQ(size, fb.size()); 159 ASSERT_EQ(size, fb.size());
171 EXPECT_TRUE(DecodePayloadAndValidateSeveralWays(fb.buffer(), expected)); 160 EXPECT_TRUE(DecodePayloadAndValidateSeveralWays(fb.buffer(), expected));
172 } 161 }
173 162
174 } // namespace 163 } // namespace
175 } // namespace test 164 } // namespace test
176 } // namespace net 165 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698