// // Copyright 2017 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_END2END_COUNTED_SERVICE_H #define GRPC_TEST_CPP_END2END_COUNTED_SERVICE_H #include "src/core/lib/gprpp/sync.h" namespace grpc { namespace testing { // A wrapper around an RPC service implementation that provides request and // response counting. template class CountedService : public ServiceType { public: size_t request_count() { grpc_core::MutexLock lock(&mu_); return request_count_; } size_t response_count() { grpc_core::MutexLock lock(&mu_); return response_count_; } void IncreaseResponseCount() { grpc_core::MutexLock lock(&mu_); ++response_count_; } void IncreaseRequestCount() { grpc_core::MutexLock lock(&mu_); ++request_count_; } void ResetCounters() { grpc_core::MutexLock lock(&mu_); request_count_ = 0; response_count_ = 0; } private: grpc_core::Mutex mu_; size_t request_count_ ABSL_GUARDED_BY(mu_) = 0; size_t response_count_ ABSL_GUARDED_BY(mu_) = 0; }; } // namespace testing } // namespace grpc #endif // GRPC_TEST_CPP_END2END_COUNTED_SERVICE_H