Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/test/mocks/upstream/cluster_info.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#include <chrono>
4
#include <cstdint>
5
#include <memory>
6
#include <string>
7
8
#include "envoy/config/cluster/v3/cluster.pb.h"
9
#include "envoy/config/core/v3/base.pb.h"
10
#include "envoy/config/core/v3/protocol.pb.h"
11
#include "envoy/config/typed_metadata.h"
12
#include "envoy/stats/scope.h"
13
#include "envoy/upstream/cluster_manager.h"
14
#include "envoy/upstream/upstream.h"
15
16
#include "source/common/common/thread.h"
17
#include "source/common/http/http1/codec_stats.h"
18
#include "source/common/http/http2/codec_stats.h"
19
#include "source/common/http/http3/codec_stats.h"
20
#include "source/common/upstream/upstream_impl.h"
21
22
#include "test/mocks/runtime/mocks.h"
23
#include "test/mocks/stats/mocks.h"
24
#include "test/mocks/upstream/transport_socket_match.h"
25
26
#include "gmock/gmock.h"
27
#include "gtest/gtest.h"
28
29
using testing::NiceMock;
30
31
namespace Envoy {
32
namespace Http {
33
class FilterChainManager;
34
}
35
36
namespace Upstream {
37
38
// While this mock class doesn't have any direct use in public Envoy tests, it's
39
// useful for constructing tests of downstream private filters that use
40
// ClusterTypedMetadata.
41
class MockClusterTypedMetadata : public Config::TypedMetadataImpl<ClusterTypedMetadataFactory> {
42
public:
43
  using Config::TypedMetadataImpl<ClusterTypedMetadataFactory>::TypedMetadataImpl;
44
45
0
  void inject(const std::string& key, std::unique_ptr<const TypedMetadata::Object> value) {
46
0
    data_[key] = std::move(value);
47
0
  }
48
49
0
  absl::node_hash_map<std::string, std::unique_ptr<const TypedMetadata::Object>>& data() {
50
0
    return data_;
51
0
  }
52
};
53
54
class MockUpstreamLocalAddressSelector : public UpstreamLocalAddressSelector {
55
public:
56
  MockUpstreamLocalAddressSelector(Network::Address::InstanceConstSharedPtr& address);
57
58
  MOCK_METHOD(UpstreamLocalAddress, getUpstreamLocalAddressImpl,
59
              (const Network::Address::InstanceConstSharedPtr& address), (const));
60
61
  Network::Address::InstanceConstSharedPtr& address_;
62
};
63
64
class MockUpstreamLocalAddressSelectorFactory : public UpstreamLocalAddressSelectorFactory {
65
public:
66
  MOCK_METHOD(absl::StatusOr<UpstreamLocalAddressSelectorConstSharedPtr>,
67
              createLocalAddressSelector,
68
              (std::vector<::Envoy::Upstream::UpstreamLocalAddress> upstream_local_addresses,
69
               absl::optional<std::string> cluster_name),
70
              (const));
71
72
0
  ProtobufTypes::MessagePtr createEmptyConfigProto() override {
73
0
    return std::make_unique<ProtobufWkt::Empty>();
74
0
  }
75
76
0
  std::string name() const override { return "mock.upstream.local.address.selector"; }
77
};
78
79
class MockClusterInfo : public ClusterInfo {
80
public:
81
  MockClusterInfo();
82
  ~MockClusterInfo() override;
83
84
  void resetResourceManager(uint64_t cx, uint64_t rq_pending, uint64_t rq, uint64_t rq_retry,
85
0
                            uint64_t conn_pool, uint64_t conn_per_host = 100) {
86
0
    resource_manager_ = std::make_unique<ResourceManagerImpl>(
87
0
        runtime_, name_, cx, rq_pending, rq, rq_retry, conn_pool, conn_per_host,
88
0
        circuit_breakers_stats_, absl::nullopt, absl::nullopt);
89
0
  }
90
91
  void resetResourceManagerWithRetryBudget(uint64_t cx, uint64_t rq_pending, uint64_t rq,
92
                                           uint64_t rq_retry, uint64_t conn_pool,
93
                                           double budget_percent, uint32_t min_retry_concurrency,
94
0
                                           uint64_t conn_per_host = 100) {
95
0
    resource_manager_ = std::make_unique<ResourceManagerImpl>(
96
0
        runtime_, name_, cx, rq_pending, rq, rq_retry, conn_pool, conn_per_host,
97
0
        circuit_breakers_stats_, budget_percent, min_retry_concurrency);
98
0
  }
99
100
  // Upstream::ClusterInfo
101
  MOCK_METHOD(bool, addedViaApi, (), (const));
102
  MOCK_METHOD(std::chrono::milliseconds, connectTimeout, (), (const));
103
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, idleTimeout, (), (const));
104
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, tcpPoolIdleTimeout, (), (const));
105
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, maxConnectionDuration, (), (const));
106
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, maxStreamDuration, (), (const));
107
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, grpcTimeoutHeaderMax, (), (const));
108
  MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, grpcTimeoutHeaderOffset, (),
