629d67864117f5e733fa584cdbb977b0fca312cb
[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, cancel_make) {
57   int value = 0;
58   int const expected = 10;
59   EventBase manager;
60
61   auto observer = AsyncTimeout::make(
62     manager,
63     [&]() noexcept { value = expected; }
64   );
65
66   observer->scheduleTimeout(std::chrono::milliseconds(100));
67   observer->cancelTimeout();
68
69   manager.loop();
70
71   EXPECT_NE(expected, value);
72 }
73
74 TEST(AsyncTimeout, cancel_schedule) {
75   int value = 0;
76   int const expected = 10;
77   EventBase manager;
78
79   auto observer = AsyncTimeout::schedule(
80     std::chrono::milliseconds(100),
81     manager,
82     [&]() noexcept { value = expected; }
83   );
84
85   observer->cancelTimeout();
86
87   manager.loop();
88
89   EXPECT_NE(expected, value);
90 }
91
92 } // namespace folly