Coverage Report

Created: 2024-09-19 09:45

/proc/self/cwd/test/mocks/upstream/host.h
Line
Count
Source (jump to first uncovered line)
1
#pragma once
2
3
#include <chrono>
4
#include <cstdint>
5
#include <list>
6
#include <string>
7
8
#include "envoy/config/core/v3/base.pb.h"
9
#include "envoy/data/cluster/v3/outlier_detection_event.pb.h"
10
#include "envoy/upstream/upstream.h"
11
12
#include "source/common/stats/symbol_table.h"
13
14
#include "test/mocks/network/transport_socket.h"
15
#include "test/mocks/upstream/cluster_info.h"
16
#include "test/test_common/global.h"
17
18
#include "gmock/gmock.h"
19
20
namespace Envoy {
21
namespace Upstream {
22
namespace Outlier {
23
24
class MockDetectorHostMonitor : public DetectorHostMonitor {
25
public:
26
  MockDetectorHostMonitor();
27
  ~MockDetectorHostMonitor() override;
28
29
  MOCK_METHOD(uint32_t, numEjections, ());
30
  MOCK_METHOD(void, putHttpResponseCode, (uint64_t code));
31
  MOCK_METHOD(void, putResult, (Result result, absl::optional<uint64_t> code));
32
  MOCK_METHOD(void, putResponseTime, (std::chrono::milliseconds time));
33
  MOCK_METHOD(const absl::optional<MonotonicTime>&, lastEjectionTime, ());
34
  MOCK_METHOD(const absl::optional<MonotonicTime>&, lastUnejectionTime, ());
35
  MOCK_METHOD(double, successRate, (DetectorHostMonitor::SuccessRateMonitorType type), (const));
36
  MOCK_METHOD(void, successRate,
37
              (DetectorHostMonitor::SuccessRateMonitorType type, double new_success_rate));
38
};
39
40
class MockEventLogger : public EventLogger {
41
public:
42
  MockEventLogger();
43
  ~MockEventLogger() override;
44
45
  MOCK_METHOD(void, logEject,
46
              (const HostDescriptionConstSharedPtr& host, Detector& detector,
47
               envoy::data::cluster::v3::OutlierEjectionType type, bool enforced));
48
  MOCK_METHOD(void, logUneject, (const HostDescriptionConstSharedPtr& host));
49
};
50
51
class MockDetector : public Detector {
52
public:
53
  MockDetector();
54
  ~MockDetector() override;
55
56
0
  void runCallbacks(HostSharedPtr host) {
57
0
    for (const ChangeStateCb& cb : callbacks_) {
58
0
      cb(host);
59
0
    }
60
0
  }
61
62
  MOCK_METHOD(void, addChangedStateCb, (ChangeStateCb cb));
63
  MOCK_METHOD(double, successRateAverage, (DetectorHostMonitor::SuccessRateMonitorType), (const));
64
  MOCK_METHOD(double, successRateEjectionThreshold, (DetectorHostMonitor::SuccessRateMonitorType),
65
              (const));
66
67
  std::list<ChangeStateCb> callbacks_;
68
};
69
70
} // namespace Outlier
71
72
class MockHealthCheckHostMonitor : public HealthCheckHostMonitor {
73
public:
74
  MockHealthCheckHostMonitor();
75
  ~MockHealthCheckHostMonitor() override;
76
77
  MOCK_METHOD(void, setUnhealthy, (UnhealthyType));
78
};
79
80
class MockHostDescription : public HostDescription {
81
public:
82
  MockHostDescription();
83
  ~MockHostDescription() override;
84
85
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, address, (), (const));
86
  MOCK_METHOD(SharedConstAddressVector, addressListOrNull, (), (const));
87
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, healthCheckAddress, (), (const));
88
  MOCK_METHOD(bool, canary, (), (const));
89
  MOCK_METHOD(void, canary, (bool new_canary));
90
  MOCK_METHOD(MetadataConstSharedPtr, metadata, (), (const));
91
  MOCK_METHOD(void, metadata, (MetadataConstSharedPtr));
92
  MOCK_METHOD(const MetadataConstSharedPtr, localityMetadata, (), (const));
93
  MOCK_METHOD(const ClusterInfo&, cluster, (), (const));
94
  MOCK_METHOD(bool, canCreateConnection, (Upstream::ResourcePriority), (const));
95
  MOCK_METHOD(Outlier::DetectorHostMonitor&, outlierDetector, (), (const));
96
  MOCK_METHOD(void, setOutlierDetector, (Outlier::DetectorHostMonitorPtr && outlier_detector));
97
  MOCK_METHOD(HealthCheckHostMonitor&, healthChecker, (), (const));
98
  MOCK_METHOD(void, setHealthChecker, (HealthCheckHostMonitorPtr && health_checker));
99
  MOCK_METHOD(const std::string&, hostnameForHealthChecks, (), (const));
100
  MOCK_METHOD(const std::string&, hostname, (), (const));
101
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, transportSocketFactory, (), (const));
102
  MOCK_METHOD(HostStats&, stats, (), (const));
