blob: 6f4179823e9123205b9ca08a7829961f69282a37 [file] [log] [blame]
Lorenzo Colitti341d3a02017-08-08 17:31:35 +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 * ControllersTest.cpp - unit tests for Controllers.cpp
17 */
18
19#include <string>
20#include <vector>
21
22#include <gtest/gtest.h>
23
24#include "Controllers.h"
25#include "IptablesBaseTest.h"
26
27namespace android {
28namespace net {
29
30class ControllersTest : public IptablesBaseTest {
31 public:
32 ControllersTest() {
33 Controllers::execIptablesSilently = fakeExecIptables;
34 Controllers::execIptablesRestore = fakeExecIptablesRestore;
35 }
36
37 protected:
38 void initChildChains() { Controllers::initChildChains(); };
39};
40
41TEST_F(ControllersTest, TestInitIptablesRules) {
42 ExpectedIptablesCommands expectedRestoreCommands = {
43 { V4V6, "*filter\n"
44 ":INPUT -\n"
45 "-F INPUT\n"
46 ":bw_INPUT -\n"
47 "-A INPUT -j bw_INPUT\n"
48 ":fw_INPUT -\n"
49 "-A INPUT -j fw_INPUT\n"
50 "COMMIT\n"
51 },
52 { V4V6, "*filter\n"
53 ":FORWARD -\n"
54 "-F FORWARD\n"
55 ":oem_fwd -\n"
56 "-A FORWARD -j oem_fwd\n"
57 ":fw_FORWARD -\n"
58 "-A FORWARD -j fw_FORWARD\n"
59 ":bw_FORWARD -\n"
60 "-A FORWARD -j bw_FORWARD\n"
61 ":natctrl_FORWARD -\n"
62 "-A FORWARD -j natctrl_FORWARD\n"
63 "COMMIT\n"
64 },
65 { V4V6, "*raw\n"
66 ":PREROUTING -\n"
67 "-F PREROUTING\n"
68 ":bw_raw_PREROUTING -\n"
69 "-A PREROUTING -j bw_raw_PREROUTING\n"
70 ":idletimer_raw_PREROUTING -\n"
71 "-A PREROUTING -j idletimer_raw_PREROUTING\n"
72 ":natctrl_raw_PREROUTING -\n"
73 "-A PREROUTING -j natctrl_raw_PREROUTING\n"
74 "COMMIT\n"
75 },
76 { V4V6, "*mangle\n"
77 ":FORWARD -\n"
78 "-F FORWARD\n"
79 ":natctrl_mangle_FORWARD -\n"
80 "-A FORWARD -j natctrl_mangle_FORWARD\n"
81 "COMMIT\n"
82 },
83 { V4V6, "*mangle\n"
84 ":INPUT -\n"
85 "-F INPUT\n"
86 ":wakeupctrl_mangle_INPUT -\n"
87 "-A INPUT -j wakeupctrl_mangle_INPUT\n"
88 ":routectrl_mangle_INPUT -\n"
89 "-A INPUT -j routectrl_mangle_INPUT\n"
90 "COMMIT\n"
91 },
92 { V4, "*nat\n"
93 ":PREROUTING -\n"
94 "-F PREROUTING\n"
95 ":oem_nat_pre -\n"
96 "-A PREROUTING -j oem_nat_pre\n"
97 "COMMIT\n"
98 },
99 { V4, "*nat\n"
100 ":POSTROUTING -\n"
101 "-F POSTROUTING\n"
102 ":natctrl_nat_POSTROUTING -\n"
103 "-A POSTROUTING -j natctrl_nat_POSTROUTING\n"
104 "COMMIT\n"
105 },
106 { V4V6, "*filter\n"
107 ":oem_out -\n"
108 "-A OUTPUT -j oem_out\n"
109 ":fw_OUTPUT -\n"
110 "-A OUTPUT -j fw_OUTPUT\n"
111 ":st_OUTPUT -\n"
112 "-A OUTPUT -j st_OUTPUT\n"
113 ":bw_OUTPUT -\n"
114 "-A OUTPUT -j bw_OUTPUT\n"
115 "COMMIT\n"
116 },
117 { V4V6, "*mangle\n"
118 ":oem_mangle_post -\n"
119 "-A POSTROUTING -j oem_mangle_post\n"
120 ":bw_mangle_POSTROUTING -\n"
121 "-A POSTROUTING -j bw_mangle_POSTROUTING\n"
122 ":idletimer_mangle_POSTROUTING -\n"
123 "-A POSTROUTING -j idletimer_mangle_POSTROUTING\n"
124 "COMMIT\n"
125 },
126 };
127 initChildChains();
128 expectIptablesRestoreCommands(expectedRestoreCommands);
129
130 std::vector<std::string> expectedIptablesCommands = {
131 "-t filter -D OUTPUT -j oem_out",
132 "-t filter -D OUTPUT -j fw_OUTPUT",
133 "-t filter -D OUTPUT -j st_OUTPUT",
134 "-t filter -D OUTPUT -j bw_OUTPUT",
135 "-t mangle -D POSTROUTING -j oem_mangle_post",
136 "-t mangle -D POSTROUTING -j bw_mangle_POSTROUTING",
137 "-t mangle -D POSTROUTING -j idletimer_mangle_POSTROUTING",
138 };
139 expectIptablesCommands(expectedIptablesCommands);
140
141 // ... and nothing more.
142 expectedRestoreCommands = {};
143 expectIptablesRestoreCommands(expectedRestoreCommands);
144
145 expectedIptablesCommands = {};
146 expectIptablesCommands(expectedIptablesCommands);
147}
148
149} // namespace net
150} // namespace android