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

Side by Side Diff: net/http2/decoder/http2_structure_decoder_test.cc

Issue 2572343002: Use std::function instead of base::Callback in net/http2/. (Closed)
Patch Set: Rebase. Created 3 years, 11 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 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/http2_structure_decoder.h" 5 #include "net/http2/decoder/http2_structure_decoder.h"
6 6
7 // Tests decoding all of the fixed size HTTP/2 structures (i.e. those defined in 7 // Tests decoding all of the fixed size HTTP/2 structures (i.e. those defined in
8 // net/http2/http2_structures.h) using Http2StructureDecoder, which handles 8 // net/http2/http2_structures.h) using Http2StructureDecoder, which handles
9 // buffering of structures split across input buffer boundaries, and in turn 9 // buffering of structures split across input buffer boundaries, and in turn
10 // uses DoDecode when it has all of a structure in a contiguous buffer. 10 // uses DoDecode when it has all of a structure in a contiguous buffer.
11 11
12 // NOTE: This tests the first pair of Start and Resume, which don't take 12 // NOTE: This tests the first pair of Start and Resume, which don't take
13 // a remaining_payload parameter. The other pair are well tested via the 13 // a remaining_payload parameter. The other pair are well tested via the
14 // payload decoder tests, though... 14 // payload decoder tests, though...
15 // TODO(jamessynge): Create type parameterized tests for Http2StructureDecoder 15 // TODO(jamessynge): Create type parameterized tests for Http2StructureDecoder
16 // where the type is the type of structure, and with testing of both pairs of 16 // where the type is the type of structure, and with testing of both pairs of
17 // Start and Resume methods; note that it appears that the first pair will be 17 // Start and Resume methods; note that it appears that the first pair will be
18 // used only for Http2FrameHeader, and the other pair only for structures in the 18 // used only for Http2FrameHeader, and the other pair only for structures in the
19 // frame payload. 19 // frame payload.
20 20
21 #include <stddef.h> 21 #include <stddef.h>
22 #include <string> 22 #include <string>
23 23
24 #include "base/bind.h"
25 #include "base/bind_helpers.h"
26 #include "base/logging.h" 24 #include "base/logging.h"
27 #include "base/strings/string_piece.h" 25 #include "base/strings/string_piece.h"
28 #include "net/http2/decoder/decode_buffer.h" 26 #include "net/http2/decoder/decode_buffer.h"
29 #include "net/http2/decoder/decode_status.h" 27 #include "net/http2/decoder/decode_status.h"
30 #include "net/http2/http2_constants.h" 28 #include "net/http2/http2_constants.h"
31 #include "net/http2/http2_structures_test_util.h" 29 #include "net/http2/http2_structures_test_util.h"
32 #include "net/http2/tools/failure.h" 30 #include "net/http2/tools/failure.h"
33 #include "net/http2/tools/http2_frame_builder.h" 31 #include "net/http2/tools/http2_frame_builder.h"
34 #include "net/http2/tools/random_decoder_test.h" 32 #include "net/http2/tools/random_decoder_test.h"
35 #include "testing/gtest/include/gtest/gtest.h" 33 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 return DecodeStatus::kDecodeDone; 93 return DecodeStatus::kDecodeDone;
96 } else { 94 } else {
97 EXPECT_LT(structure_decoder_.offset(), S::EncodedSize()); 95 EXPECT_LT(structure_decoder_.offset(), S::EncodedSize());
98 EXPECT_EQ(0u, b->Remaining()); 96 EXPECT_EQ(0u, b->Remaining());
99 EXPECT_GT(S::EncodedSize(), old_offset + avail); 97 EXPECT_GT(S::EncodedSize(), old_offset + avail);
100 ++incomplete_resume_count_; 98 ++incomplete_resume_count_;
101 return DecodeStatus::kDecodeInProgress; 99 return DecodeStatus::kDecodeInProgress;
102 } 100 }
103 } 101 }
104 102
105 AssertionResult ValidatorForDecodeLeadingStructure(const S* expected,
106 const DecodeBuffer& db,
107 DecodeStatus status) {
108 VERIFY_EQ(*expected, structure_);
109 return AssertionSuccess();
110 }
111 103
112 // Fully decodes the Structure at the start of data, and confirms it matches 104 // Fully decodes the Structure at the start of data, and confirms it matches
113 // *expected (if provided). 105 // *expected (if provided).
114 AssertionResult DecodeLeadingStructure(const S* expected, StringPiece data) { 106 AssertionResult DecodeLeadingStructure(const S* expected, StringPiece data) {
115 VERIFY_LE(S::EncodedSize(), data.size()); 107 VERIFY_LE(S::EncodedSize(), data.size());
116 DecodeBuffer original(data); 108 DecodeBuffer original(data);
117 109
118 // The validator is called after each of the several times that the input 110 // The validator is called after each of the several times that the input
119 // DecodeBuffer is decoded, each with a different segmentation of the input. 111 // DecodeBuffer is decoded, each with a different segmentation of the input.
120 // Validate that structure_ matches the expected value, if provided. 112 // Validate that structure_ matches the expected value, if provided.
121 Validator validator = 113 Validator validator;
122 (expected == nullptr) 114 if (expected != nullptr) {
123 ? base::Bind(&SucceedingValidator) 115 validator = [expected, this](const DecodeBuffer& db,
124 : base::Bind(&Http2StructureDecoderTest:: 116 DecodeStatus status) -> AssertionResult {
125 ValidatorForDecodeLeadingStructure, 117 VERIFY_EQ(*expected, structure_);
126 base::Unretained(this), expected); 118 return AssertionSuccess();
119 };
120 }
127 121
128 // Before that, validate that decoding is done and that we've advanced 122 // Before that, validate that decoding is done and that we've advanced
129 // the cursor the expected amount. 123 // the cursor the expected amount.
130 Validator wrapped_validator = 124 validator = ValidateDoneAndOffset(S::EncodedSize(), validator);
131 ValidateDoneAndOffset(S::EncodedSize(), validator);
132 125
133 // Decode several times, with several segmentations of the input buffer. 126 // Decode several times, with several segmentations of the input buffer.
134 fast_decode_count_ = 0; 127 fast_decode_count_ = 0;
135 slow_decode_count_ = 0; 128 slow_decode_count_ = 0;
136 incomplete_start_count_ = 0; 129 incomplete_start_count_ = 0;
137 incomplete_resume_count_ = 0; 130 incomplete_resume_count_ = 0;
138 VERIFY_SUCCESS(DecodeAndValidateSeveralWays( 131 VERIFY_SUCCESS(DecodeAndValidateSeveralWays(
139 &original, kMayReturnZeroOnFirst, wrapped_validator)); 132 &original, kMayReturnZeroOnFirst, validator));
140 VERIFY_FALSE(HasFailure()); 133 VERIFY_FALSE(HasFailure());
141 VERIFY_EQ(S::EncodedSize(), structure_decoder_.offset()); 134 VERIFY_EQ(S::EncodedSize(), structure_decoder_.offset());
142 VERIFY_EQ(S::EncodedSize(), original.Offset()); 135 VERIFY_EQ(S::EncodedSize(), original.Offset());
143 VERIFY_LT(0u, fast_decode_count_); 136 VERIFY_LT(0u, fast_decode_count_);
144 VERIFY_LT(0u, slow_decode_count_); 137 VERIFY_LT(0u, slow_decode_count_);
145 VERIFY_LT(0u, incomplete_start_count_); 138 VERIFY_LT(0u, incomplete_start_count_);
146 139
147 // If the structure is large enough so that SelectZeroOrOne will have 140 // If the structure is large enough so that SelectZeroOrOne will have
148 // caused Resume to return false, check that occurred. 141 // caused Resume to return false, check that occurred.
149 if (S::EncodedSize() >= 2) { 142 if (S::EncodedSize() >= 2) {
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 496 }
504 } 497 }
505 498
506 TEST_F(Http2AltSvcFieldsDecoderTest, DecodesRandomized) { 499 TEST_F(Http2AltSvcFieldsDecoderTest, DecodesRandomized) {
507 TestDecodingRandomizedStructures(); 500 TestDecodingRandomizedStructures();
508 } 501 }
509 502
510 } // namespace 503 } // namespace
511 } // namespace test 504 } // namespace test
512 } // namespace net 505 } // namespace net
OLDNEW
« no previous file with comments | « net/http2/decoder/http2_frame_decoder_test.cc ('k') | net/http2/decoder/payload_decoders/altsvc_payload_decoder_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698