103
  MOCK_METHOD(LoadMetricStats&, loadMetricStats, (), (const));
104
  MOCK_METHOD(const envoy::config::core::v3::Locality&, locality, (), (const));
105
  MOCK_METHOD(uint32_t, priority, (), (const));
106
  MOCK_METHOD(void, priority, (uint32_t));
107
  MOCK_METHOD(absl::optional<MonotonicTime>, lastHcPassTime, (), (const));
108
  MOCK_METHOD(void, setLastHcPassTime, (MonotonicTime last_hc_pass_time));
109
0
  Stats::StatName localityZoneStatName() const override {
110
0
    locality_zone_stat_name_ =
111
0
        std::make_unique<Stats::StatNameManagedStorage>(locality().zone(), *symbol_table_);
112
0
    return locality_zone_stat_name_->statName();
113
0
  }
114
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, resolveTransportSocketFactory,
115
              (const Network::Address::InstanceConstSharedPtr& dest_address,
116
               const envoy::config::core::v3::Metadata* metadata),
117
              (const));
118
119
  std::string hostname_;
120
  Network::Address::InstanceConstSharedPtr address_;
121
  testing::NiceMock<Outlier::MockDetectorHostMonitor> outlier_detector_;
122
  testing::NiceMock<MockHealthCheckHostMonitor> health_checker_;
123
  Network::UpstreamTransportSocketFactoryPtr socket_factory_;
124
  testing::NiceMock<MockClusterInfo> cluster_;
125
  HostStats stats_;
126
  LoadMetricStatsImpl load_metric_stats_;
127
  envoy::config::core::v3::Locality locality_;
128
  mutable Stats::TestUtil::TestSymbolTable symbol_table_;
129
  mutable std::unique_ptr<Stats::StatNameManagedStorage> locality_zone_stat_name_;
130
};
131
132
class MockHostLight : public Host {
133
public:
134
  MockHostLight();
135
  ~MockHostLight() override;
136
137
  struct MockCreateConnectionData {
138
    Network::ClientConnection* connection_{};
139
    HostDescriptionConstSharedPtr host_description_{};
140
  };
141
142
  CreateConnectionData
143
  createConnection(Event::Dispatcher& dispatcher,
144
                   const Network::ConnectionSocket::OptionsSharedPtr& options,
145
0
                   Network::TransportSocketOptionsConstSharedPtr) const override {
146
0
    MockCreateConnectionData data = createConnection_(dispatcher, options);
147
0
    return {Network::ClientConnectionPtr{data.connection_}, data.host_description_};
148
0
  }
149
150
  CreateConnectionData
151
  createHealthCheckConnection(Event::Dispatcher& dispatcher,
152
                              Network::TransportSocketOptionsConstSharedPtr,
153
0
                              const envoy::config::core::v3::Metadata*) const override {
154
0
    MockCreateConnectionData data = createConnection_(dispatcher, nullptr);
155
0
    return {Network::ClientConnectionPtr{data.connection_}, data.host_description_};
156
0
  }
157
158
0
  bool disableActiveHealthCheck() const override { return disable_active_health_check_; }
159
0
  void setDisableActiveHealthCheck(bool disable_active_health_check) override {
160
0
    disable_active_health_check_ = disable_active_health_check;
161
0
  }
162
163
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, address, (), (const));
164
  MOCK_METHOD(SharedConstAddressVector, addressListOrNull, (), (const));
165
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, healthCheckAddress, (), (const));
166
  MOCK_METHOD(bool, canary, (), (const));
167
  MOCK_METHOD(void, canary, (bool new_canary));
168
  MOCK_METHOD(MetadataConstSharedPtr, metadata, (), (const));
169
  MOCK_METHOD(const MetadataConstSharedPtr, localityMetadata, (), (const));
170
  MOCK_METHOD(void, metadata, (MetadataConstSharedPtr));
171
  MOCK_METHOD(const ClusterInfo&, cluster, (), (const));
172
  MOCK_METHOD(bool, canCreateConnection, (Upstream::ResourcePriority), (const));
