// // Copyright 2021 gRPC authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #ifndef GRPC_TEST_CPP_UTIL_TLS_TEST_UTILS_H #define GRPC_TEST_CPP_UTIL_TLS_TEST_UTILS_H #include #include #include #include #include "src/core/lib/gprpp/thd.h" namespace grpc { namespace testing { class SyncCertificateVerifier : public ::grpc::experimental::ExternalCertificateVerifier { public: explicit SyncCertificateVerifier(bool success) : success_(success) {} ~SyncCertificateVerifier() override {} bool Verify(::grpc::experimental::TlsCustomVerificationCheckRequest* request, std::function callback, grpc::Status* sync_status) override; void Cancel( ::grpc::experimental::TlsCustomVerificationCheckRequest*) override {} private: bool success_ = false; }; class AsyncCertificateVerifier : public ::grpc::experimental::ExternalCertificateVerifier { public: explicit AsyncCertificateVerifier(bool success); ~AsyncCertificateVerifier() override; bool Verify(::grpc::experimental::TlsCustomVerificationCheckRequest* request, std::function callback, grpc::Status* sync_status) override; void Cancel( ::grpc::experimental::TlsCustomVerificationCheckRequest*) override {} private: // A request to pass to the worker thread. struct Request { ::grpc::experimental::TlsCustomVerificationCheckRequest* request; std::function callback; bool shutdown; // If true, thread will exit. }; static void WorkerThread(void* arg); bool success_ = false; grpc_core::Thread thread_; grpc::internal::Mutex mu_; std::deque queue_ ABSL_GUARDED_BY(mu_); }; } // namespace testing } // namespace grpc #endif // GRPC_TEST_CPP_UTIL_TLS_TEST_UTILS_H