76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * Copyright (C) 2018 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *      http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| #include "OperationLimiter.h"
 | |
| 
 | |
| #include <gtest/gtest-spi.h>
 | |
| 
 | |
| namespace android {
 | |
| namespace netdutils {
 | |
| 
 | |
| TEST(OperationLimiter, limits) {
 | |
|     OperationLimiter<int> limiter(3);
 | |
| 
 | |
|     EXPECT_TRUE(limiter.start(42));
 | |
|     EXPECT_TRUE(limiter.start(42));
 | |
|     EXPECT_TRUE(limiter.start(42));
 | |
| 
 | |
|     // Limit reached... calling any number of times should have no effect.
 | |
|     EXPECT_FALSE(limiter.start(42));
 | |
|     EXPECT_FALSE(limiter.start(42));
 | |
|     EXPECT_FALSE(limiter.start(42));
 | |
| 
 | |
|     // Finishing a single operations is enough for starting a new one...
 | |
|     limiter.finish(42);
 | |
|     EXPECT_TRUE(limiter.start(42));
 | |
| 
 | |
|     // ...but not two!
 | |
|     EXPECT_FALSE(limiter.start(42));
 | |
| 
 | |
|     // Different ids should still have quota...
 | |
|     EXPECT_TRUE(limiter.start(666));
 | |
|     limiter.finish(666);
 | |
| 
 | |
|     // Finish all pending operations
 | |
|     limiter.finish(42);
 | |
|     limiter.finish(42);
 | |
|     limiter.finish(42);
 | |
| }
 | |
| 
 | |
| TEST(OperationLimiter, finishWithoutStart) {
 | |
|     OperationLimiter<int> limiter(1);
 | |
| 
 | |
|     // Will output a LOG(FATAL_WITHOUT_ABORT), but we have no way to probe this.
 | |
|     limiter.finish(42);
 | |
| 
 | |
|     // This will ensure that the finish() above didn't set a negative value.
 | |
|     EXPECT_TRUE(limiter.start(42));
 | |
|     EXPECT_FALSE(limiter.start(42));
 | |
| }
 | |
| 
 | |
| TEST(OperationLimiter, destroyWithActiveOperations) {
 | |
|     // The death message doesn't seem to be captured on Android.
 | |
|     EXPECT_DEBUG_DEATH(
 | |
|             {
 | |
|                 OperationLimiter<int> limiter(3);
 | |
|                 limiter.start(42);
 | |
|             },
 | |
|             "" /* "active operations */);
 | |
| }
 | |
| 
 | |
| }  // namespace netdutils
 | |
| }  // namespace android
 |