xref: /aosp_15_r20/external/grpc-grpc/test/cpp/end2end/counted_service.h (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker //
2*cc02d7e2SAndroid Build Coastguard Worker // Copyright 2017 gRPC authors.
3*cc02d7e2SAndroid Build Coastguard Worker //
4*cc02d7e2SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
5*cc02d7e2SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
6*cc02d7e2SAndroid Build Coastguard Worker // You may obtain a copy of the License at
7*cc02d7e2SAndroid Build Coastguard Worker //
8*cc02d7e2SAndroid Build Coastguard Worker //     http://www.apache.org/licenses/LICENSE-2.0
9*cc02d7e2SAndroid Build Coastguard Worker //
10*cc02d7e2SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
11*cc02d7e2SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
12*cc02d7e2SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*cc02d7e2SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
14*cc02d7e2SAndroid Build Coastguard Worker // limitations under the License.
15*cc02d7e2SAndroid Build Coastguard Worker //
16*cc02d7e2SAndroid Build Coastguard Worker 
17*cc02d7e2SAndroid Build Coastguard Worker #ifndef GRPC_TEST_CPP_END2END_COUNTED_SERVICE_H
18*cc02d7e2SAndroid Build Coastguard Worker #define GRPC_TEST_CPP_END2END_COUNTED_SERVICE_H
19*cc02d7e2SAndroid Build Coastguard Worker 
20*cc02d7e2SAndroid Build Coastguard Worker #include "src/core/lib/gprpp/sync.h"
21*cc02d7e2SAndroid Build Coastguard Worker 
22*cc02d7e2SAndroid Build Coastguard Worker namespace grpc {
23*cc02d7e2SAndroid Build Coastguard Worker namespace testing {
24*cc02d7e2SAndroid Build Coastguard Worker 
25*cc02d7e2SAndroid Build Coastguard Worker // A wrapper around an RPC service implementation that provides request and
26*cc02d7e2SAndroid Build Coastguard Worker // response counting.
27*cc02d7e2SAndroid Build Coastguard Worker template <typename ServiceType>
28*cc02d7e2SAndroid Build Coastguard Worker class CountedService : public ServiceType {
29*cc02d7e2SAndroid Build Coastguard Worker  public:
request_count()30*cc02d7e2SAndroid Build Coastguard Worker   size_t request_count() {
31*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::MutexLock lock(&mu_);
32*cc02d7e2SAndroid Build Coastguard Worker     return request_count_;
33*cc02d7e2SAndroid Build Coastguard Worker   }
34*cc02d7e2SAndroid Build Coastguard Worker 
response_count()35*cc02d7e2SAndroid Build Coastguard Worker   size_t response_count() {
36*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::MutexLock lock(&mu_);
37*cc02d7e2SAndroid Build Coastguard Worker     return response_count_;
38*cc02d7e2SAndroid Build Coastguard Worker   }
39*cc02d7e2SAndroid Build Coastguard Worker 
IncreaseResponseCount()40*cc02d7e2SAndroid Build Coastguard Worker   void IncreaseResponseCount() {
41*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::MutexLock lock(&mu_);
42*cc02d7e2SAndroid Build Coastguard Worker     ++response_count_;
43*cc02d7e2SAndroid Build Coastguard Worker   }
IncreaseRequestCount()44*cc02d7e2SAndroid Build Coastguard Worker   void IncreaseRequestCount() {
45*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::MutexLock lock(&mu_);
46*cc02d7e2SAndroid Build Coastguard Worker     ++request_count_;
47*cc02d7e2SAndroid Build Coastguard Worker   }
48*cc02d7e2SAndroid Build Coastguard Worker 
ResetCounters()49*cc02d7e2SAndroid Build Coastguard Worker   void ResetCounters() {
50*cc02d7e2SAndroid Build Coastguard Worker     grpc_core::MutexLock lock(&mu_);
51*cc02d7e2SAndroid Build Coastguard Worker     request_count_ = 0;
52*cc02d7e2SAndroid Build Coastguard Worker     response_count_ = 0;
53*cc02d7e2SAndroid Build Coastguard Worker   }
54*cc02d7e2SAndroid Build Coastguard Worker 
55*cc02d7e2SAndroid Build Coastguard Worker  private:
56*cc02d7e2SAndroid Build Coastguard Worker   grpc_core::Mutex mu_;
57*cc02d7e2SAndroid Build Coastguard Worker   size_t request_count_ ABSL_GUARDED_BY(mu_) = 0;
58*cc02d7e2SAndroid Build Coastguard Worker   size_t response_count_ ABSL_GUARDED_BY(mu_) = 0;
59*cc02d7e2SAndroid Build Coastguard Worker };
60*cc02d7e2SAndroid Build Coastguard Worker 
61*cc02d7e2SAndroid Build Coastguard Worker }  // namespace testing
62*cc02d7e2SAndroid Build Coastguard Worker }  // namespace grpc
63*cc02d7e2SAndroid Build Coastguard Worker 
64*cc02d7e2SAndroid Build Coastguard Worker #endif  // GRPC_TEST_CPP_END2END_COUNTED_SERVICE_H
65