blob: 30c22987392464d11878e2f727808538347e420b [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
Lorenzo Colitti85a21602017-08-10 19:22:45 +090043const std::vector<std::string> makeAddRemoveCommands(bool add) {
44 const char *op = add ? "-A" : "-D";
Lorenzo Colittiad46e762017-08-10 19:44:34 +090045 std::vector<std::string> cmds = {
46 "*raw",
47 StringPrintf("%s idletimer_raw_PREROUTING -i wlan0 -j IDLETIMER"
Lorenzo Colitti85a21602017-08-10 19:22:45 +090048 " --timeout 12345 --label hello --send_nl_msg 1", op),
Lorenzo Colittiad46e762017-08-10 19:44:34 +090049 "COMMIT",
50 "*mangle",
51 StringPrintf("%s idletimer_mangle_POSTROUTING -o wlan0 -j IDLETIMER"
Lorenzo Colitti85a21602017-08-10 19:22:45 +090052 " --timeout 12345 --label hello --send_nl_msg 1", op),
Lorenzo Colittiad46e762017-08-10 19:44:34 +090053 "COMMIT\n",
Lorenzo Colitti85a21602017-08-10 19:22:45 +090054 };
Lorenzo Colittiad46e762017-08-10 19:44:34 +090055 return { Join(cmds, '\n') };
Lorenzo Colitti85a21602017-08-10 19:22:45 +090056}
57
58TEST_F(IdletimerControllerTest, TestAddRemove) {
59 auto expected = makeAddRemoveCommands(true);
60 mIt.addInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090061 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090062
63 mIt.addInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090064 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090065
66 expected = makeAddRemoveCommands(false);
67 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090068 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090069
70 mIt.removeInterfaceIdletimer("wlan0", 12345, "hello");
Lorenzo Colittiad46e762017-08-10 19:44:34 +090071 expectIptablesRestoreCommands(expected);
Lorenzo Colitti85a21602017-08-10 19:22:45 +090072}