/* * Copyright (C) 2022 The Android Open Source Project *i * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.net; import static android.text.format.DateUtils.HOUR_IN_MILLIS; import static com.android.testutils.DevSdkIgnoreRuleKt.SC_V2; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyLong; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import android.net.NetworkStats; import android.os.DropBoxManager; import androidx.test.filters.SmallTest; import com.android.internal.util.FileRotator; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import java.io.IOException; @RunWith(DevSdkIgnoreRunner.class) @SmallTest @DevSdkIgnoreRule.IgnoreUpTo(SC_V2) public final class NetworkStatsRecorderTest { private static final String TAG = NetworkStatsRecorderTest.class.getSimpleName(); private static final String TEST_PREFIX = "test"; @Mock private DropBoxManager mDropBox; @Mock private NetworkStats.NonMonotonicObserver mObserver; @Before public void setUp() { MockitoAnnotations.initMocks(this); } private NetworkStatsRecorder buildRecorder(FileRotator rotator, boolean wipeOnError) { return new NetworkStatsRecorder(rotator, mObserver, mDropBox, TEST_PREFIX, HOUR_IN_MILLIS, false /* includeTags */, wipeOnError); } @Test public void testWipeOnError() throws Exception { final FileRotator rotator = mock(FileRotator.class); final NetworkStatsRecorder wipeOnErrorRecorder = buildRecorder(rotator, true); // Assuming that the rotator gets an exception happened when read data. doThrow(new IOException()).when(rotator).readMatching(any(), anyLong(), anyLong()); wipeOnErrorRecorder.getOrLoadPartialLocked(Long.MIN_VALUE, Long.MAX_VALUE); // Verify that the files will be deleted. verify(rotator, times(1)).deleteAll(); reset(rotator); final NetworkStatsRecorder noWipeOnErrorRecorder = buildRecorder(rotator, false); doThrow(new IOException()).when(rotator).readMatching(any(), anyLong(), anyLong()); noWipeOnErrorRecorder.getOrLoadPartialLocked(Long.MIN_VALUE, Long.MAX_VALUE); // Verify that the rotator won't delete files. verify(rotator, never()).deleteAll(); } }