test/core/util/tls_utils.h
Go to the documentation of this file.
1 //
2 // Copyright 2020 gRPC authors.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 
17 #include <deque>
18 
19 #include "src/core/lib/gprpp/thd.h"
22 
23 namespace grpc_core {
24 
25 namespace testing {
26 
27 class TmpFile {
28  public:
29  // Create a temporary file with |data| written in.
30  explicit TmpFile(absl::string_view data);
31 
32  ~TmpFile();
33 
34  const std::string& name() { return name_; }
35 
36  // Rewrite |data| to the temporary file, in an atomic way.
38 
39  private:
41 
43 };
44 
46  absl::string_view certs);
47 
48 std::string GetFileContents(const char* path);
49 
50 // A synchronous external verifier implementation that simply returns
51 // verification results based on users' inputs. Note that it will delete itself
52 // in Destruct(), so create it like
53 // ```
54 // auto* sync_verifier_ = new SyncExternalVerifier(false);
55 // ```
56 // and no need to delete it later. This is basically to keep consistent with the
57 // semantics in AsyncExternalVerifier.
59  public:
60  explicit SyncExternalVerifier(bool success)
61  : success_(success), base_{this, Verify, Cancel, Destruct} {}
62 
64 
65  private:
66  static int Verify(void* user_data,
69  void* callback_arg, grpc_status_code* sync_status,
70  char** sync_error_details);
71 
73 
74  static void Destruct(void* user_data);
75 
76  bool success_ = false;
78 };
79 
80 // An asynchronous external verifier implementation that runs a thread and
81 // process each request received from the verifier sequentially. Note that it
82 // will delete itself in Destruct(), so create it like
83 // ```
84 // auto* async_verifier = new AsyncExternalVerifier(true, &event);
85 // auto* core_external_verifier =
86 // new ExternalCertificateVerifier(async_verifier->base());
87 // ```
88 // and no need to delete it later.
89 // We delete AsyncExternalVerifier in Destruct() instead of its dtor because we
90 // wanted AsyncExternalVerifier to outlive the underlying core
91 // ExternalCertificateVerifier implementation.
93  public:
94  explicit AsyncExternalVerifier(bool success)
95  : success_(success),
96  thread_("AsyncExternalVerifierWorkerThread", WorkerThread, this),
97  base_{this, Verify, Cancel, Destruct} {
98  grpc_init();
99  thread_.Start();
100  }
101 
103 
105 
106  private:
107  // A request to pass to the worker thread.
108  struct Request {
112  bool shutdown; // If true, thread will exit.
113  };
114 
115  static int Verify(void* user_data,
118  void* callback_arg, grpc_status_code* sync_status,
119  char** sync_error_details);
120 
122 
123  static void Destruct(void* user_data);
124 
125  static void WorkerThread(void* arg);
126 
127  bool success_ = false;
131  std::deque<Request> queue_ ABSL_GUARDED_BY(mu_);
132 };
133 
134 } // namespace testing
135 
136 } // namespace grpc_core
grpc_core::testing::TmpFile::TmpFile
TmpFile(absl::string_view data)
Definition: test/core/util/tls_utils.cc:30
grpc_core::testing::TmpFile
Definition: test/core/util/tls_utils.h:27
testing
Definition: aws_request_signer_test.cc:25
grpc_core::testing::TmpFile::~TmpFile
~TmpFile()
Definition: test/core/util/tls_utils.cc:35
grpc_core::testing::SyncExternalVerifier
Definition: test/core/util/tls_utils.h:58
grpc_core::testing::MakeCertKeyPairs
PemKeyCertPairList MakeCertKeyPairs(absl::string_view private_key, absl::string_view certs)
Definition: test/core/util/tls_utils.cc:60
grpc_core::testing::AsyncExternalVerifier::Verify
static int Verify(void *user_data, grpc_tls_custom_verification_check_request *request, grpc_tls_on_custom_verification_check_done_cb callback, void *callback_arg, grpc_status_code *sync_status, char **sync_error_details)
Definition: test/core/util/tls_utils.cc:107
grpc_core::testing::AsyncExternalVerifier::Cancel
static void Cancel(void *, grpc_tls_custom_verification_check_request *)
Definition: test/core/util/tls_utils.h:121
grpc_core
Definition: call_metric_recorder.h:31
grpc_core::testing::AsyncExternalVerifier::AsyncExternalVerifier
AsyncExternalVerifier(bool success)
Definition: test/core/util/tls_utils.h:94
grpc_core::testing::TmpFile::CreateTmpFileAndWriteData
std::string CreateTmpFileAndWriteData(absl::string_view data)
Definition: test/core/util/tls_utils.cc:47
benchmark.request
request
Definition: benchmark.py:77
absl::string_view
Definition: abseil-cpp/absl/strings/string_view.h:167
grpc_core::testing::AsyncExternalVerifier::ABSL_GUARDED_BY
std::deque< Request > queue_ ABSL_GUARDED_BY(mu_)
grpc_core::testing::AsyncExternalVerifier::~AsyncExternalVerifier
~AsyncExternalVerifier()
Definition: test/core/util/tls_utils.cc:96
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
grpc_status_code
grpc_status_code
Definition: include/grpc/impl/codegen/status.h:28
grpc_core::testing::TmpFile::name_
std::string name_
Definition: test/core/util/tls_utils.h:42
grpc_core::testing::SyncExternalVerifier::success_
bool success_
Definition: test/core/util/tls_utils.h:76
check_documentation.path
path
Definition: check_documentation.py:57
grpc_tls_on_custom_verification_check_done_cb
void(* grpc_tls_on_custom_verification_check_done_cb)(grpc_tls_custom_verification_check_request *request, void *callback_arg, grpc_status_code status, const char *error_details)
Definition: grpc_security.h:946
grpc_core::testing::AsyncExternalVerifier::thread_
Thread thread_
Definition: test/core/util/tls_utils.h:128
grpc_core::testing::TmpFile::RewriteFile
void RewriteFile(absl::string_view data)
Definition: test/core/util/tls_utils.cc:37
grpc_core::testing::SyncExternalVerifier::base_
grpc_tls_certificate_verifier_external base_
Definition: test/core/util/tls_utils.h:77
grpc_core::testing::AsyncExternalVerifier::success_
bool success_
Definition: test/core/util/tls_utils.h:127
grpc_tls_certificate_verifier_external
Definition: grpc_security.h:963
arg
Definition: cmdline.cc:40
grpc_core::testing::AsyncExternalVerifier
Definition: test/core/util/tls_utils.h:92
grpc_core::testing::AsyncExternalVerifier::Request::callback_arg
void * callback_arg
Definition: test/core/util/tls_utils.h:111
grpc_core::testing::SyncExternalVerifier::Verify
static int Verify(void *user_data, grpc_tls_custom_verification_check_request *request, grpc_tls_on_custom_verification_check_done_cb callback, void *callback_arg, grpc_status_code *sync_status, char **sync_error_details)
Definition: test/core/util/tls_utils.cc:76
data
char data[kBufferLength]
Definition: abseil-cpp/absl/strings/internal/str_format/float_conversion.cc:1006
callback
static void callback(void *arg, int status, int timeouts, struct hostent *host)
Definition: acountry.c:224
grpc_core::testing::SyncExternalVerifier::SyncExternalVerifier
SyncExternalVerifier(bool success)
Definition: test/core/util/tls_utils.h:60
grpc_core::testing::AsyncExternalVerifier::Request::request
grpc_tls_custom_verification_check_request * request
Definition: test/core/util/tls_utils.h:109
grpc_core::testing::AsyncExternalVerifier::Request
Definition: test/core/util/tls_utils.h:108
grpc_core::Thread::Start
void Start()
Definition: thd.h:125
grpc_core::testing::AsyncExternalVerifier::mu_
Mutex mu_
Definition: test/core/util/tls_utils.h:130
grpc_core::testing::TmpFile::name
const std::string & name()
Definition: test/core/util/tls_utils.h:34
grpc_core::testing::AsyncExternalVerifier::Destruct
static void Destruct(void *user_data)
Definition: test/core/util/tls_utils.cc:127
test_config.h
grpc_core::testing::SyncExternalVerifier::base
grpc_tls_certificate_verifier_external * base()
Definition: test/core/util/tls_utils.h:63
grpc_core::Mutex
Definition: src/core/lib/gprpp/sync.h:61
grpc_core::testing::AsyncExternalVerifier::Request::shutdown
bool shutdown
Definition: test/core/util/tls_utils.h:112
grpc_core::testing::AsyncExternalVerifier::base_
grpc_tls_certificate_verifier_external base_
Definition: test/core/util/tls_utils.h:129
grpc_core::PemKeyCertPairList
std::vector< PemKeyCertPair > PemKeyCertPairList
Definition: ssl_utils.h:183
grpc_core::testing::SyncExternalVerifier::Destruct
static void Destruct(void *user_data)
Definition: test/core/util/tls_utils.cc:91
grpc_core::testing::SyncExternalVerifier::Cancel
static void Cancel(void *, grpc_tls_custom_verification_check_request *)
Definition: test/core/util/tls_utils.h:72
private_key
Definition: hrss.c:1885
grpc_core::testing::AsyncExternalVerifier::Request::callback
grpc_tls_on_custom_verification_check_done_cb callback
Definition: test/core/util/tls_utils.h:110
thd.h
grpc_core::Thread
Definition: thd.h:43
grpc_tls_custom_verification_check_request
Definition: grpc_security.h:907
grpc_init
GRPCAPI void grpc_init(void)
Definition: init.cc:146
grpc_core::testing::AsyncExternalVerifier::WorkerThread
static void WorkerThread(void *arg)
Definition: test/core/util/tls_utils.cc:136
grpc_core::testing::GetFileContents
std::string GetFileContents(const char *path)
Definition: test/core/util/tls_utils.cc:68
grpc_core::testing::AsyncExternalVerifier::base
grpc_tls_certificate_verifier_external * base()
Definition: test/core/util/tls_utils.h:104
ssl_utils.h


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:39