• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
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 "OperationLimiter.h"
18 
19 #include <gtest/gtest-spi.h>
20 
21 namespace android {
22 namespace netdutils {
23 
TEST(OperationLimiter,limits)24 TEST(OperationLimiter, limits) {
25     OperationLimiter<int> limiter(3);
26 
27     EXPECT_TRUE(limiter.start(42));
28     EXPECT_TRUE(limiter.start(42));
29     EXPECT_TRUE(limiter.start(42));
30 
31     // Limit reached... calling any number of times should have no effect.
32     EXPECT_FALSE(limiter.start(42));
33     EXPECT_FALSE(limiter.start(42));
34     EXPECT_FALSE(limiter.start(42));
35 
36     // Finishing a single operations is enough for starting a new one...
37     limiter.finish(42);
38     EXPECT_TRUE(limiter.start(42));
39 
40     // ...but not two!
41     EXPECT_FALSE(limiter.start(42));
42 
43     // Different ids should still have quota...
44     EXPECT_TRUE(limiter.start(666));
45     limiter.finish(666);
46 
47     // Finish all pending operations
48     limiter.finish(42);
49     limiter.finish(42);
50     limiter.finish(42);
51 }
52 
TEST(OperationLimiter,finishWithoutStart)53 TEST(OperationLimiter, finishWithoutStart) {
54     OperationLimiter<int> limiter(1);
55 
56     // Will output a LOG(FATAL_WITHOUT_ABORT), but we have no way to probe this.
57     limiter.finish(42);
58 
59     // This will ensure that the finish() above didn't set a negative value.
60     EXPECT_TRUE(limiter.start(42));
61     EXPECT_FALSE(limiter.start(42));
62 }
63 
TEST(OperationLimiter,destroyWithActiveOperations)64 TEST(OperationLimiter, destroyWithActiveOperations) {
65     // The death message doesn't seem to be captured on Android.
66     EXPECT_DEBUG_DEATH(
67             {
68                 OperationLimiter<int> limiter(3);
69                 limiter.start(42);
70             },
71             "" /* "active operations */);
72 }
73 
74 }  // namespace netdutils
75 }  // namespace android
76