1186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi/* 2186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * Copyright (C) 2016 The Android Open Source Project 3186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * 4186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * use this file except in compliance with the License. You may obtain a copy of 6186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * the License at 7186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * 8186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * http://www.apache.org/licenses/LICENSE-2.0 9186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * 10186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * Unless required by applicable law or agreed to in writing, software 11186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * License for the specific language governing permissions and limitations under 14186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi * the License. 15186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi */ 16186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 17186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishipackage com.android.storagemanager.automatic; 18186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 19186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport android.app.job.JobInfo; 20186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport android.app.job.JobScheduler; 21186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport android.content.Context; 22186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport android.content.Intent; 2380f8ec612704639f209346f09c208eb3fc8cab56Daniel Nishiimport com.android.storagemanager.testing.TestingConstants; 24186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.junit.Before; 25186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.junit.Test; 26186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.junit.runner.RunWith; 27186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.mockito.ArgumentCaptor; 28186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.mockito.Mock; 29186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.mockito.MockitoAnnotations; 30186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.robolectric.RobolectricTestRunner; 31186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport org.robolectric.annotation.Config; 32186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 33186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport java.util.List; 34186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 352e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritzeimport static com.google.common.truth.Truth.assertThat; 36186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport static org.mockito.Mockito.times; 37186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport static org.mockito.Mockito.verify; 38186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport static org.mockito.Mockito.verifyNoMoreInteractions; 39186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishiimport static org.mockito.Mockito.when; 40186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 41186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi@RunWith(RobolectricTestRunner.class) 42fff597ce52cbc1693f1a3d781991e19c103e08f2Daniel Nishi@Config(manifest=TestingConstants.MANIFEST, sdk=TestingConstants.SDK_VERSION) 43186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishipublic class AutomaticStorageBroadcastReceiverTest { 44186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi @Mock private Context mMockContext; 45186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi @Mock private JobScheduler mJobScheduler; 46186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi @Mock private Intent mMockIntent; 47186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 48186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi @Before 49186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi public void setUp() { 50186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi MockitoAnnotations.initMocks(this); 51186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi } 52186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 53186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi @Test 54186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi public void testSetupJobServicesOnBoot() { 55186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi when(mMockContext.getSystemService(Context.JOB_SCHEDULER_SERVICE)).thenReturn( 56186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi mJobScheduler); 57186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 58186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi AutomaticStorageBroadcastReceiver br = new AutomaticStorageBroadcastReceiver(); 59186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi br.onReceive(mMockContext, mMockIntent); 60186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 61186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi // Verify that the JobScheduler scheduled two jobs. 62186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi ArgumentCaptor<JobInfo> jobCaptor = ArgumentCaptor.forClass(JobInfo.class); 63d10936319dce2526d8072db81b4876f73834d93fDaniel Nishi verify(mJobScheduler, times(1)).schedule(jobCaptor.capture()); 64186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi verifyNoMoreInteractions(mJobScheduler); 65186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi 66186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi // Ensure that the jobs are the ones we expect. 67186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi List<JobInfo> capturedJobs = jobCaptor.getAllValues(); 68186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi JobInfo asmJob = capturedJobs.get(0); 692e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze assertThat(asmJob.getService().getClassName()) 702e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze .isEqualTo(AutomaticStorageManagementJobService.class.getName()); 712e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze assertThat(asmJob.isRequireCharging()).isTrue(); 722e95e842919a07037094742b9b8c70fbd8be2d2eMatthew Fritze assertThat(asmJob.isRequireDeviceIdle()).isTrue(); 73186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi } 74186ae94adf25d887a0f0582ad699b04f2b035ff1Daniel Nishi} 75