blob: 006dfe15ca5b451781fd182a30d15529ccead9ea [file] [log] [blame]
[email protected]39c48fc2012-03-12 18:42:121// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]22eb9682009-11-06 21:51:582// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]dab9c7d2010-02-06 21:44:325#include "net/spdy/spdy_protocol.h"
[email protected]22eb9682009-11-06 21:51:586
[email protected]df053db62013-03-20 19:53:527#include <limits>
8
9#include "base/basictypes.h"
[email protected]3b63f8f42011-03-28 01:54:1510#include "base/memory/scoped_ptr.h"
[email protected]dab9c7d2010-02-06 21:44:3211#include "net/spdy/spdy_bitmasks.h"
12#include "net/spdy/spdy_framer.h"
[email protected]df053db62013-03-20 19:53:5213#include "testing/gtest/include/gtest/gtest.h"
[email protected]22eb9682009-11-06 21:51:5814
[email protected]22eb9682009-11-06 21:51:5815namespace {
16
[email protected]f74f2652012-03-15 04:33:0117enum SpdyProtocolTestTypes {
[email protected]5b3e6d62012-04-24 22:47:3318 SPDY2 = 2,
19 SPDY3 = 3,
[email protected]f74f2652012-03-15 04:33:0120};
21
[email protected]d33f1d3c2013-02-16 00:51:4622} // namespace
[email protected]ff98d7f02012-03-22 21:44:1923
24namespace net {
25
[email protected]f74f2652012-03-15 04:33:0126class SpdyProtocolTest
27 : public ::testing::TestWithParam<SpdyProtocolTestTypes> {
28 protected:
29 virtual void SetUp() {
[email protected]5b3e6d62012-04-24 22:47:3330 spdy_version_ = GetParam();
[email protected]f74f2652012-03-15 04:33:0131 }
32
[email protected]5b3e6d62012-04-24 22:47:3333 bool IsSpdy2() { return spdy_version_ == SPDY2; }
[email protected]f74f2652012-03-15 04:33:0134
35 // Version of SPDY protocol to be used.
36 int spdy_version_;
37};
38
[email protected]f74f2652012-03-15 04:33:0139// All tests are run with two different SPDY versions: SPDY/2 and SPDY/3.
40INSTANTIATE_TEST_CASE_P(SpdyProtocolTests,
41 SpdyProtocolTest,
42 ::testing::Values(SPDY2, SPDY3));
[email protected]39c48fc2012-03-12 18:42:1243
[email protected]22eb9682009-11-06 21:51:5844// Test our protocol constants
[email protected]f74f2652012-03-15 04:33:0145TEST_P(SpdyProtocolTest, ProtocolConstants) {
[email protected]22eb9682009-11-06 21:51:5846 EXPECT_EQ(1, SYN_STREAM);
47 EXPECT_EQ(2, SYN_REPLY);
[email protected]0558bdf2010-02-10 19:24:2948 EXPECT_EQ(3, RST_STREAM);
[email protected]4e1d0342010-04-02 22:24:4549 EXPECT_EQ(4, SETTINGS);
[email protected]b9c4b6e2010-07-01 23:02:1850 EXPECT_EQ(5, NOOP);
51 EXPECT_EQ(6, PING);
[email protected]9ccdad22010-03-04 19:19:2152 EXPECT_EQ(7, GOAWAY);
[email protected]b9c4b6e2010-07-01 23:02:1853 EXPECT_EQ(8, HEADERS);
54 EXPECT_EQ(9, WINDOW_UPDATE);
[email protected]dda726d2013-06-27 20:36:3255 EXPECT_EQ(10, CREDENTIAL);
56 EXPECT_EQ(11, BLOCKED);
[email protected]a5f3bbd2013-07-16 21:15:4457 EXPECT_EQ(12, PUSH_PROMISE);
58 EXPECT_EQ(12, LAST_CONTROL_TYPE);
[email protected]df053db62013-03-20 19:53:5259 EXPECT_EQ(std::numeric_limits<int32>::max(), kSpdyMaximumWindowSize);
[email protected]22eb9682009-11-06 21:51:5860}
61
[email protected]f74f2652012-03-15 04:33:0162class SpdyProtocolDeathTest : public SpdyProtocolTest {};
63
[email protected]5b3e6d62012-04-24 22:47:3364// All tests are run with two different SPDY versions: SPDY/2 and SPDY/3.
[email protected]f74f2652012-03-15 04:33:0165INSTANTIATE_TEST_CASE_P(SpdyProtocolDeathTests,
66 SpdyProtocolDeathTest,
67 ::testing::Values(SPDY2, SPDY3));
68
[email protected]df053db62013-03-20 19:53:5269#if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
70TEST_P(SpdyProtocolDeathTest, TestSpdySettingsAndIdOutOfBounds) {
71 scoped_ptr<SettingsFlagsAndId> flags_and_id;
72
73 EXPECT_DEBUG_DEATH(
74 {
75 flags_and_id.reset(new SettingsFlagsAndId(1, ~0));
76 },
77 "SPDY setting ID too large.");
78 // Make sure that we get expected values in opt mode.
79 if (flags_and_id.get() != NULL) {
80 EXPECT_EQ(1, flags_and_id->flags());
81 EXPECT_EQ(static_cast<SpdyPingId>(0xffffff), flags_and_id->id());
82 }
83}
84#endif // GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
85
[email protected]ff98d7f02012-03-22 21:44:1986} // namespace net