Merge "Use merged NetworkTemplate to query data usage" into qt-dev

This commit is contained in:
Lei Yu
2019-05-15 00:27:23 +00:00
committed by Android (Google) Code Review
10 changed files with 93 additions and 91 deletions

View File

@@ -278,6 +278,12 @@ public class NetworkStatsManager {
return null; return null;
} }
return querySummary(template, startTime, endTime);
}
/** @hide */
public NetworkStats querySummary(NetworkTemplate template, long startTime,
long endTime) throws SecurityException, RemoteException {
NetworkStats result; NetworkStats result;
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);
result.startSummaryEnumeration(); result.startSummaryEnumeration();
@@ -296,6 +302,13 @@ public class NetworkStatsManager {
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL); NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
} }
/** @hide */
public NetworkStats queryDetailsForUid(NetworkTemplate template,
long startTime, long endTime, int uid) throws SecurityException {
return queryDetailsForUidTagState(template, startTime, endTime, uid,
NetworkStats.Bucket.TAG_NONE, NetworkStats.Bucket.STATE_ALL);
}
/** /**
* Query network usage statistics details for a given uid and tag. * Query network usage statistics details for a given uid and tag.
* *
@@ -340,6 +353,13 @@ public class NetworkStatsManager {
NetworkTemplate template; NetworkTemplate template;
template = createTemplate(networkType, subscriberId); template = createTemplate(networkType, subscriberId);
return queryDetailsForUidTagState(template, startTime, endTime, uid, tag, state);
}
/** @hide */
public NetworkStats queryDetailsForUidTagState(NetworkTemplate template,
long startTime, long endTime, int uid, int tag, int state) throws SecurityException {
NetworkStats result; NetworkStats result;
try { try {
result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService);

View File

@@ -175,9 +175,7 @@ public class DataUsageController {
private long getUsageLevel(NetworkTemplate template, long start, long end) { private long getUsageLevel(NetworkTemplate template, long start, long end) {
try { try {
final Bucket bucket = mNetworkStatsManager.querySummaryForDevice( final Bucket bucket = mNetworkStatsManager.querySummaryForDevice(template, start, end);
getNetworkType(template), getActiveSubscriberId(),
start, end);
if (bucket != null) { if (bucket != null) {
return bucket.getRxBytes() + bucket.getTxBytes(); return bucket.getRxBytes() + bucket.getTxBytes();
} }

View File

@@ -37,14 +37,14 @@ public class NetworkCycleChartDataLoader
private NetworkCycleChartDataLoader(Builder builder) { private NetworkCycleChartDataLoader(Builder builder) {
super(builder); super(builder);
mData = new ArrayList<NetworkCycleChartData>(); mData = new ArrayList<>();
} }
@Override @Override
void recordUsage(long start, long end) { void recordUsage(long start, long end) {
try { try {
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice( final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
mNetworkType, mSubId, start, end); mNetworkTemplate, start, end);
final long total = bucket == null ? 0L : bucket.getRxBytes() + bucket.getTxBytes(); final long total = bucket == null ? 0L : bucket.getRxBytes() + bucket.getTxBytes();
if (total > 0L) { if (total > 0L) {
final NetworkCycleChartData.Builder builder = new NetworkCycleChartData.Builder(); final NetworkCycleChartData.Builder builder = new NetworkCycleChartData.Builder();
@@ -81,7 +81,7 @@ public class NetworkCycleChartDataLoader
long usage = 0L; long usage = 0L;
try { try {
final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice( final NetworkStats.Bucket bucket = mNetworkStatsManager.querySummaryForDevice(
mNetworkType, mSubId, bucketStart, bucketEnd); mNetworkTemplate, bucketStart, bucketEnd);
if (bucket != null) { if (bucket != null) {
usage = bucket.getRxBytes() + bucket.getTxBytes(); usage = bucket.getRxBytes() + bucket.getTxBytes();
} }

View File

@@ -23,11 +23,11 @@ import android.app.usage.NetworkStats;
import android.content.Context; import android.content.Context;
import android.util.Log; import android.util.Log;
import androidx.annotation.VisibleForTesting;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.VisibleForTesting;
/** /**
* Loader for network data usage history. It returns a list of usage data per billing cycle for the * Loader for network data usage history. It returns a list of usage data per billing cycle for the
* specific Uid(s). * specific Uid(s).
@@ -44,7 +44,7 @@ public class NetworkCycleDataForUidLoader extends
super(builder); super(builder);
mUids = builder.mUids; mUids = builder.mUids;
mRetrieveDetail = builder.mRetrieveDetail; mRetrieveDetail = builder.mRetrieveDetail;
mData = new ArrayList<NetworkCycleDataForUid>(); mData = new ArrayList<>();
} }
@Override @Override
@@ -54,7 +54,7 @@ public class NetworkCycleDataForUidLoader extends
long totalForeground = 0L; long totalForeground = 0L;
for (int uid : mUids) { for (int uid : mUids) {
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid( final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid(
mNetworkType, mSubId, start, end, uid); mNetworkTemplate, start, end, uid);
final long usage = getTotalUsage(stats); final long usage = getTotalUsage(stats);
if (usage > 0L) { if (usage > 0L) {
totalUsage += usage; totalUsage += usage;
@@ -100,7 +100,7 @@ public class NetworkCycleDataForUidLoader extends
private long getForegroundUsage(long start, long end, int uid) { private long getForegroundUsage(long start, long end, int uid) {
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState( final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState(
mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND); mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
return getTotalUsage(stats); return getTotalUsage(stats);
} }

View File

@@ -49,18 +49,14 @@ import java.util.Iterator;
public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> { public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
private static final String TAG = "NetworkCycleDataLoader"; private static final String TAG = "NetworkCycleDataLoader";
protected final NetworkStatsManager mNetworkStatsManager; protected final NetworkStatsManager mNetworkStatsManager;
protected final String mSubId; protected final NetworkTemplate mNetworkTemplate;
protected final int mNetworkType;
private final NetworkPolicy mPolicy; private final NetworkPolicy mPolicy;
private final NetworkTemplate mNetworkTemplate;
private final ArrayList<Long> mCycles; private final ArrayList<Long> mCycles;
@VisibleForTesting @VisibleForTesting
final INetworkStatsService mNetworkStatsService; final INetworkStatsService mNetworkStatsService;
protected NetworkCycleDataLoader(Builder<?> builder) { protected NetworkCycleDataLoader(Builder<?> builder) {
super(builder.mContext); super(builder.mContext);
mSubId = builder.mSubId;
mNetworkType = builder.mNetworkType;
mNetworkTemplate = builder.mNetworkTemplate; mNetworkTemplate = builder.mNetworkTemplate;
mCycles = builder.mCycles; mCycles = builder.mCycles;
mNetworkStatsManager = (NetworkStatsManager) mNetworkStatsManager = (NetworkStatsManager)
@@ -180,8 +176,6 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
public static abstract class Builder<T extends NetworkCycleDataLoader> { public static abstract class Builder<T extends NetworkCycleDataLoader> {
private final Context mContext; private final Context mContext;
private String mSubId;
private int mNetworkType;
private NetworkTemplate mNetworkTemplate; private NetworkTemplate mNetworkTemplate;
private ArrayList<Long> mCycles; private ArrayList<Long> mCycles;
@@ -189,14 +183,8 @@ public abstract class NetworkCycleDataLoader<D> extends AsyncTaskLoader<D> {
mContext = context; mContext = context;
} }
public Builder<T> setSubscriberId(String subId) {
mSubId = subId;
return this;
}
public Builder<T> setNetworkTemplate(NetworkTemplate template) { public Builder<T> setNetworkTemplate(NetworkTemplate template) {
mNetworkTemplate = template; mNetworkTemplate = template;
mNetworkType = DataUsageController.getNetworkType(template);
return this; return this;
} }

View File

@@ -16,9 +16,10 @@
package com.android.settingslib.net; package com.android.settingslib.net;
import android.app.usage.NetworkStatsManager;
import android.app.usage.NetworkStats; import android.app.usage.NetworkStats;
import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
import android.net.NetworkTemplate;
import android.os.RemoteException; import android.os.RemoteException;
import android.util.Log; import android.util.Log;
@@ -33,15 +34,13 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
private final NetworkStatsManager mNetworkStatsManager; private final NetworkStatsManager mNetworkStatsManager;
private final long mStart; private final long mStart;
private final long mEnd; private final long mEnd;
private final String mSubId; private final NetworkTemplate mNetworkTemplate;
private final int mNetworkType;
private NetworkStatsSummaryLoader(Builder builder) { private NetworkStatsSummaryLoader(Builder builder) {
super(builder.mContext); super(builder.mContext);
mStart = builder.mStart; mStart = builder.mStart;
mEnd = builder.mEnd; mEnd = builder.mEnd;
mSubId = builder.mSubId; mNetworkTemplate = builder.mNetworkTemplate;
mNetworkType = builder.mNetworkType;
mNetworkStatsManager = (NetworkStatsManager) mNetworkStatsManager = (NetworkStatsManager)
builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE); builder.mContext.getSystemService(Context.NETWORK_STATS_SERVICE);
} }
@@ -55,7 +54,7 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
@Override @Override
public NetworkStats loadInBackground() { public NetworkStats loadInBackground() {
try { try {
return mNetworkStatsManager.querySummary(mNetworkType, mSubId, mStart, mEnd); return mNetworkStatsManager.querySummary(mNetworkTemplate, mStart, mEnd);
} catch (RemoteException e) { } catch (RemoteException e) {
Log.e(TAG, "Exception querying network detail.", e); Log.e(TAG, "Exception querying network detail.", e);
return null; return null;
@@ -78,8 +77,7 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
private final Context mContext; private final Context mContext;
private long mStart; private long mStart;
private long mEnd; private long mEnd;
private String mSubId; private NetworkTemplate mNetworkTemplate;
private int mNetworkType;
public Builder(Context context) { public Builder(Context context) {
mContext = context; mContext = context;
@@ -95,13 +93,11 @@ public class NetworkStatsSummaryLoader extends AsyncTaskLoader<NetworkStats> {
return this; return this;
} }
public Builder setSubscriberId(String subId) { /**
mSubId = subId; * Set {@link NetworkTemplate} for builder
return this; */
} public Builder setNetworkTemplate(NetworkTemplate template) {
mNetworkTemplate = template;
public Builder setNetworkType(int networkType) {
mNetworkType = networkType;
return this; return this;
} }

View File

@@ -31,7 +31,6 @@ import static org.mockito.Mockito.when;
import android.app.usage.NetworkStats; import android.app.usage.NetworkStats;
import android.app.usage.NetworkStatsManager; import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.INetworkStatsSession; import android.net.INetworkStatsSession;
import android.net.NetworkStatsHistory; import android.net.NetworkStatsHistory;
import android.net.NetworkTemplate; import android.net.NetworkTemplate;
@@ -52,6 +51,7 @@ import org.robolectric.shadows.ShadowSubscriptionManager;
public class DataUsageControllerTest { public class DataUsageControllerTest {
private static final String SUB_ID = "Test Subscriber"; private static final String SUB_ID = "Test Subscriber";
private static final String SUB_ID_2 = "Test Subscriber 2";
@Mock @Mock
private INetworkStatsSession mSession; private INetworkStatsSession mSession;
@@ -63,6 +63,9 @@ public class DataUsageControllerTest {
private NetworkStatsManager mNetworkStatsManager; private NetworkStatsManager mNetworkStatsManager;
@Mock @Mock
private Context mContext; private Context mContext;
private NetworkTemplate mNetworkTemplate;
private NetworkTemplate mNetworkTemplate2;
private NetworkTemplate mWifiNetworkTemplate;
private DataUsageController mController; private DataUsageController mController;
private NetworkStatsHistory mNetworkStatsHistory; private NetworkStatsHistory mNetworkStatsHistory;
@@ -83,23 +86,26 @@ public class DataUsageControllerTest {
.when(mSession).getHistoryForNetwork(any(NetworkTemplate.class), anyInt()); .when(mSession).getHistoryForNetwork(any(NetworkTemplate.class), anyInt());
ShadowSubscriptionManager.setDefaultDataSubscriptionId(mDefaultSubscriptionId); ShadowSubscriptionManager.setDefaultDataSubscriptionId(mDefaultSubscriptionId);
doReturn(SUB_ID).when(mTelephonyManager).getSubscriberId(); doReturn(SUB_ID).when(mTelephonyManager).getSubscriberId();
mNetworkTemplate = NetworkTemplate.buildTemplateMobileAll(SUB_ID);
mNetworkTemplate2 = NetworkTemplate.buildTemplateMobileAll(SUB_ID_2);
mWifiNetworkTemplate = NetworkTemplate.buildTemplateWifiWildcard();
} }
@Test @Test
public void getHistoricalUsageLevel_shouldQuerySummaryForDevice() throws Exception { public void getHistoricalUsageLevel_shouldQuerySummaryForDevice() throws Exception {
mController.getHistoricalUsageLevel(mWifiNetworkTemplate);
mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard()); verify(mNetworkStatsManager).querySummaryForDevice(eq(mWifiNetworkTemplate),
eq(0L) /* startTime */, anyLong() /* endTime */);
verify(mNetworkStatsManager).querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI),
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */);
} }
@Test @Test
public void getHistoricalUsageLevel_noUsageData_shouldReturn0() throws Exception { public void getHistoricalUsageLevel_noUsageData_shouldReturn0() throws Exception {
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI), when(mNetworkStatsManager.querySummaryForDevice(eq(mWifiNetworkTemplate),
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */)) eq(0L) /* startTime */, anyLong() /* endTime */))
.thenReturn(mock(NetworkStats.Bucket.class)); .thenReturn(mock(NetworkStats.Bucket.class));
assertThat(mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard())) assertThat(mController.getHistoricalUsageLevel(mWifiNetworkTemplate))
.isEqualTo(0L); .isEqualTo(0L);
} }
@@ -110,10 +116,10 @@ public class DataUsageControllerTest {
final NetworkStats.Bucket bucket = mock(NetworkStats.Bucket.class); final NetworkStats.Bucket bucket = mock(NetworkStats.Bucket.class);
when(bucket.getRxBytes()).thenReturn(receivedBytes); when(bucket.getRxBytes()).thenReturn(receivedBytes);
when(bucket.getTxBytes()).thenReturn(transmittedBytes); when(bucket.getTxBytes()).thenReturn(transmittedBytes);
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_WIFI), when(mNetworkStatsManager.querySummaryForDevice(eq(mWifiNetworkTemplate),
eq(SUB_ID), eq(0L) /* startTime */, anyLong() /* endTime */)).thenReturn(bucket); eq(0L) /* startTime */, anyLong() /* endTime */)).thenReturn(bucket);
assertThat(mController.getHistoricalUsageLevel(NetworkTemplate.buildTemplateWifiWildcard())) assertThat(mController.getHistoricalUsageLevel(mWifiNetworkTemplate))
.isEqualTo(receivedBytes + transmittedBytes); .isEqualTo(receivedBytes + transmittedBytes);
} }
@@ -126,9 +132,8 @@ public class DataUsageControllerTest {
final NetworkStats.Bucket defaultSubscriberBucket = mock(NetworkStats.Bucket.class); final NetworkStats.Bucket defaultSubscriberBucket = mock(NetworkStats.Bucket.class);
when(defaultSubscriberBucket.getRxBytes()).thenReturn(defaultSubRx); when(defaultSubscriberBucket.getRxBytes()).thenReturn(defaultSubRx);
when(defaultSubscriberBucket.getTxBytes()).thenReturn(defaultSubTx); when(defaultSubscriberBucket.getTxBytes()).thenReturn(defaultSubTx);
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_MOBILE), when(mNetworkStatsManager.querySummaryForDevice(eq(mNetworkTemplate), eq(0L)/* startTime */,
eq(SUB_ID), eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn( anyLong() /* endTime */)).thenReturn(defaultSubscriberBucket);
defaultSubscriberBucket);
// Now setup a stats bucket for a different, non-default subscription / subscriber ID. // Now setup a stats bucket for a different, non-default subscription / subscriber ID.
final long nonDefaultSubRx = 7654321L; final long nonDefaultSubRx = 7654321L;
@@ -137,25 +142,21 @@ public class DataUsageControllerTest {
when(nonDefaultSubscriberBucket.getRxBytes()).thenReturn(nonDefaultSubRx); when(nonDefaultSubscriberBucket.getRxBytes()).thenReturn(nonDefaultSubRx);
when(nonDefaultSubscriberBucket.getTxBytes()).thenReturn(nonDefaultSubTx); when(nonDefaultSubscriberBucket.getTxBytes()).thenReturn(nonDefaultSubTx);
final int explicitSubscriptionId = 55; final int explicitSubscriptionId = 55;
final String subscriberId2 = "Test Subscriber 2"; when(mNetworkStatsManager.querySummaryForDevice(eq(mNetworkTemplate2),
when(mNetworkStatsManager.querySummaryForDevice(eq(ConnectivityManager.TYPE_MOBILE), eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn(
eq(subscriberId2), eq(0L)/* startTime */, anyLong() /* endTime */)).thenReturn(
nonDefaultSubscriberBucket); nonDefaultSubscriberBucket);
doReturn(subscriberId2).when(mTelephonyManager).getSubscriberId(); doReturn(SUB_ID_2).when(mTelephonyManager).getSubscriberId();
// Now verify that when we're asking for stats on the non-default subscription, we get // Now verify that when we're asking for stats on the non-default subscription, we get
// the data back for that subscription and *not* the default one. // the data back for that subscription and *not* the default one.
mController.setSubscriptionId(explicitSubscriptionId); mController.setSubscriptionId(explicitSubscriptionId);
assertThat(mController.getHistoricalUsageLevel( assertThat(mController.getHistoricalUsageLevel(mNetworkTemplate2)).isEqualTo(
NetworkTemplate.buildTemplateMobileAll(subscriberId2))).isEqualTo(
nonDefaultSubRx + nonDefaultSubTx); nonDefaultSubRx + nonDefaultSubTx);
verify(mTelephonyManager).createForSubscriptionId(explicitSubscriptionId);
} }
@Test @Test
public void getTelephonyManager_shouldCreateWithExplicitSubId() throws Exception { public void getTelephonyManager_shouldCreateWithExplicitSubId() {
int explicitSubId = 1; int explicitSubId = 1;
TelephonyManager tmForSub1 = new TelephonyManager(mContext, explicitSubId); TelephonyManager tmForSub1 = new TelephonyManager(mContext, explicitSubId);
when(mTelephonyManager.createForSubscriptionId(eq(explicitSubId))).thenReturn(tmForSub1); when(mTelephonyManager.createForSubscriptionId(eq(explicitSubId))).thenReturn(tmForSub1);

View File

@@ -21,9 +21,9 @@ import static org.mockito.Mockito.when;
import android.app.usage.NetworkStatsManager; import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkPolicy; import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager; import android.net.NetworkPolicyManager;
import android.net.NetworkTemplate;
import android.os.RemoteException; import android.os.RemoteException;
import android.text.format.DateUtils; import android.text.format.DateUtils;
@@ -43,6 +43,8 @@ public class NetworkCycleChartDataLoaderTest {
private NetworkPolicyManager mNetworkPolicyManager; private NetworkPolicyManager mNetworkPolicyManager;
@Mock @Mock
private Context mContext; private Context mContext;
@Mock
private NetworkTemplate mNetworkTemplate;
private NetworkCycleChartDataLoader mLoader; private NetworkCycleChartDataLoader mLoader;
@@ -60,13 +62,12 @@ public class NetworkCycleChartDataLoaderTest {
public void recordUsage_shouldQueryNetworkSummaryForDevice() throws RemoteException { public void recordUsage_shouldQueryNetworkSummaryForDevice() throws RemoteException {
final long end = System.currentTimeMillis(); final long end = System.currentTimeMillis();
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
final int networkType = ConnectivityManager.TYPE_MOBILE;
final String subId = "TestSubscriber";
mLoader = NetworkCycleChartDataLoader.builder(mContext) mLoader = NetworkCycleChartDataLoader.builder(mContext)
.setSubscriberId(subId).build(); .setNetworkTemplate(mNetworkTemplate)
.build();
mLoader.recordUsage(start, end); mLoader.recordUsage(start, end);
verify(mNetworkStatsManager).querySummaryForDevice(networkType, subId, start, end); verify(mNetworkStatsManager).querySummaryForDevice(mNetworkTemplate, start, end);
} }
} }

View File

@@ -28,9 +28,9 @@ import static org.mockito.Mockito.when;
import android.app.usage.NetworkStatsManager; import android.app.usage.NetworkStatsManager;
import android.content.Context; import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkPolicy; import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager; import android.net.NetworkPolicyManager;
import android.net.NetworkTemplate;
import android.text.format.DateUtils; import android.text.format.DateUtils;
import org.junit.Before; import org.junit.Before;
@@ -42,6 +42,7 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class NetworkCycleDataForUidLoaderTest { public class NetworkCycleDataForUidLoaderTest {
private static final String SUB_ID = "Test Subscriber";
@Mock @Mock
private NetworkStatsManager mNetworkStatsManager; private NetworkStatsManager mNetworkStatsManager;
@@ -49,6 +50,7 @@ public class NetworkCycleDataForUidLoaderTest {
private NetworkPolicyManager mNetworkPolicyManager; private NetworkPolicyManager mNetworkPolicyManager;
@Mock @Mock
private Context mContext; private Context mContext;
private NetworkTemplate mNetworkTemplate;
private NetworkCycleDataForUidLoader mLoader; private NetworkCycleDataForUidLoader mLoader;
@@ -60,60 +62,58 @@ public class NetworkCycleDataForUidLoaderTest {
when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE)) when(mContext.getSystemService(Context.NETWORK_POLICY_SERVICE))
.thenReturn(mNetworkPolicyManager); .thenReturn(mNetworkPolicyManager);
when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]); when(mNetworkPolicyManager.getNetworkPolicies()).thenReturn(new NetworkPolicy[0]);
mNetworkTemplate = NetworkTemplate.buildTemplateMobileAll(SUB_ID);
} }
@Test @Test
public void recordUsage_shouldQueryNetworkDetailsForUidAndForegroundState() { public void recordUsage_shouldQueryNetworkDetailsForUidAndForegroundState() {
final long end = System.currentTimeMillis(); final long end = System.currentTimeMillis();
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
final int networkType = ConnectivityManager.TYPE_MOBILE;
final String subId = "TestSubscriber";
final int uid = 1; final int uid = 1;
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
.addUid(uid).setSubscriberId(subId).build()); .addUid(uid)
.setNetworkTemplate(mNetworkTemplate)
.build());
doReturn(1024L).when(mLoader).getTotalUsage(any()); doReturn(1024L).when(mLoader).getTotalUsage(any());
mLoader.recordUsage(start, end); mLoader.recordUsage(start, end);
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, uid); verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, uid);
verify(mNetworkStatsManager).queryDetailsForUidTagState( verify(mNetworkStatsManager).queryDetailsForUidTagState(
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND); mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
} }
@Test @Test
public void recordUsage_retrieveDetailIsFalse_shouldNotQueryNetworkForegroundState() { public void recordUsage_retrieveDetailIsFalse_shouldNotQueryNetworkForegroundState() {
final long end = System.currentTimeMillis(); final long end = System.currentTimeMillis();
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
final int networkType = ConnectivityManager.TYPE_MOBILE;
final String subId = "TestSubscriber";
final int uid = 1; final int uid = 1;
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
.setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build()); .setRetrieveDetail(false).addUid(uid).build());
doReturn(1024L).when(mLoader).getTotalUsage(any()); doReturn(1024L).when(mLoader).getTotalUsage(any());
mLoader.recordUsage(start, end); mLoader.recordUsage(start, end);
verify(mNetworkStatsManager, never()).queryDetailsForUidTagState( verify(mNetworkStatsManager, never()).queryDetailsForUidTagState(
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND); mNetworkTemplate, start, end, uid, TAG_NONE, STATE_FOREGROUND);
} }
@Test @Test
public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() { public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() {
final long end = System.currentTimeMillis(); final long end = System.currentTimeMillis();
final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
final int networkType = ConnectivityManager.TYPE_MOBILE;
final String subId = "TestSubscriber";
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
.addUid(1) .addUid(1)
.addUid(2) .addUid(2)
.addUid(3) .addUid(3)
.setSubscriberId(subId).build()); .setNetworkTemplate(mNetworkTemplate)
.build());
doReturn(1024L).when(mLoader).getTotalUsage(any()); doReturn(1024L).when(mLoader).getTotalUsage(any());
mLoader.recordUsage(start, end); mLoader.recordUsage(start, end);
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1); verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 1);
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2); verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 2);
verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3); verify(mNetworkStatsManager).queryDetailsForUid(mNetworkTemplate, start, end, 3);
} }
} }

View File

@@ -126,8 +126,6 @@ public class NetworkCycleDataLoaderTest {
when(mIterator.next()).thenReturn(cycle); when(mIterator.next()).thenReturn(cycle);
mLoader = spy(new NetworkCycleDataTestLoader(mContext)); mLoader = spy(new NetworkCycleDataTestLoader(mContext));
ReflectionHelpers.setField(mLoader, "mPolicy", mPolicy); ReflectionHelpers.setField(mLoader, "mPolicy", mPolicy);
ReflectionHelpers.setField(mLoader, "mNetworkType", networkType);
ReflectionHelpers.setField(mLoader, "mSubId", subId);
mLoader.loadPolicyData(); mLoader.loadPolicyData();