/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 | | class MockLoadBalancerSubsetInfo : public LoadBalancerSubsetInfo { |
39 | | public: |
40 | | MockLoadBalancerSubsetInfo(); |
41 | | ~MockLoadBalancerSubsetInfo() override; |
42 | | |
43 | | // Upstream::LoadBalancerSubsetInfo |
44 | | MOCK_METHOD(bool, isEnabled, (), (const)); |
45 | | MOCK_METHOD(envoy::config::cluster::v3::Cluster::LbSubsetConfig::LbSubsetFallbackPolicy, |
46 | | fallbackPolicy, (), (const)); |
47 | | MOCK_METHOD(envoy::config::cluster::v3::Cluster::LbSubsetConfig::LbSubsetMetadataFallbackPolicy, |
48 | | metadataFallbackPolicy, (), (const)); |
49 | | MOCK_METHOD(const ProtobufWkt::Struct&, defaultSubset, (), (const)); |
50 | | MOCK_METHOD(const std::vector<SubsetSelectorPtr>&, subsetSelectors, (), (const)); |
51 | | MOCK_METHOD(bool, localityWeightAware, (), (const)); |
52 | | MOCK_METHOD(bool, scaleLocalityWeight, (), (const)); |
53 | | MOCK_METHOD(bool, panicModeAny, (), (const)); |
54 | | MOCK_METHOD(bool, listAsAny, (), (const)); |
55 | | MOCK_METHOD(bool, allowRedundantKeys, (), (const)); |
56 | | |
57 | | std::vector<SubsetSelectorPtr> subset_selectors_; |
58 | | }; |
59 | | |
60 | | // While this mock class doesn't have any direct use in public Envoy tests, it's |
61 | | // useful for constructing tests of downstream private filters that use |
62 | | // ClusterTypedMetadata. |
63 | | class MockClusterTypedMetadata : public Config::TypedMetadataImpl<ClusterTypedMetadataFactory> { |
64 | | public: |
65 | | using Config::TypedMetadataImpl<ClusterTypedMetadataFactory>::TypedMetadataImpl; |
66 | | |
67 | 0 | void inject(const std::string& key, std::unique_ptr<const TypedMetadata::Object> value) { |
68 | 0 | data_[key] = std::move(value); |
69 | 0 | } |
70 | | |
71 | 0 | absl::node_hash_map<std::string, std::unique_ptr<const TypedMetadata::Object>>& data() { |
72 | 0 | return data_; |
73 | 0 | } |
74 | | }; |
75 | | |
76 | | class MockUpstreamLocalAddressSelector : public UpstreamLocalAddressSelector { |
77 | | public: |
78 | | MockUpstreamLocalAddressSelector(Network::Address::InstanceConstSharedPtr& address); |
79 | | |
80 | | MOCK_METHOD(UpstreamLocalAddress, getUpstreamLocalAddressImpl, |
81 | | (const Network::Address::InstanceConstSharedPtr& address), (const)); |
82 | | |
83 | | Network::Address::InstanceConstSharedPtr& address_; |
84 | | }; |
85 | | |
86 | | class MockUpstreamLocalAddressSelectorFactory : public UpstreamLocalAddressSelectorFactory { |
87 | | public: |
88 | | MOCK_METHOD(UpstreamLocalAddressSelectorConstSharedPtr, createLocalAddressSelector, |
89 | | (std::vector<::Envoy::Upstream::UpstreamLocalAddress> upstream_local_addresses, |
90 | | absl::optional<std::string> cluster_name), |
91 | | (const)); |
92 | | |
93 | 0 | ProtobufTypes::MessagePtr createEmptyConfigProto() override { |
94 | 0 | return std::make_unique<ProtobufWkt::Empty>(); |
95 | 0 | } |
96 | | |
97 | 0 | std::string name() const override { return "mock.upstream.local.address.selector"; } |
98 | | }; |
99 | | |
100 | | class MockClusterInfo : public ClusterInfo { |
101 | | public: |
102 | | MockClusterInfo(); |
103 | | ~MockClusterInfo() override; |
104 | | |
105 | | void resetResourceManager(uint64_t cx, uint64_t rq_pending, uint64_t rq, uint64_t rq_retry, |
106 | 0 | uint64_t conn_pool, uint64_t conn_per_host = 100) { |
107 | 0 | resource_manager_ = std::make_unique<ResourceManagerImpl>( |
108 | 0 | runtime_, name_, cx, rq_pending, rq, rq_retry, conn_pool, conn_per_host, |
109 | 0 | circuit_breakers_stats_, absl::nullopt, absl::nullopt); |
110 | 0 | } |
111 | | |
112 | | void resetResourceManagerWithRetryBudget(uint64_t cx, uint64_t rq_pending, uint64_t rq, |
113 | | uint64_t rq_retry, uint64_t conn_pool, |
114 | | double budget_percent, uint32_t min_retry_concurrency, |
115 | 0 | uint64_t conn_per_host = 100) { |
116 | 0 | resource_manager_ = std::make_unique<ResourceManagerImpl>( |
117 | 0 | runtime_, name_, cx, rq_pending, rq, rq_retry, conn_pool, conn_per_host, |
118 | 0 | circuit_breakers_stats_, budget_percent, min_retry_concurrency); |
119 | 0 | } |
120 | | |
121 | | // Upstream::ClusterInfo |
122 | | MOCK_METHOD(bool, addedViaApi, (), (const)); |
123 | | MOCK_METHOD(std::chrono::milliseconds, connectTimeout, (), (const)); |
124 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, idleTimeout, (), (const)); |
125 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, tcpPoolIdleTimeout, (), (const)); |
126 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, maxConnectionDuration, (), (const)); |
127 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, maxStreamDuration, (), (const)); |
128 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, grpcTimeoutHeaderMax, (), (const)); |
129 | | MOCK_METHOD(const absl::optional<std::chrono::milliseconds>, grpcTimeoutHeaderOffset, (), |
130 | | (const)); |
131 | | MOCK_METHOD(float, perUpstreamPreconnectRatio, (), (const)); |
132 | | MOCK_METHOD(float, peekaheadRatio, (), (const)); |
133 | | MOCK_METHOD(uint32_t, perConnectionBufferLimitBytes, (), (const)); |
134 | | MOCK_METHOD(uint64_t, features, (), (const)); |
135 | | MOCK_METHOD(const Http::Http1Settings&, http1Settings, (), (const)); |
136 | | MOCK_METHOD(const envoy::config::core::v3::Http2ProtocolOptions&, http2Options, (), (const)); |
137 | | MOCK_METHOD(const envoy::config::core::v3::Http3ProtocolOptions&, http3Options, (), (const)); |
138 | | MOCK_METHOD(const envoy::config::core::v3::HttpProtocolOptions&, commonHttpProtocolOptions, (), |
139 | | (const)); |
140 | | MOCK_METHOD(ProtocolOptionsConfigConstSharedPtr, extensionProtocolOptions, (const std::string&), |
141 | | (const)); |
142 | | MOCK_METHOD(OptRef<const LoadBalancerConfig>, loadBalancerConfig, (), (const)); |
143 | | MOCK_METHOD(TypedLoadBalancerFactory*, loadBalancerFactory, (), (const)); |
144 | | MOCK_METHOD(const envoy::config::cluster::v3::Cluster::CommonLbConfig&, lbConfig, (), (const)); |
145 | | MOCK_METHOD(LoadBalancerType, lbType, (), (const)); |
146 | | MOCK_METHOD(envoy::config::cluster::v3::Cluster::DiscoveryType, type, (), (const)); |
147 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::CustomClusterType>, clusterType, (), |
148 | | (const)); |
149 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::RingHashLbConfig>, lbRingHashConfig, |
150 | | (), (const)); |
151 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::MaglevLbConfig>, lbMaglevConfig, (), |
152 | | (const)); |
153 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::RoundRobinLbConfig>, |
154 | | lbRoundRobinConfig, (), (const)); |
155 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::LeastRequestLbConfig>, |
156 | | lbLeastRequestConfig, (), (const)); |
157 | | MOCK_METHOD(OptRef<const envoy::config::cluster::v3::Cluster::OriginalDstLbConfig>, |
158 | | lbOriginalDstConfig, (), (const)); |
159 | | MOCK_METHOD(OptRef<const envoy::config::core::v3::TypedExtensionConfig>, upstreamConfig, (), |
160 | | (const)); |
161 | | MOCK_METHOD(bool, maintenanceMode, (), (const)); |
162 | | MOCK_METHOD(uint32_t, maxResponseHeadersCount, (), (const)); |
163 | | MOCK_METHOD(uint64_t, maxRequestsPerConnection, (), (const)); |
164 | | MOCK_METHOD(const std::string&, name, (), (const)); |
165 | | MOCK_METHOD(const std::string&, observabilityName, (), (const)); |
166 | | MOCK_METHOD(ResourceManager&, resourceManager, (ResourcePriority priority), (const)); |
167 | | MOCK_METHOD(TransportSocketMatcher&, transportSocketMatcher, (), (const)); |
168 | | MOCK_METHOD(DeferredCreationCompatibleClusterTrafficStats&, trafficStats, (), (const)); |
169 | | MOCK_METHOD(ClusterLbStats&, lbStats, (), (const)); |
170 | | MOCK_METHOD(ClusterEndpointStats&, endpointStats, (), (const)); |
171 | | MOCK_METHOD(ClusterConfigUpdateStats&, configUpdateStats, (), (const)); |
172 | | MOCK_METHOD(Stats::Scope&, statsScope, (), (const)); |
173 | | MOCK_METHOD(ClusterLoadReportStats&, loadReportStats, (), (const)); |
174 | | MOCK_METHOD(ClusterRequestResponseSizeStatsOptRef, requestResponseSizeStats, (), (const)); |
175 | | MOCK_METHOD(ClusterTimeoutBudgetStatsOptRef, timeoutBudgetStats, (), (const)); |
176 | | MOCK_METHOD(bool, perEndpointStatsEnabled, (), (const)); |
177 | | MOCK_METHOD(UpstreamLocalAddressSelectorConstSharedPtr, getUpstreamLocalAddressSelector, (), |
178 | | (const)); |
179 | | MOCK_METHOD(const LoadBalancerSubsetInfo&, lbSubsetInfo, (), (const)); |
180 | | MOCK_METHOD(const envoy::config::core::v3::Metadata&, metadata, (), (const)); |
181 | | MOCK_METHOD(const Envoy::Config::TypedMetadata&, typedMetadata, (), (const)); |
182 | | MOCK_METHOD(bool, drainConnectionsOnHostRemoval, (), (const)); |
183 | | MOCK_METHOD(bool, connectionPoolPerDownstreamConnection, (), (const)); |
184 | | MOCK_METHOD(bool, warmHosts, (), (const)); |
185 | | MOCK_METHOD(bool, setLocalInterfaceNameOnUpstreamConnections, (), (const)); |
186 | | MOCK_METHOD(const absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions>&, |
187 | | upstreamHttpProtocolOptions, (), (const)); |
188 | | MOCK_METHOD(const absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions>&, |
189 | | alternateProtocolsCacheOptions, (), (const)); |
190 | | MOCK_METHOD(const std::string&, edsServiceName, (), (const)); |
191 | | MOCK_METHOD(void, createNetworkFilterChain, (Network::Connection&), (const)); |
192 | | MOCK_METHOD(std::vector<Http::Protocol>, upstreamHttpProtocol, (absl::optional<Http::Protocol>), |
193 | | (const)); |
194 | | |
195 | | MOCK_METHOD(bool, createFilterChain, |
196 | | (Http::FilterChainManager & manager, bool only_create_if_configured, |
197 | | const Http::FilterChainOptions& options), |
198 | | (const, override)); |
199 | | MOCK_METHOD(bool, createUpgradeFilterChain, |
200 | | (absl::string_view upgrade_type, |
201 | | const Http::FilterChainFactory::UpgradeMap* upgrade_map, |
202 | | Http::FilterChainManager& manager), |
203 | | (const)); |
204 | | MOCK_METHOD(Http::ClientHeaderValidatorPtr, makeHeaderValidator, (Http::Protocol), (const)); |
205 | | |
206 | | ::Envoy::Http::HeaderValidatorStats& codecStats(Http::Protocol protocol) const; |
207 | | Http::Http1::CodecStats& http1CodecStats() const override; |
208 | | Http::Http2::CodecStats& http2CodecStats() const override; |
209 | | Http::Http3::CodecStats& http3CodecStats() const override; |
210 | | |
211 | | std::string name_{"fake_cluster"}; |
212 | | std::string observability_name_{"observability_name"}; |
213 | | absl::optional<std::string> eds_service_name_; |
214 | | Http::Http1Settings http1_settings_; |
215 | | envoy::config::core::v3::Http2ProtocolOptions http2_options_; |
216 | | envoy::config::core::v3::Http3ProtocolOptions http3_options_; |
217 | | envoy::config::core::v3::HttpProtocolOptions common_http_protocol_options_; |
218 | | ProtocolOptionsConfigConstSharedPtr extension_protocol_options_; |
219 | | uint64_t max_requests_per_connection_{}; |
220 | | uint32_t max_response_headers_count_{Http::DEFAULT_MAX_HEADERS_COUNT}; |
221 | | NiceMock<Stats::MockIsolatedStatsStore> stats_store_; |
222 | | ClusterTrafficStatNames traffic_stat_names_; |
223 | | ClusterConfigUpdateStatNames config_update_stats_names_; |
224 | | ClusterLbStatNames lb_stat_names_; |
225 | | ClusterEndpointStatNames endpoint_stat_names_; |
226 | | ClusterLoadReportStatNames cluster_load_report_stat_names_; |
227 | | ClusterCircuitBreakersStatNames cluster_circuit_breakers_stat_names_; |
228 | | ClusterRequestResponseSizeStatNames cluster_request_response_size_stat_names_; |
229 | | ClusterTimeoutBudgetStatNames cluster_timeout_budget_stat_names_; |
230 | | mutable DeferredCreationCompatibleClusterTrafficStats traffic_stats_; |
231 | | ClusterConfigUpdateStats config_update_stats_; |
232 | | ClusterLbStats lb_stats_; |
233 | | ClusterEndpointStats endpoint_stats_; |
234 | | Upstream::TransportSocketMatcherPtr transport_socket_matcher_; |
235 | | NiceMock<Stats::MockIsolatedStatsStore> load_report_stats_store_; |
236 | | ClusterLoadReportStats load_report_stats_; |
237 | | NiceMock<Stats::MockIsolatedStatsStore> request_response_size_stats_store_; |
238 | | ClusterRequestResponseSizeStatsPtr request_response_size_stats_; |
239 | | NiceMock<Stats::MockIsolatedStatsStore> timeout_budget_stats_store_; |
240 | | ClusterTimeoutBudgetStatsPtr timeout_budget_stats_; |
241 | | ClusterCircuitBreakersStats circuit_breakers_stats_; |
242 | | NiceMock<Runtime::MockLoader> runtime_; |
243 | | std::unique_ptr<Upstream::ResourceManager> resource_manager_; |
244 | | Network::Address::InstanceConstSharedPtr source_address_; |
245 | | std::shared_ptr<MockUpstreamLocalAddressSelector> upstream_local_address_selector_; |
246 | | LoadBalancerType lb_type_{LoadBalancerType::RoundRobin}; |
247 | | envoy::config::cluster::v3::Cluster::DiscoveryType type_{ |
248 | | envoy::config::cluster::v3::Cluster::STRICT_DNS}; |
249 | | std::unique_ptr<const envoy::config::cluster::v3::Cluster::CustomClusterType> cluster_type_; |
250 | | NiceMock<MockLoadBalancerSubsetInfo> lb_subset_; |
251 | | absl::optional<envoy::config::core::v3::UpstreamHttpProtocolOptions> |
252 | | upstream_http_protocol_options_; |
253 | | absl::optional<const envoy::config::core::v3::AlternateProtocolsCacheOptions> |
254 | | alternate_protocols_cache_options_; |
255 | | std::unique_ptr<const envoy::config::cluster::v3::Cluster::RoundRobinLbConfig> |
256 | | lb_round_robin_config_; |
257 | | std::unique_ptr<const envoy::config::cluster::v3::Cluster::RingHashLbConfig> lb_ring_hash_config_; |
258 | | std::unique_ptr<const envoy::config::cluster::v3::Cluster::MaglevLbConfig> lb_maglev_config_; |
259 | | std::unique_ptr<const envoy::config::cluster::v3::Cluster::OriginalDstLbConfig> |
260 | | lb_original_dst_config_; |
261 | | std::unique_ptr<envoy::config::core::v3::TypedExtensionConfig> upstream_config_; |
262 | | Network::ConnectionSocket::OptionsSharedPtr cluster_socket_options_; |
263 | | envoy::config::cluster::v3::Cluster::CommonLbConfig lb_config_; |
264 | | envoy::config::core::v3::Metadata metadata_; |
265 | | std::unique_ptr<Envoy::Config::TypedMetadata> typed_metadata_; |
266 | | absl::optional<std::chrono::milliseconds> max_stream_duration_; |
267 | | Stats::ScopeSharedPtr stats_scope_; |
268 | | mutable Http::Http1::CodecStats::AtomicPtr http1_codec_stats_; |
269 | | mutable Http::Http2::CodecStats::AtomicPtr http2_codec_stats_; |
270 | | mutable Http::Http3::CodecStats::AtomicPtr http3_codec_stats_; |
271 | | Http::HeaderValidatorFactoryPtr header_validator_factory_; |
272 | | }; |
273 | | |
274 | | class MockIdleTimeEnabledClusterInfo : public MockClusterInfo { |
275 | | public: |
276 | | MockIdleTimeEnabledClusterInfo(); |
277 | | ~MockIdleTimeEnabledClusterInfo() override; |
278 | | }; |
279 | | |
280 | | class MockMaxConnectionDurationEnabledClusterInfo : public MockClusterInfo { |
281 | | public: |
282 | | MockMaxConnectionDurationEnabledClusterInfo(); |
283 | | ~MockMaxConnectionDurationEnabledClusterInfo() override; |
284 | | }; |
285 | | |
286 | | } // namespace Upstream |
287 | | } // namespace Envoy |