blob: ace3fd99294ef7201b0663aad124eeb003987778 [file] [log] [blame]
Lorenzo Colitti85a21602017-08-10 19:22:45 +09001/*
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
Lorenzo Colittiad46e762017-08-10 19:44:34 +090027using android::base::Join;
Lorenzo Colitti85a21602017-08-10 19:22:45 +090028using android::base::StringPrintf;
29
30class IdletimerControllerTest : public IptablesBaseTest {
31protected:
32 IdletimerControllerTest() {
Lorenzo Colittiad46e762017-08-10 19:44:34 +090033 IdletimerController::execIptablesRestore = fakeExecIptablesRestore;
Lorenzo Colitti85a21602017-08-10 19:22:45 +090034 }
35 IdletimerController mIt;
36};
37
38TEST_F(IdletimerControllerTest, TestSetupIptablesHooks) {
39 mIt.setupIptablesHooks();
Lorenzo Colitti85a21602017-08-10 19:22:45 +090040 expectIptablesRestoreCommands(ExpectedIptablesCommands{});
41}
42
43TEST_F(IdletimerControllerTest, TestEnableDisable) {
44 std::vector<std::string> expected = {
Lorenzo Colittiad46e762017-08-10 19:44:34 +090045 "*raw\n"
46 ":idletimer_raw_PREROUTING -\n"
47 "COMMIT\n"
48 "*mangle\n"
49 ":idletimer_mangle_POSTROUTING -\n"
50 "COMMIT\n",
Lorenzo Colitti85a21602017-08-10 19:22:45 +090051 };
52
53 mIt.enableIdletimerControl();
Lorenzo Colittiad46e762017-08-10 19:44:34 +090054 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090055
56 mIt.enableIdletimerControl();
Lorenzo Colittiad46e762017-08-10 19:44:34 +090057 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090058
59 mIt.disableIdletimerControl();
Lorenzo Colittiad46e762017-08-10 19:44:34 +090060 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090061
62 mIt.disableIdletimerControl();
Lorenzo Colittiad46e762017-08-10 19:44:34 +090063 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090064}
65
66const std::vector<std::string> makeAddRemoveCommands(bool add) {
67 const char *op = add ? "-A" : "-D";
Lorenzo Colittiad46e762017-08-10 19:44:34 +090068 std::vector<std::string> cmds = {
69 "*raw",
70 StringPrintf("%s idletimer_raw_PREROUTING -i wlan0 -j IDLETIMER"
Lorenzo Colitti85a21602017-08-10 19:22:45 +090071 " --timeout 12345 --label hello --send_nl_msg 1", op),
Lorenzo Colittiad46e762017-08-10 19:44:34 +090072 "COMMIT",
73 "*mangle",
74 StringPrintf("%s idletimer_mangle_POSTROUTING -o wlan0 -j IDLETIMER"
Lorenzo Colitti85a21602017-08-10 19:22:45 +090075 " --timeout 12345 --label hello --send_nl_msg 1", op),
Lorenzo Colittiad46e762017-08-10 19:44:34 +090076 "COMMIT\n",
Lorenzo Colitti85a21602017-08-10 19:22:45 +090077 };
Lorenzo Colittiad46e762017-08-10 19:44:34 +090078 return { Join(cmds, '\n') };
Lorenzo Colitti85a21602017-08-10 19:22:45 +090079}
80
81TEST_F(IdletimerControllerTest, TestAddRemove) {
82 auto expected = makeAddRemoveCommands(true);
83 mIt.addInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090084 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090085
86 mIt.addInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090087 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090088
89 expected = makeAddRemoveCommands(false);
90 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090091 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090092
93 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090094 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090095}