proxygen
TokenBindingServerExtensionTest.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2018-present, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under the BSD-style license found in the
6  * LICENSE file in the root directory of this source tree.
7  */
8 
9 #include <gmock/gmock.h>
10 #include <gtest/gtest.h>
11 
15 #include <fizz/record/Extensions.h>
17 
18 using namespace folly;
19 using namespace folly::io;
20 
21 using testing::_;
22 using namespace testing;
23 
24 namespace fizz {
25 namespace extensions {
26 namespace test {
27 
29  public:
30  void SetUp() override {
31  tokenBindingContext_ = std::make_shared<TokenBindingContext>();
32  extensions_ =
33  std::make_shared<TokenBindingServerExtension>(tokenBindingContext_);
34  }
35 
38  TokenBindingKeyParameters keyParams) {
39  params_.version = version;
40  params_.key_parameters_list.push_back(keyParams);
41  chlo_.extensions.push_back(encodeExtension(std::move(params_)));
42  }
43 
46  TokenBindingProtocolVersion expectedVersion,
47  TokenBindingKeyParameters expectedParams) {
48  EXPECT_TRUE(actual.hasValue());
49  EXPECT_EQ(actual->version, expectedVersion);
50  EXPECT_EQ(actual->key_parameters_list.size(), 1);
51  EXPECT_EQ(actual->key_parameters_list[0], expectedParams);
52  }
53 
56  std::shared_ptr<TokenBindingServerExtension> extensions_;
57  std::shared_ptr<TokenBindingContext> tokenBindingContext_;
58 };
59 
60 TEST_F(TokenBindingServerExtensionTest, TestFullNegotiationFlow) {
61  setUpTokenBindingWithParameters(
62  TokenBindingProtocolVersion::token_binding_0_14,
63  TokenBindingKeyParameters::ecdsap256);
64  auto exts = extensions_->getExtensions(chlo_);
65  EXPECT_EQ(exts.size(), 1);
66 
67  auto tokenBindingExtension = getExtension<TokenBindingParameters>(exts);
68  verifyExtensionFields(
69  tokenBindingExtension,
70  TokenBindingProtocolVersion::token_binding_0_14,
71  TokenBindingKeyParameters::ecdsap256);
72 }
73 
75  auto exts = extensions_->getExtensions(chlo_);
76  EXPECT_EQ(exts.size(), 0);
77 }
78 
79 TEST_F(TokenBindingServerExtensionTest, TestIncompatibleKeyParam) {
80  setUpTokenBindingWithParameters(
81  TokenBindingProtocolVersion::token_binding_0_14,
82  TokenBindingKeyParameters::ecdsap256);
83  std::vector<TokenBindingKeyParameters> keyParams = {
84  TokenBindingKeyParameters::rsa2048_pss};
85 
86  tokenBindingContext_->setSupportedKeyParameters(std::move(keyParams));
87  auto exts = extensions_->getExtensions(chlo_);
88  EXPECT_EQ(exts.size(), 0);
89 }
90 
91 TEST_F(TokenBindingServerExtensionTest, TestIncompatibleVersion) {
92  setUpTokenBindingWithParameters(
93  TokenBindingProtocolVersion::token_binding_0_13,
94  TokenBindingKeyParameters::ecdsap256);
95 
96  auto exts = extensions_->getExtensions(chlo_);
97  EXPECT_EQ(exts.size(), 0);
98 }
99 
100 TEST_F(TokenBindingServerExtensionTest, TestServerLowerVersion) {
101  setUpTokenBindingWithParameters(
102  TokenBindingProtocolVersion::token_binding_0_14,
103  TokenBindingKeyParameters::ecdsap256);
104  std::vector<TokenBindingProtocolVersion> versions = {
105  TokenBindingProtocolVersion::token_binding_0_13};
106 
107  tokenBindingContext_->setSupportedVersions(std::move(versions));
108  auto exts = extensions_->getExtensions(chlo_);
109  EXPECT_EQ(exts.size(), 1);
110 
111  auto tokenBindingExtension = getExtension<TokenBindingParameters>(exts);
112  verifyExtensionFields(
113  tokenBindingExtension,
114  TokenBindingProtocolVersion::token_binding_0_13,
115  TokenBindingKeyParameters::ecdsap256);
116 }
117 } // namespace test
118 } // namespace extensions
119 } // namespace fizz
void setUpTokenBindingWithParameters(TokenBindingProtocolVersion version, TokenBindingKeyParameters keyParams)
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
constexpr detail::Map< Move > move
Definition: Base-inl.h:2567
—— Concurrent Priority Queue Implementation ——
Definition: AtomicBitSet.h:29
TokenBindingKeyParameters
Definition: Types.h:33
ProtocolVersion version
FOLLY_CPP14_CONSTEXPR bool hasValue() const noexcept
Definition: Optional.h:300
Definition: Actions.h:16
TEST_F(AsyncSSLSocketWriteTest, write_coalescing1)
void verifyExtensionFields(const folly::Optional< TokenBindingParameters > &actual, TokenBindingProtocolVersion expectedVersion, TokenBindingKeyParameters expectedParams)
#define EXPECT_TRUE(condition)
Definition: gtest.h:1859
TokenBindingProtocolVersion
Definition: Types.h:22
const internal::AnythingMatcher _
Extension encodeExtension(const TokenBindingParameters &params)
Definition: Types.cpp:113