173
  MOCK_METHOD((std::vector<std::pair<absl::string_view, Stats::PrimitiveCounterReference>>),
174
              counters, (), (const));
175
  MOCK_METHOD(MockCreateConnectionData, createConnection_,
176
              (Event::Dispatcher & dispatcher,
177
               const Network::ConnectionSocket::OptionsSharedPtr& options),
178
              (const));
179
  MOCK_METHOD((std::vector<std::pair<absl::string_view, Stats::PrimitiveGaugeReference>>), gauges,
180
              (), (const));
181
  MOCK_METHOD(HealthCheckHostMonitor&, healthChecker, (), (const));
182
  MOCK_METHOD(void, healthFlagClear, (HealthFlag flag));
183
  MOCK_METHOD(bool, healthFlagGet, (HealthFlag flag), (const));
184
  MOCK_METHOD(void, healthFlagSet, (HealthFlag flag));
185
  MOCK_METHOD(uint32_t, healthFlagsGetAll, (), (const));
186
  MOCK_METHOD(void, healthFlagsSetAll, (uint32_t));
187
  MOCK_METHOD(Host::Health, coarseHealth, (), (const));
188
  MOCK_METHOD(Host::HealthStatus, healthStatus, (), (const));
189
  MOCK_METHOD(Host::HealthStatus, edsHealthStatus, (), (const));
190
  MOCK_METHOD(void, setEdsHealthStatus, (Host::HealthStatus), ());
191
192
  MOCK_METHOD(const std::string&, hostnameForHealthChecks, (), (const));
193
  MOCK_METHOD(const std::string&, hostname, (), (const));
194
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, transportSocketFactory, (), (const));
195
  MOCK_METHOD(Outlier::DetectorHostMonitor&, outlierDetector, (), (const));
196
  MOCK_METHOD(void, setHealthChecker, (HealthCheckHostMonitorPtr && health_checker));
197
  MOCK_METHOD(void, setOutlierDetector, (Outlier::DetectorHostMonitorPtr && outlier_detector));
198
  MOCK_METHOD(void, setLastHcPassTime, (MonotonicTime last_hc_pass_time));
199
  MOCK_METHOD(HostStats&, stats, (), (const));
200
  MOCK_METHOD(LoadMetricStats&, loadMetricStats, (), (const));
201
  MOCK_METHOD(uint32_t, weight, (), (const));
202
  MOCK_METHOD(void, weight, (uint32_t new_weight));
203
  MOCK_METHOD(bool, used, (), (const));
204
  MOCK_METHOD(HostHandlePtr, acquireHandle, (), (const));
205
206
  MOCK_METHOD(const envoy::config::core::v3::Locality&, locality, (), (const));
207
  MOCK_METHOD(Stats::StatName, localityZoneStatName, (), (const));
208
  MOCK_METHOD(uint32_t, priority, (), (const));
209
  MOCK_METHOD(void, priority, (uint32_t));
210
  MOCK_METHOD(bool, warmed, (), (const));
211
  MOCK_METHOD(absl::optional<MonotonicTime>, lastHcPassTime, (), (const));
212
  MOCK_METHOD(void, setLbPolicyData, (HostLbPolicyDataPtr lb_policy_data));
213
  MOCK_METHOD(const HostLbPolicyDataPtr&, lbPolicyData, (), (const));
214
215
  bool disable_active_health_check_ = false;
216
};
217
218
class MockHost : public MockHostLight {
219
public:
220
  MockHost();
221
  ~MockHost() override;
222
223
0
  Stats::StatName localityZoneStatName() const override {
224
0
    locality_zone_stat_name_ =
225
0
        std::make_unique<Stats::StatNameManagedStorage>(locality().zone(), *symbol_table_);
226
0
    return locality_zone_stat_name_->statName();
227
0
  }
228
229
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, resolveTransportSocketFactory,
230
              (const Network::Address::InstanceConstSharedPtr& dest_address,
231
               const envoy::config::core::v3::Metadata* metadata),
232
              (const));
233
234
  testing::NiceMock<MockClusterInfo> cluster_;
235
  Network::UpstreamTransportSocketFactoryPtr socket_factory_;
236
  testing::NiceMock<Outlier::MockDetectorHostMonitor> outlier_detector_;
237
  HostStats stats_;
238
  LoadMetricStatsImpl load_metric_stats_;
239
  mutable Stats::TestUtil::TestSymbolTable symbol_table_;
240
  mutable std::unique_ptr<Stats::StatNameManagedStorage> locality_zone_stat_name_;
241
};
242
243
} // namespace Upstream
244
} // namespace Envoy