109
              (const));
110
  MOCK_METHOD(float, perUpstreamPreconnectRatio, (), (const));
111
  MOCK_METHOD(float, peekaheadRatio, (), (const));
112
  MOCK_METHOD(uint32_t, perConnectionBufferLimitBytes, (), (const));
113
  MOCK_METHOD(uint64_t, features, (), (const));
114
  MOCK_METHOD(const Http::Http1Settings&, http1Settings, (), (const));
115
  MOCK_METHOD(const envoy::config::core::v3::Http2ProtocolOptions&, http2Options, (), (const));
116
  MOCK_METHOD(const envoy::config::core::v3::Http3ProtocolOptions&, http3Options, (), (const));
117
  MOCK_METHOD(const envoy::config::core::v3::HttpProtocolOptions&, commonHttpProtocolOptions, (),
118
              (const));
119
  MOCK_METHOD(ProtocolOptionsConfigConstSharedPtr, extensionProtocolOptions, (const std::string&),
120
              (const));
121
  MOCK_METHOD(OptRef<const LoadBalancerConfig>, loadBalancerConfig, (), (const));
122
  MOCK_METHOD(TypedLoadBalancerFactory&, loadBalancerFactory, (), (const));
123
  MOCK_METHOD(const envoy::config::cluster::v3::Cluster::CommonLbConfig&, lbConfig, (), (const));
124
  MOCK_METHOD(envoy::config::cluster::v3::Cluster::DiscoveryType, type, (), (const));
125
  MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::CustomClusterType>, clusterType, (),
126
              (const));
127
  MOCK_METHOD(OptRef<const envoy::config::core::v3::TypedExtensionConfig>, upstreamConfig, (),
128
              (const));
129
  MOCK_METHOD(bool, maintenanceMode, (), (const));
130
  MOCK_METHOD(uint32_t, maxResponseHeadersCount, (), (const));
131
  MOCK_METHOD(uint64_t, maxRequestsPerConnection, (), (const));
132
  MOCK_METHOD(const std::string&, name, (), (const));
133
  MOCK_METHOD(const std::string&, observabilityName, (), (const));
134
  MOCK_METHOD(ResourceManager&, resourceManager, (ResourcePriority priority), (const));
135
  MOCK_METHOD(TransportSocketMatcher&, transportSocketMatcher, (), (const));
136
  MOCK_METHOD(DeferredCreationCompatibleClusterTrafficStats&, trafficStats, (), (const));
137
  MOCK_METHOD(ClusterLbStats&, lbStats, (), (const));
138
  MOCK_METHOD(ClusterEndpointStats&, endpointStats, (), (const));
139
  MOCK_METHOD(ClusterConfigUpdateStats&, configUpdateStats, (), (const));
140
  MOCK_METHOD(Stats::Scope&, statsScope, (), (const));
141
  MOCK_METHOD(ClusterLoadReportStats&, loadReportStats, (), (const));
