NetworkManagementServiceTest.java revision 8568db534118fc14cc28100306d51626464ff319
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (C) 2011 The Android Open Source Project
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * you may not use this file except in compliance with the License.
6221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * You may obtain a copy of the License at
7221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom *
8221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom *      http://www.apache.org/licenses/LICENSE-2.0
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *
10221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * Unless required by applicable law or agreed to in writing, software
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * See the License for the specific language governing permissions and
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * limitations under the License.
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpackage com.android.server;
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static com.android.server.NetworkManagementSocketTagger.kernelToTag;
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport static com.android.server.NetworkManagementSocketTagger.tagToKernel;
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.content.res.Resources;
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.net.NetworkStats;
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.test.AndroidTestCase;
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport android.test.suitebuilder.annotation.LargeTest;
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport com.android.frameworks.servicestests.R;
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport java.io.File;
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport java.io.FileOutputStream;
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport java.io.InputStream;
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport java.io.OutputStream;
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport libcore.io.IoUtils;
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectimport libcore.io.Streams;
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/**
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Tests for {@link NetworkManagementService}.
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@LargeTest
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectpublic class NetworkManagementServiceTest extends AndroidTestCase {
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    private File mTestProc;
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    private NetworkManagementService mService;
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    @Override
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    public void setUp() throws Exception {
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        super.setUp();
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        mTestProc = getContext().getFilesDir();
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        mService = NetworkManagementService.createForTest(mContext, mTestProc);
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    @Override
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    public void tearDown() throws Exception {
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        mService = null;
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        super.tearDown();
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    public void testNetworkStatsDetail() throws Exception {
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        stageFile(R.raw.xt_qtaguid_typical, new File(mTestProc, "net/xt_qtaguid/stats"));
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        final NetworkStats stats = mService.getNetworkStatsDetail();
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(31, stats.size);
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "wlan0", 0, 0, 14615L, 4270L);
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "wlan0", 10004, 0, 333821L, 53558L);
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "wlan0", 10004, 1947740890, 18725L, 1066L);
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "rmnet0", 10037, 0, 31184994L, 684122L);
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "rmnet0", 10037, 1947740890, 28507378L, 437004L);
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    public void testNetworkStatsDetailExtended() throws Exception {
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        stageFile(R.raw.xt_qtaguid_extended, new File(mTestProc, "net/xt_qtaguid/stats"));
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        final NetworkStats stats = mService.getNetworkStatsDetail();
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(2, stats.size);
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "test0", 1000, 0, 1024L, 2048L);
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertStatsEntry(stats, "test0", 1000, 0xF00D, 512L, 512L);
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    public void testKernelTags() throws Exception {
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals("0", tagToKernel(0x0));
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals("214748364800", tagToKernel(0x32));
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals("9223372032559808512", tagToKernel(Integer.MAX_VALUE));
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals("0", tagToKernel(Integer.MIN_VALUE));
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals("9223369837831520256", tagToKernel(Integer.MIN_VALUE - 512));
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(0, kernelToTag("0x0000000000000000"));
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(0x32, kernelToTag("0x0000003200000000"));
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(2147483647, kernelToTag("0x7fffffff00000000"));
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(0, kernelToTag("0x0000000000000000"));
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000"));
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    /**
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project     * Copy a {@link Resources#openRawResource(int)} into {@link File} for
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project     * testing purposes.
99221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom     */
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    private void stageFile(int rawId, File file) throws Exception {
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        new File(file.getParent()).mkdirs();
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        InputStream in = null;
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        OutputStream out = null;
104221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom        try {
105221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom            in = getContext().getResources().openRawResource(rawId);
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project            out = new FileOutputStream(file);
107221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom            Streams.copy(in, out);
108221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom        } finally {
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project            IoUtils.closeQuietly(in);
110221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom            IoUtils.closeQuietly(out);
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        }
112221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom    }
113221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    private static void assertStatsEntry(
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project            NetworkStats stats, String iface, int uid, int tag, long rx, long tx) {
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        final int i = stats.findIndex(iface, uid, tag);
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(rx, stats.rx[i]);
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        assertEquals(tx, stats.tx[i]);
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project