/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 |