142
  MOCK_METHOD(ClusterRequestResponseSizeStatsOptRef, requestResponseSizeStats, (), (const));
143
  MOCK_METHOD(ClusterTimeoutBudgetStatsOptRef, timeoutBudgetStats, (), (const));
144
  MOCK_METHOD(bool, perEndpointStatsEnabled, (), (const));
145
  MOCK_METHOD(UpstreamLocalAddressSelectorConstSharedPtr, getUpstreamLocalAddressSelector, (),
146
              (const));
147
  MOCK_METHOD(const envoy::config::core::v3::Metadata&, metadata, (), (const));
148
  MOCK_METHOD(const Envoy::Config::TypedMetadata&, typedMetadata, (), (const));
149
  MOCK_METHOD(bool, drainConnectionsOnHostRemoval, (), (const));
150
  MOCK_METHOD(bool, connectionPoolPerDownstreamConnection, (), (const));
151
  MOCK_METHOD(bool, warmHosts, (), (const));
152
  MOCK_METHOD(bool, setLocalInterfaceNameOnUpstreamConnections, (), (const));
153
  MOCK_METHOD(const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions>&,
154
              upstreamHttpProtocolOptions, (), (const));
155
  MOCK_METHOD(const absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions>&,
156
              alternateProtocolsCacheOptions, (), (const));
157
  MOCK_METHOD(const std::string&, edsServiceName, (), (const));
158
  MOCK_METHOD(void, createNetworkFilterChain, (Network::Connection&), (const));
159
  MOCK_METHOD(std::vector<Http::Protocol>, upstreamHttpProtocol, (absl::optional<Http::Protocol>),
160
              (const));
161
162
  MOCK_METHOD(bool, createFilterChain,
163
              (Http::FilterChainManager & manager, bool only_create_if_configured,
164
               const Http::FilterChainOptions& options),
165
              (const, override));
166
  MOCK_METHOD(bool, createUpgradeFilterChain,
167
              (absl::string_view upgrade_type,
168
               const Http::FilterChainFactory::UpgradeMap* upgrade_map,
169
               Http::FilterChainManager& manager, const Http::FilterChainOptions&),
170
              (const));
171
  MOCK_METHOD(Http::ClientHeaderValidatorPtr, makeHeaderValidator, (Http::Protocol), (const));
172
  MOCK_METHOD(
173
      OptRef<const envoy::config::cluster::v3::UpstreamConnectionOptions::HappyEyeballsConfig>,
174
      happyEyeballsConfig, (), (const));
175
  MOCK_METHOD(OptRef<const std::vector<std::string>>, lrsReportMetricNames, (), (const));
176
  ::Envoy::Http::HeaderValidatorStats& codecStats(Http::Protocol protocol) const;
177
  Http::Http1::CodecStats& http1CodecStats() const override;
178
  Http::Http2::CodecStats& http2CodecStats() const override;
179
  Http::Http3::CodecStats& http3CodecStats() const override;
180
181
  std::string name_{"fake_cluster"};
182
  std::string observability_name_{"observability_name"};
183
  absl::optional<std::string> eds_service_name_;
184
  Http::Http1Settings http1_settings_;
185
  envoy::config::core::v3::Http2ProtocolOptions http2_options_;
186
  envoy::config::core::v3::Http3ProtocolOptions http3_options_;
187
  envoy::config::core::v3::HttpProtocolOptions common_http_protocol_options_;
188
  ProtocolOptionsConfigConstSharedPtr extension_protocol_options_;
189
  uint64_t max_requests_per_connection_{};
190
  uint32_t max_response_headers_count_{Http::DEFAULT_MAX_HEADERS_COUNT};
191
  NiceMock<Stats::MockIsolatedStatsStore> stats_store_;
192
  ClusterTrafficStatNames traffic_stat_names_;
193
  ClusterConfigUpdateStatNames config_update_stats_names_;
194
  ClusterLbStatNames lb_stat_names_;
195
  ClusterEndpointStatNames endpoint_stat_names_;
196
  ClusterLoadReportStatNames cluster_load_report_stat_names_;
