Coverage Report

Created: 2023-11-12 09:30

/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(const std::vector<Network::Address::InstanceConstSharedPtr>&, addressList, (),
87
              (const));
88
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, healthCheckAddress, (), (const));
89
  MOCK_METHOD(bool, canary, (), (const));
90
  MOCK_METHOD(void, canary, (bool new_canary));
91
  MOCK_METHOD(MetadataConstSharedPtr, metadata, (), (const));
92
  MOCK_METHOD(void, metadata, (MetadataConstSharedPtr));
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(HealthCheckHostMonitor&, healthChecker, (), (const));
97
  MOCK_METHOD(const std::string&, hostnameForHealthChecks, (), (const));
98
  MOCK_METHOD(const std::string&, hostname, (), (const));
99
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, transportSocketFactory, (), (const));
100
  MOCK_METHOD(HostStats&, stats, (), (const));
101
  MOCK_METHOD(LoadMetricStats&, loadMetricStats, (), (const));
102
  MOCK_METHOD(const envoy::config::core::v3::Locality&, locality, (), (const));
103
  MOCK_METHOD(uint32_t, priority, (), (const));
104
  MOCK_METHOD(void, priority, (uint32_t));
105
  MOCK_METHOD(absl::optional<MonotonicTime>, lastHcPassTime, (), (const));
106
0
  Stats::StatName localityZoneStatName() const override {
107
0
    Stats::SymbolTable& symbol_table = *symbol_table_;
108
0
    locality_zone_stat_name_ =
109
0
        std::make_unique<Stats::StatNameManagedStorage>(locality().zone(), symbol_table);
110
0
    return locality_zone_stat_name_->statName();
111
0
  }
112
113
  std::string hostname_;
114
  Network::Address::InstanceConstSharedPtr address_;
115
  testing::NiceMock<Outlier::MockDetectorHostMonitor> outlier_detector_;
116
  testing::NiceMock<MockHealthCheckHostMonitor> health_checker_;
117
  Network::UpstreamTransportSocketFactoryPtr socket_factory_;
118
  testing::NiceMock<MockClusterInfo> cluster_;
119
  HostStats stats_;
120
  LoadMetricStatsImpl load_metric_stats_;
121
  envoy::config::core::v3::Locality locality_;
122
  mutable Stats::TestUtil::TestSymbolTable symbol_table_;
123
  mutable std::unique_ptr<Stats::StatNameManagedStorage> locality_zone_stat_name_;
124
};
125
126
class MockHostLight : public Host {
127
public:
128
  MockHostLight();
129
  ~MockHostLight() override;
130
131
  struct MockCreateConnectionData {
132
    Network::ClientConnection* connection_{};
133
    HostDescriptionConstSharedPtr host_description_{};
134
  };
135
136
  CreateConnectionData
137
  createConnection(Event::Dispatcher& dispatcher,
138
                   const Network::ConnectionSocket::OptionsSharedPtr& options,
139
0
                   Network::TransportSocketOptionsConstSharedPtr) const override {
140
0
    MockCreateConnectionData data = createConnection_(dispatcher, options);
141
0
    return {Network::ClientConnectionPtr{data.connection_}, data.host_description_};
142
0
  }
143
144
  CreateConnectionData
145
  createHealthCheckConnection(Event::Dispatcher& dispatcher,
146
                              Network::TransportSocketOptionsConstSharedPtr,
147
0
                              const envoy::config::core::v3::Metadata*) const override {
148
0
    MockCreateConnectionData data = createConnection_(dispatcher, nullptr);
149
0
    return {Network::ClientConnectionPtr{data.connection_}, data.host_description_};
150
0
  }
151
152
0
  void setHealthChecker(HealthCheckHostMonitorPtr&& health_checker) override {
153
0
    setHealthChecker_(health_checker);
154
0
  }
155
156
0
  void setOutlierDetector(Outlier::DetectorHostMonitorPtr&& outlier_detector) override {
157
0
    setOutlierDetector_(outlier_detector);
158
0
  }
159
160
0
  void setLastHcPassTime(MonotonicTime last_hc_pass_time) override {
161
0
    setLastHcPassTime_(last_hc_pass_time);
162
0
  }
163
164
0
  bool disableActiveHealthCheck() const override { return disable_active_health_check_; }
165
0
  void setDisableActiveHealthCheck(bool disable_active_health_check) override {
166
0
    disable_active_health_check_ = disable_active_health_check;
167
0
  }
168
169
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, address, (), (const));
170
  MOCK_METHOD(const std::vector<Network::Address::InstanceConstSharedPtr>&, addressList, (),
171
              (const));
172
  MOCK_METHOD(Network::Address::InstanceConstSharedPtr, healthCheckAddress, (), (const));
