| Index: net/http2/http2_structures_test_util.cc
|
| diff --git a/net/http2/http2_structures_test_util.cc b/net/http2/http2_structures_test_util.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1e6f4290af36bd215c0b380527f70a615b4a76b7
|
| --- /dev/null
|
| +++ b/net/http2/http2_structures_test_util.cc
|
| @@ -0,0 +1,107 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "net/http2/http2_structures_test_util.h"
|
| +
|
| +#include "net/http2/http2_constants.h"
|
| +#include "net/http2/http2_constants_test_util.h"
|
| +#include "net/http2/http2_structures.h"
|
| +#include "net/http2/tools/http2_random.h"
|
| +
|
| +namespace net {
|
| +namespace test {
|
| +
|
| +void Randomize(Http2FrameHeader* p, RandomBase* rng) {
|
| + p->payload_length = rng->Rand32() & 0xffffff;
|
| + p->type = static_cast<Http2FrameType>(rng->Rand8());
|
| + p->flags = static_cast<Http2FrameFlag>(rng->Rand8());
|
| + p->stream_id = rng->Rand32() & StreamIdMask();
|
| +}
|
| +void Randomize(Http2PriorityFields* p, RandomBase* rng) {
|
| + p->stream_dependency = rng->Rand32() & StreamIdMask();
|
| + p->weight = rng->Rand8() + 1;
|
| + p->is_exclusive = rng->OneIn(2);
|
| +}
|
| +void Randomize(Http2RstStreamFields* p, RandomBase* rng) {
|
| + p->error_code = static_cast<Http2ErrorCode>(rng->Rand32());
|
| +}
|
| +void Randomize(Http2SettingFields* p, RandomBase* rng) {
|
| + p->parameter = static_cast<Http2SettingsParameter>(rng->Rand16());
|
| + p->value = rng->Rand32();
|
| +}
|
| +void Randomize(Http2PushPromiseFields* p, RandomBase* rng) {
|
| + p->promised_stream_id = rng->Rand32() & StreamIdMask();
|
| +}
|
| +void Randomize(Http2PingFields* p, RandomBase* rng) {
|
| + for (int ndx = 0; ndx < 8; ++ndx) {
|
| + p->opaque_data[ndx] = rng->Rand8();
|
| + }
|
| +}
|
| +void Randomize(Http2GoAwayFields* p, RandomBase* rng) {
|
| + p->last_stream_id = rng->Rand32() & StreamIdMask();
|
| + p->error_code = static_cast<Http2ErrorCode>(rng->Rand32());
|
| +}
|
| +void Randomize(Http2WindowUpdateFields* p, RandomBase* rng) {
|
| + p->window_size_increment = rng->Rand32() & 0x7fffffff;
|
| +}
|
| +void Randomize(Http2AltSvcFields* p, RandomBase* rng) {
|
| + p->origin_length = rng->Rand16();
|
| +}
|
| +
|
| +void ScrubFlagsOfHeader(Http2FrameHeader* header) {
|
| + uint8_t invalid_mask = InvalidFlagMaskForFrameType(header->type);
|
| + uint8_t keep_mask = ~invalid_mask;
|
| + header->RetainFlags(keep_mask);
|
| +}
|
| +
|
| +bool FrameIsPadded(const Http2FrameHeader& header) {
|
| + switch (header.type) {
|
| + case Http2FrameType::DATA:
|
| + case Http2FrameType::HEADERS:
|
| + case Http2FrameType::PUSH_PROMISE:
|
| + return header.IsPadded();
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +bool FrameHasPriority(const Http2FrameHeader& header) {
|
| + switch (header.type) {
|
| + case Http2FrameType::HEADERS:
|
| + return header.HasPriority();
|
| + case Http2FrameType::PRIORITY:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +bool FrameCanHavePayload(const Http2FrameHeader& header) {
|
| + switch (header.type) {
|
| + case Http2FrameType::DATA:
|
| + case Http2FrameType::HEADERS:
|
| + case Http2FrameType::PUSH_PROMISE:
|
| + case Http2FrameType::CONTINUATION:
|
| + case Http2FrameType::PING:
|
| + case Http2FrameType::GOAWAY:
|
| + case Http2FrameType::ALTSVC:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +bool FrameCanHaveHpackPayload(const Http2FrameHeader& header) {
|
| + switch (header.type) {
|
| + case Http2FrameType::HEADERS:
|
| + case Http2FrameType::PUSH_PROMISE:
|
| + case Http2FrameType::CONTINUATION:
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +} // namespace test
|
| +} // namespace net
|
|
|