[email protected] | 39c48fc | 2012-03-12 18:42:12 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
[email protected] | dab9c7d | 2010-02-06 21:44:32 | [diff] [blame] | 5 | #include "net/spdy/spdy_protocol.h" |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 6 | |
[email protected] | df053db6 | 2013-03-20 19:53:52 | [diff] [blame] | 7 | #include <limits> |
| 8 | |
| 9 | #include "base/basictypes.h" |
[email protected] | 3b63f8f4 | 2011-03-28 01:54:15 | [diff] [blame] | 10 | #include "base/memory/scoped_ptr.h" |
[email protected] | dab9c7d | 2010-02-06 21:44:32 | [diff] [blame] | 11 | #include "net/spdy/spdy_bitmasks.h" |
| 12 | #include "net/spdy/spdy_framer.h" |
[email protected] | df053db6 | 2013-03-20 19:53:52 | [diff] [blame] | 13 | #include "testing/gtest/include/gtest/gtest.h" |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 14 | |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 15 | namespace { |
| 16 | |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 17 | enum SpdyProtocolTestTypes { |
[email protected] | 5b3e6d6 | 2012-04-24 22:47:33 | [diff] [blame] | 18 | SPDY2 = 2, |
| 19 | SPDY3 = 3, |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 20 | }; |
| 21 | |
[email protected] | d33f1d3c | 2013-02-16 00:51:46 | [diff] [blame] | 22 | } // namespace |
[email protected] | ff98d7f0 | 2012-03-22 21:44:19 | [diff] [blame] | 23 | |
| 24 | namespace net { |
| 25 | |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 26 | class SpdyProtocolTest |
| 27 | : public ::testing::TestWithParam<SpdyProtocolTestTypes> { |
| 28 | protected: |
| 29 | virtual void SetUp() { |
[email protected] | 5b3e6d6 | 2012-04-24 22:47:33 | [diff] [blame] | 30 | spdy_version_ = GetParam(); |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 31 | } |
| 32 | |
[email protected] | 5b3e6d6 | 2012-04-24 22:47:33 | [diff] [blame] | 33 | bool IsSpdy2() { return spdy_version_ == SPDY2; } |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 34 | |
| 35 | // Version of SPDY protocol to be used. |
| 36 | int spdy_version_; |
| 37 | }; |
| 38 | |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 39 | // All tests are run with two different SPDY versions: SPDY/2 and SPDY/3. |
| 40 | INSTANTIATE_TEST_CASE_P(SpdyProtocolTests, |
| 41 | SpdyProtocolTest, |
| 42 | ::testing::Values(SPDY2, SPDY3)); |
[email protected] | 39c48fc | 2012-03-12 18:42:12 | [diff] [blame] | 43 | |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 44 | // Test our protocol constants |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 45 | TEST_P(SpdyProtocolTest, ProtocolConstants) { |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 46 | EXPECT_EQ(1, SYN_STREAM); |
| 47 | EXPECT_EQ(2, SYN_REPLY); |
[email protected] | 0558bdf | 2010-02-10 19:24:29 | [diff] [blame] | 48 | EXPECT_EQ(3, RST_STREAM); |
[email protected] | 4e1d034 | 2010-04-02 22:24:45 | [diff] [blame] | 49 | EXPECT_EQ(4, SETTINGS); |
[email protected] | b9c4b6e | 2010-07-01 23:02:18 | [diff] [blame] | 50 | EXPECT_EQ(5, NOOP); |
| 51 | EXPECT_EQ(6, PING); |
[email protected] | 9ccdad2 | 2010-03-04 19:19:21 | [diff] [blame] | 52 | EXPECT_EQ(7, GOAWAY); |
[email protected] | b9c4b6e | 2010-07-01 23:02:18 | [diff] [blame] | 53 | EXPECT_EQ(8, HEADERS); |
| 54 | EXPECT_EQ(9, WINDOW_UPDATE); |
[email protected] | dda726d | 2013-06-27 20:36:32 | [diff] [blame] | 55 | EXPECT_EQ(10, CREDENTIAL); |
| 56 | EXPECT_EQ(11, BLOCKED); |
[email protected] | a5f3bbd | 2013-07-16 21:15:44 | [diff] [blame] | 57 | EXPECT_EQ(12, PUSH_PROMISE); |
| 58 | EXPECT_EQ(12, LAST_CONTROL_TYPE); |
[email protected] | df053db6 | 2013-03-20 19:53:52 | [diff] [blame] | 59 | EXPECT_EQ(std::numeric_limits<int32>::max(), kSpdyMaximumWindowSize); |
[email protected] | 22eb968 | 2009-11-06 21:51:58 | [diff] [blame] | 60 | } |
| 61 | |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 62 | class SpdyProtocolDeathTest : public SpdyProtocolTest {}; |
| 63 | |
[email protected] | 5b3e6d6 | 2012-04-24 22:47:33 | [diff] [blame] | 64 | // All tests are run with two different SPDY versions: SPDY/2 and SPDY/3. |
[email protected] | f74f265 | 2012-03-15 04:33:01 | [diff] [blame] | 65 | INSTANTIATE_TEST_CASE_P(SpdyProtocolDeathTests, |
| 66 | SpdyProtocolDeathTest, |
| 67 | ::testing::Values(SPDY2, SPDY3)); |
| 68 | |
[email protected] | df053db6 | 2013-03-20 19:53:52 | [diff] [blame] | 69 | #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG) |
| 70 | TEST_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] | ff98d7f0 | 2012-03-22 21:44:19 | [diff] [blame] | 86 | } // namespace net |