1/* 2 * Copyright (C) 2016 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 */ 16package android.net; 17 18import static android.net.NetworkPolicyManager.MASK_ALL_NETWORKS; 19import static android.net.NetworkPolicyManager.MASK_METERED_NETWORKS; 20import static android.net.NetworkPolicyManager.POLICY_ALLOW_METERED_BACKGROUND; 21import static android.net.NetworkPolicyManager.POLICY_NONE; 22import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND; 23import static android.net.NetworkPolicyManager.RULE_ALLOW_ALL; 24import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED; 25import static android.net.NetworkPolicyManager.RULE_NONE; 26import static android.net.NetworkPolicyManager.RULE_REJECT_ALL; 27import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; 28import static android.net.NetworkPolicyManager.RULE_TEMPORARY_ALLOW_METERED; 29import static android.net.NetworkPolicyManager.uidPoliciesToString; 30import static android.net.NetworkPolicyManager.uidRulesToString; 31 32import static org.junit.Assert.assertEquals; 33import static org.junit.Assert.fail; 34 35import org.junit.Test; 36import org.junit.runner.RunWith; 37import org.junit.runners.JUnit4; 38 39import java.util.Arrays; 40 41@RunWith(JUnit4.class) 42public class NetworkPolicyManagerTest { 43 44 @Test 45 public void testUidRulesToString() { 46 uidRulesToStringTest(RULE_NONE, "0 (NONE)"); 47 uidRulesToStringTest(RULE_ALLOW_METERED, "1 (ALLOW_METERED)"); 48 uidRulesToStringTest(RULE_TEMPORARY_ALLOW_METERED, "2 (TEMPORARY_ALLOW_METERED)"); 49 uidRulesToStringTest(RULE_REJECT_METERED, "4 (REJECT_METERED)"); 50 uidRulesToStringTest(RULE_ALLOW_ALL, "32 (ALLOW_ALL)"); 51 uidRulesToStringTest(RULE_REJECT_ALL, "64 (REJECT_ALL)"); 52 53 uidRulesToStringTest(RULE_ALLOW_METERED | RULE_ALLOW_ALL, 54 "33 (ALLOW_METERED|ALLOW_ALL)", 55 "33 (ALLOW_ALL|ALLOW_METERED)"); 56 uidRulesToStringTest(RULE_ALLOW_METERED | RULE_REJECT_ALL, 57 "65 (ALLOW_METERED|REJECT_ALL)", 58 "65 (REJECT_ALL|ALLOW_METERED)"); 59 uidRulesToStringTest(RULE_TEMPORARY_ALLOW_METERED | RULE_ALLOW_ALL, 60 "34 (TEMPORARY_ALLOW_METERED|ALLOW_ALL)", 61 "34 (ALLOW_ALL|TEMPORARY_ALLOW_METERED)"); 62 uidRulesToStringTest(RULE_TEMPORARY_ALLOW_METERED | RULE_REJECT_ALL, 63 "66 (TEMPORARY_ALLOW_METERED|REJECT_ALL)", 64 "66 (REJECT_ALL|TEMPORARY_ALLOW_METERED)"); 65 uidRulesToStringTest(RULE_REJECT_METERED | RULE_ALLOW_ALL, 66 "36 (REJECT_METERED|ALLOW_ALL)", 67 "36 (ALLOW_ALL|REJECT_METERED)"); 68 uidRulesToStringTest(RULE_REJECT_METERED | RULE_REJECT_ALL, 69 "68 (REJECT_METERED|REJECT_ALL)", 70 "68 (REJECT_ALL|REJECT_METERED)"); 71 } 72 73 private void uidRulesToStringTest(int uidRules, String... expectedOptions) { 74 assertContains(uidRulesToString(uidRules), expectedOptions); 75 } 76 77 @Test 78 public void testUidPoliciesToString() { 79 uidPoliciesToStringTest(POLICY_NONE, "0 (NONE)"); 80 uidPoliciesToStringTest(POLICY_REJECT_METERED_BACKGROUND, 81 "1 (REJECT_METERED_BACKGROUND)"); 82 uidPoliciesToStringTest(POLICY_ALLOW_METERED_BACKGROUND, 83 "4 (ALLOW_BACKGROUND_BATTERY_SAVE)"); 84 } 85 86 private void uidPoliciesToStringTest(int policyRules, String... expectedOptions) { 87 assertContains(uidPoliciesToString(policyRules), expectedOptions); 88 } 89 90 @Test 91 public void testMeteredNetworksMask() { 92 assertEquals(RULE_NONE, MASK_METERED_NETWORKS 93 & RULE_NONE); 94 95 assertEquals(RULE_ALLOW_METERED, MASK_METERED_NETWORKS 96 & RULE_ALLOW_METERED); 97 assertEquals(RULE_ALLOW_METERED, MASK_METERED_NETWORKS 98 & (RULE_ALLOW_METERED | RULE_ALLOW_ALL)); 99 assertEquals(RULE_ALLOW_METERED, MASK_METERED_NETWORKS 100 & (RULE_ALLOW_METERED | RULE_REJECT_ALL)); 101 102 assertEquals(RULE_TEMPORARY_ALLOW_METERED, MASK_METERED_NETWORKS 103 & RULE_TEMPORARY_ALLOW_METERED); 104 assertEquals(RULE_TEMPORARY_ALLOW_METERED, MASK_METERED_NETWORKS 105 & (RULE_TEMPORARY_ALLOW_METERED | RULE_ALLOW_ALL)); 106 assertEquals(RULE_TEMPORARY_ALLOW_METERED, MASK_METERED_NETWORKS 107 & (RULE_TEMPORARY_ALLOW_METERED | RULE_REJECT_ALL)); 108 109 assertEquals(RULE_REJECT_METERED, MASK_METERED_NETWORKS 110 & RULE_REJECT_METERED); 111 assertEquals(RULE_REJECT_METERED, MASK_METERED_NETWORKS 112 & (RULE_REJECT_METERED | RULE_ALLOW_ALL)); 113 assertEquals(RULE_REJECT_METERED, MASK_METERED_NETWORKS 114 & (RULE_REJECT_METERED | RULE_REJECT_ALL)); 115 } 116 117 @Test 118 public void testAllNetworksMask() { 119 assertEquals(RULE_NONE, MASK_ALL_NETWORKS 120 & RULE_NONE); 121 122 assertEquals(RULE_ALLOW_ALL, MASK_ALL_NETWORKS 123 & RULE_ALLOW_ALL); 124 assertEquals(RULE_ALLOW_ALL, MASK_ALL_NETWORKS 125 & (RULE_ALLOW_ALL | RULE_ALLOW_METERED)); 126 assertEquals(RULE_ALLOW_ALL, MASK_ALL_NETWORKS 127 & (RULE_ALLOW_ALL | RULE_TEMPORARY_ALLOW_METERED)); 128 assertEquals(RULE_ALLOW_ALL, MASK_ALL_NETWORKS 129 & (RULE_ALLOW_ALL | RULE_REJECT_METERED)); 130 131 assertEquals(RULE_REJECT_ALL, MASK_ALL_NETWORKS 132 & RULE_REJECT_ALL); 133 assertEquals(RULE_REJECT_ALL, MASK_ALL_NETWORKS 134 & (RULE_REJECT_ALL | RULE_ALLOW_METERED)); 135 assertEquals(RULE_REJECT_ALL, MASK_ALL_NETWORKS 136 & (RULE_REJECT_ALL | RULE_TEMPORARY_ALLOW_METERED)); 137 assertEquals(RULE_REJECT_ALL, MASK_ALL_NETWORKS 138 & (RULE_REJECT_ALL | RULE_REJECT_METERED)); 139 } 140 141 // TODO: use Truth or Hamcrest 142 private void assertContains(String actual, String...expectedOptions) { 143 for (String expected : expectedOptions) { 144 if (expected.equals(actual)) return; 145 } 146 fail(actual + " not in " + Arrays.toString(expectedOptions)); 147 } 148} 149