1d7c04fe874b3fa60d6315336ca760c7429315bb
[folly.git] / folly / io / async / test / AsyncTimeoutTest.cpp
1 /*
2  * Copyright 2017 Facebook, Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <folly/io/async/AsyncTimeout.h>
18 #include <folly/io/async/EventBase.h>
19 #include <folly/portability/GTest.h>
20
21 namespace folly {
22
23 TEST(AsyncTimeout, make) {
24   int value = 0;
25   int const expected = 10;
26   EventBase manager;
27
28   auto observer = AsyncTimeout::make(
29     manager,
30     [&]() noexcept { value = expected; }
31   );
32
33   observer->scheduleTimeout(std::chrono::milliseconds(100));
34
35   manager.loop();
36
37   EXPECT_EQ(expected, value);
38 }
39
40 TEST(AsyncTimeout, schedule) {
41   int value = 0;
42   int const expected = 10;
43   EventBase manager;
44
45   auto observer = AsyncTimeout::schedule(
46     std::chrono::milliseconds(100),
47     manager,
48     [&]() noexcept { value = expected; }
49   );
50
51   manager.loop();
52
53   EXPECT_EQ(expected, value);
54 }
55
56 TEST(AsyncTimeout, schedule_immediate) {
57   int value = 0;
58   int const expected = 10;
59   EventBase manager;
60
61   auto observer = AsyncTimeout::schedule(
62       std::chrono::milliseconds(0), manager, [&]() noexcept {
63         value = expected;
64       });
65
66   manager.loop();
67   EXPECT_EQ(expected, value);
68 }
69
70 TEST(AsyncTimeout, cancel_make) {
71   int value = 0;
72   int const expected = 10;
73   EventBase manager;
74
75   auto observer = AsyncTimeout::make(
76     manager,
77     [&]() noexcept { value = expected; }
78   );
79
80   observer->scheduleTimeout(std::chrono::milliseconds(100));
81   observer->cancelTimeout();
82
83   manager.loop();
84
85   EXPECT_NE(expected, value);
86 }
87
88 TEST(AsyncTimeout, cancel_schedule) {
89   int value = 0;
90   int const expected = 10;
91   EventBase manager;
92
93   auto observer = AsyncTimeout::schedule(
94     std::chrono::milliseconds(100),
95     manager,
96     [&]() noexcept { value = expected; }
97   );
98
99   observer->cancelTimeout();
100
101   manager.loop();
102
103   EXPECT_NE(expected, value);
104 }
105
106 } // namespace folly