rls_server.cc
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 
18 
19 #include <gmock/gmock.h>
20 
21 #include "src/proto/grpc/lookup/v1/rls.grpc.pb.h"
22 #include "src/proto/grpc/lookup/v1/rls.pb.h"
24 
25 using ::grpc::lookup::v1::RouteLookupRequest;
26 using ::grpc::lookup::v1::RouteLookupResponse;
27 
28 namespace grpc {
29 namespace testing {
30 
32  const RouteLookupRequest* request,
33  RouteLookupResponse* response) {
34  gpr_log(GPR_INFO, "RLS: Received request: %s",
35  request->DebugString().c_str());
36  if (context_proc_ != nullptr) {
38  }
40  EXPECT_EQ(request->target_type(), "grpc");
41  // See if we have a configured response for this request.
42  ResponseData res;
43  {
45  auto it = responses_.find(*request);
46  if (it == responses_.end()) {
47  gpr_log(GPR_INFO, "RLS: no matching request, returning INTERNAL");
48  unmatched_requests_.push_back(*request);
49  return Status(StatusCode::INTERNAL, "no response entry");
50  }
51  res = it->second;
52  }
53  // Configured response found, so use it.
57  }
59  *response = res.response;
60  gpr_log(GPR_INFO, "RLS: returning configured response: %s",
61  response->DebugString().c_str());
62  return Status::OK;
63 }
64 
65 void RlsServiceImpl::SetResponse(RouteLookupRequest request,
66  RouteLookupResponse response,
67  grpc_core::Duration response_delay) {
69  responses_[std::move(request)] = {std::move(response), response_delay};
70 }
71 
72 void RlsServiceImpl::RemoveResponse(const RouteLookupRequest& request) {
74  responses_.erase(request);
75 }
76 
77 std::vector<RouteLookupRequest> RlsServiceImpl::GetUnmatchedRequests() {
79  return std::move(unmatched_requests_);
80 }
81 
82 grpc::lookup::v1::RouteLookupRequest BuildRlsRequest(
83  std::map<std::string, std::string> key,
84  grpc::lookup::v1::RouteLookupRequest::Reason reason,
85  const char* stale_header_data) {
86  grpc::lookup::v1::RouteLookupRequest request;
87  request.set_target_type("grpc");
88  request.mutable_key_map()->insert(key.begin(), key.end());
89  request.set_reason(reason);
90  request.set_stale_header_data(stale_header_data);
91  return request;
92 }
93 
94 grpc::lookup::v1::RouteLookupResponse BuildRlsResponse(
95  std::vector<std::string> targets, const char* header_data) {
96  grpc::lookup::v1::RouteLookupResponse response;
97  response.mutable_targets()->Add(targets.begin(), targets.end());
98  response.set_header_data(header_data);
99  return response;
100 }
101 
102 } // namespace testing
103 } // namespace grpc
GPR_INFO
#define GPR_INFO
Definition: include/grpc/impl/codegen/log.h:56
testing
Definition: aws_request_signer_test.cc:25
targets
std::vector< std::string > targets
Definition: rls.cc:252
regen-readme.it
it
Definition: regen-readme.py:15
grpc::ServerContext
Definition: grpcpp/impl/codegen/server_context.h:566
grpc::testing::RlsServiceImpl::context_proc_
ContextProcessingFunc context_proc_
Definition: rls_server.h:75
grpc
Definition: grpcpp/alarm.h:33
benchmark.request
request
Definition: benchmark.py:77
grpc::testing::RlsServiceImpl::ResponseData::response_delay
grpc_core::Duration response_delay
Definition: rls_server.h:72
grpc::testing::RlsServiceImpl::GetUnmatchedRequests
std::vector< grpc::lookup::v1::RouteLookupRequest > GetUnmatchedRequests()
Definition: rls_server.cc:77
grpc::testing::CountedService::IncreaseResponseCount
void IncreaseResponseCount()
Definition: counted_service.h:40
grpc::internal::MutexLock
Definition: include/grpcpp/impl/codegen/sync.h:86
grpc::testing::RlsServiceImpl::RouteLookup
grpc::Status RouteLookup(grpc::ServerContext *context, const grpc::lookup::v1::RouteLookupRequest *request, grpc::lookup::v1::RouteLookupResponse *response) override
Definition: rls_server.cc:31
absl::move
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
Definition: abseil-cpp/absl/utility/utility.h:221
grpc::testing::RlsServiceImpl::RemoveResponse
void RemoveResponse(const grpc::lookup::v1::RouteLookupRequest &request)
Definition: rls_server.cc:72
grpc_timeout_milliseconds_to_deadline
gpr_timespec grpc_timeout_milliseconds_to_deadline(int64_t time_ms)
Definition: test/core/util/test_config.cc:89
gpr_log
GPRAPI void gpr_log(const char *file, int line, gpr_log_severity severity, const char *format,...) GPR_PRINT_FORMAT_CHECK(4
gpr_sleep_until
GPRAPI void gpr_sleep_until(gpr_timespec until)
grpc::Status::OK
static const Status & OK
An OK pre-defined instance.
Definition: include/grpcpp/impl/codegen/status.h:113
grpc::testing::BuildRlsRequest
grpc::lookup::v1::RouteLookupRequest BuildRlsRequest(std::map< std::string, std::string > key, grpc::lookup::v1::RouteLookupRequest::Reason reason, const char *stale_header_data)
Definition: rls_server.cc:82
grpc::testing::CountedService::IncreaseRequestCount
void IncreaseRequestCount()
Definition: counted_service.h:44
grpc::testing::RlsServiceImpl::mu_
grpc::internal::Mutex mu_
Definition: rls_server.h:76
test_config.h
grpc_core::Duration::Zero
static constexpr Duration Zero()
Definition: src/core/lib/gprpp/time.h:130
grpc::testing::RlsServiceImpl::SetResponse
void SetResponse(grpc::lookup::v1::RouteLookupRequest request, grpc::lookup::v1::RouteLookupResponse response, grpc_core::Duration response_delay=grpc_core::Duration())
Definition: rls_server.cc:65
grpc_core::Duration::millis
constexpr int64_t millis() const
Definition: src/core/lib/gprpp/time.h:208
key
const char * key
Definition: hpack_parser_table.cc:164
asyncio_get_stats.response
response
Definition: asyncio_get_stats.py:28
grpc::testing::RlsServiceImpl::ResponseData::response
grpc::lookup::v1::RouteLookupResponse response
Definition: rls_server.h:71
grpc::protobuf::util::Status
GRPC_CUSTOM_UTIL_STATUS Status
Definition: include/grpcpp/impl/codegen/config_protobuf.h:93
grpc::Status
Definition: include/grpcpp/impl/codegen/status.h:35
grpc::testing::EXPECT_EQ
EXPECT_EQ(options.token_exchange_service_uri, "https://foo/exchange")
rls_server.h
context
grpc::ClientContext context
Definition: istio_echo_server_lib.cc:61
grpc::testing::BuildRlsResponse
grpc::lookup::v1::RouteLookupResponse BuildRlsResponse(std::vector< std::string > targets, const char *header_data)
Definition: rls_server.cc:94
header_data
std::string header_data
Definition: rls.cc:253
grpc.StatusCode.INTERNAL
tuple INTERNAL
Definition: src/python/grpcio/grpc/__init__.py:277
grpc_core::Duration
Definition: src/core/lib/gprpp/time.h:122
grpc::testing::RlsServiceImpl::ResponseData
Definition: rls_server.h:70


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