197
  ClusterCircuitBreakersStatNames cluster_circuit_breakers_stat_names_;
198
  ClusterRequestResponseSizeStatNames cluster_request_response_size_stat_names_;
199
  ClusterTimeoutBudgetStatNames cluster_timeout_budget_stat_names_;
200
  mutable DeferredCreationCompatibleClusterTrafficStats traffic_stats_;
201
  ClusterConfigUpdateStats config_update_stats_;
202
  ClusterLbStats lb_stats_;
203
  ClusterEndpointStats endpoint_stats_;
204
  Upstream::TransportSocketMatcherPtr transport_socket_matcher_;
205
  NiceMock<Stats::MockIsolatedStatsStore> load_report_stats_store_;
206
  ClusterLoadReportStats load_report_stats_;
207
  NiceMock<Stats::MockIsolatedStatsStore> request_response_size_stats_store_;
208
  ClusterRequestResponseSizeStatsPtr request_response_size_stats_;
209
  NiceMock<Stats::MockIsolatedStatsStore> timeout_budget_stats_store_;
210
  ClusterTimeoutBudgetStatsPtr timeout_budget_stats_;
211
  ClusterCircuitBreakersStats circuit_breakers_stats_;
212
  NiceMock<Runtime::MockLoader> runtime_;
213
  std::unique_ptr<Upstream::ResourceManager> resource_manager_;
214
  Network::Address::InstanceConstSharedPtr source_address_;
215
  std::shared_ptr<MockUpstreamLocalAddressSelector> upstream_local_address_selector_;
216
  envoy::config::cluster::v3::Cluster::DiscoveryType type_{
217
      envoy::config::cluster::v3::Cluster::STRICT_DNS};
218
  std::unique_ptr<const envoy::config::cluster::v3::Cluster::CustomClusterType> cluster_type_;
219
  absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions>
220
      upstream_http_protocol_options_;
221
  absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions>
222
      alternate_protocols_cache_options_;
223
  Upstream::TypedLoadBalancerFactory* lb_factory_ =
224
      Config::Utility::getFactoryByName<Upstream::TypedLoadBalancerFactory>(
225
          "envoy.load_balancing_policies.round_robin");
226
  std::unique_ptr<envoy::config::core::v3::TypedExtensionConfig> upstream_config_;
227
  Network::ConnectionSocket::OptionsSharedPtr cluster_socket_options_;
228
  envoy::config::cluster::v3::Cluster::CommonLbConfig lb_config_;
229
  envoy::config::core::v3::Metadata metadata_;
230
  std::unique_ptr<Envoy::Config::TypedMetadata> typed_metadata_;
231
  absl::optional<std::chrono::milliseconds> max_stream_duration_;
232
  Stats::ScopeSharedPtr stats_scope_;
233
  mutable Http::Http1::CodecStats::AtomicPtr http1_codec_stats_;
234
  mutable Http::Http2::CodecStats::AtomicPtr http2_codec_stats_;
235
  mutable Http::Http3::CodecStats::AtomicPtr http3_codec_stats_;
236
  Http::HeaderValidatorFactoryPtr header_validator_factory_;
237
  absl::optional<envoy::config::cluster::v3::UpstreamConnectionOptions::HappyEyeballsConfig>
238
      happy_eyeballs_config_;
239
  const std::unique_ptr<Envoy::Orca::LrsReportMetricNames> lrs_report_metric_names_;
240
};
241
242
class MockIdleTimeEnabledClusterInfo : public MockClusterInfo {
243
public:
244
  MockIdleTimeEnabledClusterInfo();
245
  ~MockIdleTimeEnabledClusterInfo() override;
246
};
247
248
class MockMaxConnectionDurationEnabledClusterInfo : public MockClusterInfo {
249
public:
250
  MockMaxConnectionDurationEnabledClusterInfo();
251
  ~MockMaxConnectionDurationEnabledClusterInfo() override;
252
};
253
254
} // namespace Upstream
255
} // namespace Envoy