blob: 327f3fda3f340ff606cd8ea2f60d9e10204ad9a3 [file] [log] [blame]
Jeff Sharkey4414cea2011-06-24 17:05:24 -07001/*
2 * Copyright (C) 2011 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
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070017package com.android.internal.net;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070018
Jeff Davidson1f7e05e2016-03-10 13:21:38 -080019import static android.net.NetworkStats.ROAMING_NO;
Jeff Sharkey8fc27e82012-04-04 20:40:58 -070020import static android.net.NetworkStats.SET_ALL;
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -070021import static android.net.NetworkStats.SET_DEFAULT;
22import static android.net.NetworkStats.SET_FOREGROUND;
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070023import static android.net.NetworkStats.TAG_NONE;
24import static android.net.NetworkStats.UID_ALL;
Jesse Wilson8568db52011-06-28 19:06:31 -070025import static com.android.server.NetworkManagementSocketTagger.kernelToTag;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070026
27import android.content.res.Resources;
28import android.net.NetworkStats;
Jeff Sharkey2d6c5802012-05-02 16:00:52 -070029import android.net.TrafficStats;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070030import android.test.AndroidTestCase;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070031
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070032import com.android.frameworks.coretests.R;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070033
34import java.io.File;
35import java.io.FileOutputStream;
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070036import java.io.FileWriter;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070037import java.io.InputStream;
38import java.io.OutputStream;
39
40import libcore.io.IoUtils;
41import libcore.io.Streams;
42
43/**
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070044 * Tests for {@link NetworkStatsFactory}.
Jeff Sharkey4414cea2011-06-24 17:05:24 -070045 */
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070046public class NetworkStatsFactoryTest extends AndroidTestCase {
Jeff Sharkey4414cea2011-06-24 17:05:24 -070047 private File mTestProc;
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070048 private NetworkStatsFactory mFactory;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070049
50 @Override
51 public void setUp() throws Exception {
52 super.setUp();
53
Jeff Sharkeya63ba592011-07-19 23:47:12 -070054 mTestProc = new File(getContext().getFilesDir(), "proc");
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070055 if (mTestProc.exists()) {
Jeff Sharkeya63ba592011-07-19 23:47:12 -070056 IoUtils.deleteContents(mTestProc);
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070057 }
58
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070059 mFactory = new NetworkStatsFactory(mTestProc);
Jeff Sharkey4414cea2011-06-24 17:05:24 -070060 }
61
62 @Override
63 public void tearDown() throws Exception {
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070064 mFactory = null;
Jeff Sharkey4414cea2011-06-24 17:05:24 -070065
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070066 if (mTestProc.exists()) {
Jeff Sharkeya63ba592011-07-19 23:47:12 -070067 IoUtils.deleteContents(mTestProc);
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -070068 }
69
Jeff Sharkey4414cea2011-06-24 17:05:24 -070070 super.tearDown();
71 }
72
73 public void testNetworkStatsDetail() throws Exception {
74 stageFile(R.raw.xt_qtaguid_typical, new File(mTestProc, "net/xt_qtaguid/stats"));
75
Jeff Sharkey1059c3c2011-10-04 16:54:49 -070076 final NetworkStats stats = mFactory.readNetworkStatsDetail();
Jeff Sharkey163e6442011-10-31 16:37:52 -070077 assertEquals(70, stats.size());
78 assertStatsEntry(stats, "wlan0", 0, SET_DEFAULT, 0x0, 18621L, 2898L);
79 assertStatsEntry(stats, "wlan0", 10011, SET_DEFAULT, 0x0, 35777L, 5718L);
80 assertStatsEntry(stats, "wlan0", 10021, SET_DEFAULT, 0x7fffff01, 562386L, 49228L);
81 assertStatsEntry(stats, "rmnet1", 10021, SET_DEFAULT, 0x30100000, 219110L, 227423L);
82 assertStatsEntry(stats, "rmnet2", 10001, SET_DEFAULT, 0x0, 1125899906842624L, 984L);
Jeff Sharkey4414cea2011-06-24 17:05:24 -070083 }
84
85 public void testKernelTags() throws Exception {
Jeff Sharkey4414cea2011-06-24 17:05:24 -070086 assertEquals(0, kernelToTag("0x0000000000000000"));
87 assertEquals(0x32, kernelToTag("0x0000003200000000"));
88 assertEquals(2147483647, kernelToTag("0x7fffffff00000000"));
89 assertEquals(0, kernelToTag("0x0000000000000000"));
90 assertEquals(2147483136, kernelToTag("0x7FFFFE0000000000"));
Jeff Sharkey2d6c5802012-05-02 16:00:52 -070091
92 assertEquals(0, kernelToTag("0x0"));
93 assertEquals(0, kernelToTag("0xf00d"));
94 assertEquals(1, kernelToTag("0x100000000"));
95 assertEquals(14438007, kernelToTag("0xdc4e7700000000"));
96 assertEquals(TrafficStats.TAG_SYSTEM_DOWNLOAD, kernelToTag("0xffffff0100000000"));
Jeff Sharkey4414cea2011-06-24 17:05:24 -070097 }
98
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -070099 public void testNetworkStatsWithSet() throws Exception {
Jeff Sharkey163e6442011-10-31 16:37:52 -0700100 stageFile(R.raw.xt_qtaguid_typical, new File(mTestProc, "net/xt_qtaguid/stats"));
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -0700101
Jeff Sharkey1059c3c2011-10-04 16:54:49 -0700102 final NetworkStats stats = mFactory.readNetworkStatsDetail();
Jeff Sharkey163e6442011-10-31 16:37:52 -0700103 assertEquals(70, stats.size());
104 assertStatsEntry(stats, "rmnet1", 10021, SET_DEFAULT, 0x30100000, 219110L, 578L, 227423L, 676L);
105 assertStatsEntry(stats, "rmnet1", 10021, SET_FOREGROUND, 0x30100000, 742L, 3L, 1265L, 3L);
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -0700106 }
107
Jeff Sharkeyae2c1812011-10-04 13:11:40 -0700108 public void testNetworkStatsSingle() throws Exception {
109 stageFile(R.raw.xt_qtaguid_iface_typical, new File(mTestProc, "net/xt_qtaguid/iface_stat_all"));
110
Jeff Sharkeye8914c32012-05-01 16:26:09 -0700111 final NetworkStats stats = mFactory.readNetworkStatsSummaryDev();
Jeff Sharkeyae2c1812011-10-04 13:11:40 -0700112 assertEquals(6, stats.size());
Jeff Sharkey8fc27e82012-04-04 20:40:58 -0700113 assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 2112L, 24L, 700L, 10L);
114 assertStatsEntry(stats, "test1", UID_ALL, SET_ALL, TAG_NONE, 6L, 8L, 10L, 12L);
115 assertStatsEntry(stats, "test2", UID_ALL, SET_ALL, TAG_NONE, 1L, 2L, 3L, 4L);
Jeff Sharkeyae2c1812011-10-04 13:11:40 -0700116 }
117
Jeff Sharkeye8914c32012-05-01 16:26:09 -0700118 public void testNetworkStatsXt() throws Exception {
119 stageFile(R.raw.xt_qtaguid_iface_fmt_typical,
120 new File(mTestProc, "net/xt_qtaguid/iface_stat_fmt"));
121
122 final NetworkStats stats = mFactory.readNetworkStatsSummaryXt();
123 assertEquals(3, stats.size());
124 assertStatsEntry(stats, "rmnet0", UID_ALL, SET_ALL, TAG_NONE, 6824L, 16L, 5692L, 10L);
125 assertStatsEntry(stats, "rmnet1", UID_ALL, SET_ALL, TAG_NONE, 11153922L, 8051L, 190226L, 2468L);
126 assertStatsEntry(stats, "rmnet2", UID_ALL, SET_ALL, TAG_NONE, 4968L, 35L, 3081L, 39L);
127 }
128
Jeff Sharkey4414cea2011-06-24 17:05:24 -0700129 /**
130 * Copy a {@link Resources#openRawResource(int)} into {@link File} for
131 * testing purposes.
132 */
133 private void stageFile(int rawId, File file) throws Exception {
134 new File(file.getParent()).mkdirs();
135 InputStream in = null;
136 OutputStream out = null;
137 try {
138 in = getContext().getResources().openRawResource(rawId);
139 out = new FileOutputStream(file);
140 Streams.copy(in, out);
141 } finally {
142 IoUtils.closeQuietly(in);
143 IoUtils.closeQuietly(out);
144 }
145 }
146
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -0700147 private void stageLong(long value, File file) throws Exception {
148 new File(file.getParent()).mkdirs();
149 FileWriter out = null;
150 try {
151 out = new FileWriter(file);
152 out.write(Long.toString(value));
153 } finally {
154 IoUtils.closeQuietly(out);
155 }
156 }
157
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -0700158 private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
159 int tag, long rxBytes, long txBytes) {
Jeff Davidson1f7e05e2016-03-10 13:21:38 -0800160 final int i = stats.findIndex(iface, uid, set, tag, ROAMING_NO);
Jeff Sharkeyfd8be3e2011-07-11 14:36:15 -0700161 final NetworkStats.Entry entry = stats.getValues(i, null);
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -0700162 assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
163 assertEquals("unexpected txBytes", txBytes, entry.txBytes);
164 }
165
166 private static void assertStatsEntry(NetworkStats stats, String iface, int uid, int set,
167 int tag, long rxBytes, long rxPackets, long txBytes, long txPackets) {
Jeff Davidson1f7e05e2016-03-10 13:21:38 -0800168 final int i = stats.findIndex(iface, uid, set, tag, ROAMING_NO);
Jeff Sharkeyb5d55e32011-08-10 17:53:27 -0700169 final NetworkStats.Entry entry = stats.getValues(i, null);
170 assertEquals("unexpected rxBytes", rxBytes, entry.rxBytes);
171 assertEquals("unexpected rxPackets", rxPackets, entry.rxPackets);
172 assertEquals("unexpected txBytes", txBytes, entry.txBytes);
173 assertEquals("unexpected txPackets", txPackets, entry.txPackets);
Jeff Sharkey4414cea2011-06-24 17:05:24 -0700174 }
175
176}