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