1/* 2 * Copyright 2017 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 * IdletimerControllerTest.cpp - unit tests for IdletimerController.cpp 17 */ 18 19#include <gtest/gtest.h> 20 21#include <android-base/strings.h> 22#include <android-base/stringprintf.h> 23 24#include "IdletimerController.h" 25#include "IptablesBaseTest.h" 26 27using android::base::Join; 28using android::base::StringPrintf; 29 30class IdletimerControllerTest : public IptablesBaseTest { 31protected: 32 IdletimerControllerTest() { 33 IdletimerController::execIptablesRestore = fakeExecIptablesRestore; 34 } 35 IdletimerController mIt; 36}; 37 38TEST_F(IdletimerControllerTest, TestSetupIptablesHooks) { 39 mIt.setupIptablesHooks(); 40 expectIptablesRestoreCommands(ExpectedIptablesCommands{}); 41} 42 43TEST_F(IdletimerControllerTest, TestEnableDisable) { 44 std::vector<std::string> expected = { 45 "*raw\n" 46 ":idletimer_raw_PREROUTING -\n" 47 "COMMIT\n" 48 "*mangle\n" 49 ":idletimer_mangle_POSTROUTING -\n" 50 "COMMIT\n", 51 }; 52 53 mIt.enableIdletimerControl(); 54 expectIptablesRestoreCommands(expected); 55 56 mIt.enableIdletimerControl(); 57 expectIptablesRestoreCommands(expected); 58 59 mIt.disableIdletimerControl(); 60 expectIptablesRestoreCommands(expected); 61 62 mIt.disableIdletimerControl(); 63 expectIptablesRestoreCommands(expected); 64} 65 66const std::vector<std::string> makeAddRemoveCommands(bool add) { 67 const char *op = add ? "-A" : "-D"; 68 std::vector<std::string> cmds = { 69 "*raw", 70 StringPrintf("%s idletimer_raw_PREROUTING -i wlan0 -j IDLETIMER" 71 " --timeout 12345 --label hello --send_nl_msg 1", op), 72 "COMMIT", 73 "*mangle", 74 StringPrintf("%s idletimer_mangle_POSTROUTING -o wlan0 -j IDLETIMER" 75 " --timeout 12345 --label hello --send_nl_msg 1", op), 76 "COMMIT\n", 77 }; 78 return { Join(cmds, '\n') }; 79} 80 81TEST_F(IdletimerControllerTest, TestAddRemove) { 82 auto expected = makeAddRemoveCommands(true); 83 mIt.addInterfaceIdletimer("wlan0", 12345, "hello"); 84 expectIptablesRestoreCommands(expected); 85 86 mIt.addInterfaceIdletimer("wlan0", 12345, "hello"); 87 expectIptablesRestoreCommands(expected); 88 89 expected = makeAddRemoveCommands(false); 90 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello"); 91 expectIptablesRestoreCommands(expected); 92 93 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello"); 94 expectIptablesRestoreCommands(expected); 95} 96