Aktualizr
C++ SOTA Client
All Classes Namespaces Files Functions Variables Enumerations Enumerator Pages
rate_controller_test.cc
1 #include <gtest/gtest.h>
2 
3 #include "rate_controller.h"
4 
5 /* Initial rate controller status is good. */
6 TEST(initial, initially_ok) {
7  RateController dut;
8  EXPECT_FALSE(dut.ServerHasFailed());
9 }
10 
11 /* Rate controller aborts if it detects server or network failure. */
12 TEST(failure, many_errors_cause_abort) {
13  RateController dut;
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);
19  t += interval;
20  }
21  EXPECT_TRUE(dut.ServerHasFailed());
22 }
23 
24 /* Rate controller continues through intermittent errors. */
25 TEST(failure, continues_through_occasional_errors) {
26  RateController dut;
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);
33  t += interval;
34  EXPECT_FALSE(dut.ServerHasFailed());
35  }
36 }
37 
38 /* Rate controller improves concurrency when network conditions are good. */
39 TEST(control, good_results_improve_concurrency) {
40  RateController dut;
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);
46  t += interval;
47  }
48  EXPECT_GT(dut.MaxConcurrency(), initial_concurrency);
49 }
50 
51 #ifndef __NO_MAIN__
52 int main(int argc, char **argv) {
53  ::testing::InitGoogleTest(&argc, argv);
54  return RUN_ALL_TESTS();
55 }
56 #endif
RateController
Control the rate of outgoing requests.
Definition: rate_controller.h:16