1 #include <gtest/gtest.h>
3 #include "rate_controller.h"
6 TEST(initial, initially_ok) {
8 EXPECT_FALSE(dut.ServerHasFailed());
12 TEST(failure, many_errors_cause_abort) {
14 EXPECT_FALSE(dut.ServerHasFailed());
15 RateController::clock::time_point t = RateController::clock::now();
16 RateController::clock::duration interval = std::chrono::seconds(2);
17 for (
int i = 0; i < 30; i++) {
18 dut.RequestCompleted(t, t + interval,
false);
21 EXPECT_TRUE(dut.ServerHasFailed());
25 TEST(failure, continues_through_occasional_errors) {
27 EXPECT_FALSE(dut.ServerHasFailed());
28 RateController::clock::time_point t = RateController::clock::now();
29 RateController::clock::duration interval = std::chrono::seconds(2);
30 for (
int i = 0; i < 1000; i++) {
31 bool ok = i % 30 != 0;
32 dut.RequestCompleted(t, t + interval, ok);
34 EXPECT_FALSE(dut.ServerHasFailed());
39 TEST(control, good_results_improve_concurrency) {
41 RateController::clock::time_point t = RateController::clock::now();
42 RateController::clock::duration interval = std::chrono::seconds(2);
43 int initial_concurrency = dut.MaxConcurrency();
44 for (
int i = 0; i < 10; i++) {
45 dut.RequestCompleted(t, t + interval,
true);
48 EXPECT_GT(dut.MaxConcurrency(), initial_concurrency);
52 int main(
int argc,
char **argv) {
53 ::testing::InitGoogleTest(&argc, argv);
54 return RUN_ALL_TESTS();