173
  MOCK_METHOD(bool, canary, (), (const));
174
  MOCK_METHOD(void, canary, (bool new_canary));
175
  MOCK_METHOD(MetadataConstSharedPtr, metadata, (), (const));
176
  MOCK_METHOD(void, metadata, (MetadataConstSharedPtr));
177
  MOCK_METHOD(const ClusterInfo&, cluster, (), (const));
178
  MOCK_METHOD(bool, canCreateConnection, (Upstream::ResourcePriority), (const));
179
  MOCK_METHOD((std::vector<std::pair<absl::string_view, Stats::PrimitiveCounterReference>>),
180
              counters, (), (const));
181
  MOCK_METHOD(MockCreateConnectionData, createConnection_,
182
              (Event::Dispatcher & dispatcher,
183
               const Network::ConnectionSocket::OptionsSharedPtr& options),
184
              (const));
185
  MOCK_METHOD((std::vector<std::pair<absl::string_view, Stats::PrimitiveGaugeReference>>), gauges,
186
              (), (const));
187
  MOCK_METHOD(HealthCheckHostMonitor&, healthChecker, (), (const));
188
  MOCK_METHOD(void, healthFlagClear, (HealthFlag flag));
189
  MOCK_METHOD(bool, healthFlagGet, (HealthFlag flag), (const));
190
  MOCK_METHOD(void, healthFlagSet, (HealthFlag flag));
191
  MOCK_METHOD(uint32_t, healthFlagsGetAll, (), (const));
192
  MOCK_METHOD(void, healthFlagsSetAll, (uint32_t));
193
  MOCK_METHOD(Host::Health, coarseHealth, (), (const));
194
  MOCK_METHOD(Host::HealthStatus, healthStatus, (), (const));
195
  MOCK_METHOD(Host::HealthStatus, edsHealthStatus, (), (const));
196
  MOCK_METHOD(void, setEdsHealthStatus, (Host::HealthStatus), ());
197
198
  MOCK_METHOD(const std::string&, hostnameForHealthChecks, (), (const));
199
  MOCK_METHOD(const std::string&, hostname, (), (const));
200
  MOCK_METHOD(Network::UpstreamTransportSocketFactory&, transportSocketFactory, (), (const));
201
  MOCK_METHOD(Outlier::DetectorHostMonitor&, outlierDetector, (), (const));
202
  MOCK_METHOD(void, setHealthChecker_, (HealthCheckHostMonitorPtr & health_checker));
203
  MOCK_METHOD(void, setOutlierDetector_, (Outlier::DetectorHostMonitorPtr & outlier_detector));
204
  MOCK_METHOD(void, setLastHcPassTime_, (MonotonicTime & last_hc_pass_time));
205
  MOCK_METHOD(HostStats&, stats, (), (const));
206
  MOCK_METHOD(LoadMetricStats&, loadMetricStats, (), (const));
207
  MOCK_METHOD(uint32_t, weight, (), (const));
208
  MOCK_METHOD(void, weight, (uint32_t new_weight));
209
  MOCK_METHOD(bool, used, (), (const));
210
  MOCK_METHOD(HostHandlePtr, acquireHandle, (), (const));
211
212
  MOCK_METHOD(const envoy::config::core::v3::Locality&, locality, (), (const));
213
  MOCK_METHOD(Stats::StatName, localityZoneStatName, (), (const));
214
  MOCK_METHOD(uint32_t, priority, (), (const));
215
  MOCK_METHOD(void, priority, (uint32_t));
216
  MOCK_METHOD(bool, warmed, (), (const));
217
  MOCK_METHOD(absl::optional<MonotonicTime>, lastHcPassTime, (), (const));
218
219
  bool disable_active_health_check_ = false;
220
};
221
222
class MockHost : public MockHostLight {
223
public:
224
  MockHost();
225
  ~MockHost() override;
226
227
0
  Stats::StatName localityZoneStatName() const override {
228
0
    locality_zone_stat_name_ =
229
0
        std::make_unique<Stats::StatNameManagedStorage>(locality().zone(), *symbol_table_);
230
0
    return locality_zone_stat_name_->statName();
231
0
  }
232
233
  testing::NiceMock<MockClusterInfo> cluster_;
234
  Network::UpstreamTransportSocketFactoryPtr socket_factory_;
235
  testing::NiceMock<Outlier::MockDetectorHostMonitor> outlier_detector_;
236
  HostStats stats_;
237
  LoadMetricStatsImpl load_metric_stats_;
238
  mutable Stats::TestUtil::TestSymbolTable symbol_table_;
239
  mutable std::unique_ptr<Stats::StatNameManagedStorage> locality_zone_stat_name_;
240
};
241
242
} // namespace Upstream
243
} // namespace Envoy