BackupManagerMonitorUtilsTest.java revision 66ff1d62c02cd70d660b0fa99715c711faa635e9
166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov/*
266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * Copyright (C) 2017 The Android Open Source Project
366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov *
466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * Licensed under the Apache License, Version 2.0 (the "License");
566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * you may not use this file except in compliance with the License.
666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * You may obtain a copy of the License at
766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov *
866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov *      http://www.apache.org/licenses/LICENSE-2.0
966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov *
1066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * Unless required by applicable law or agreed to in writing, software
1166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * distributed under the License is distributed on an "AS IS" BASIS,
1266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * See the License for the specific language governing permissions and
1466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov * limitations under the License
1566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov */
1666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
1766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovpackage com.android.server.backup.utils;
1866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
1966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_CATEGORY;
2066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_ID;
2166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_NAME;
2266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static android.app.backup.BackupManagerMonitor.EXTRA_LOG_EVENT_PACKAGE_VERSION;
2366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
2466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static com.google.common.truth.Truth.assertThat;
2566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
2666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static org.mockito.ArgumentMatchers.any;
2766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static org.mockito.Mockito.doThrow;
2866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport static org.mockito.Mockito.verify;
2966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
3066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport android.app.backup.IBackupManagerMonitor;
3166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport android.content.pm.PackageInfo;
3266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport android.os.Bundle;
3366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport android.os.RemoteException;
3466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
3566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport org.junit.Before;
3666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport org.junit.Test;
3766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport org.mockito.ArgumentCaptor;
3866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport org.mockito.Mock;
3966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovimport org.mockito.MockitoAnnotations;
4066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
4166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikovpublic class BackupManagerMonitorUtilsTest {
4266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Mock private IBackupManagerMonitor mMonitorMock;
4366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
4466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Before
4566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void setUp() {
4666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        MockitoAnnotations.initMocks(this);
4766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
4866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
4966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
5066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void monitorEvent_monitorIsNull_returnsNull() throws Exception {
5166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        IBackupManagerMonitor result = BackupManagerMonitorUtils.monitorEvent(null, 0, null, 0,
5266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov                null);
5366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
5466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isNull();
5566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
5666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
5766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
5866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void monitorEvent_monitorOnEventThrows_returnsNull() throws Exception {
5966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        doThrow(new RemoteException()).when(mMonitorMock).onEvent(any(Bundle.class));
6066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
6166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        IBackupManagerMonitor result = BackupManagerMonitorUtils.monitorEvent(mMonitorMock, 0, null,
6266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov                0, null);
6366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
6466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        verify(mMonitorMock).onEvent(any(Bundle.class));
6566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isNull();
6666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
6766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
6866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
6966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void monitorEvent_packageAndExtrasAreNull_fillsBundleCorrectly() throws Exception {
7066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        IBackupManagerMonitor result = BackupManagerMonitorUtils.monitorEvent(mMonitorMock, 1, null,
7166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov                2, null);
7266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
7366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isEqualTo(mMonitorMock);
7466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
7566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        verify(mMonitorMock).onEvent(bundleCaptor.capture());
7666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle eventBundle = bundleCaptor.getValue();
7766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.size()).isEqualTo(2);
7866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt(EXTRA_LOG_EVENT_ID)).isEqualTo(1);
7966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt(EXTRA_LOG_EVENT_CATEGORY)).isEqualTo(2);
8066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
8166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
8266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
8366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void monitorEvent_packageAndExtrasAreNotNull_fillsBundleCorrectly() throws Exception {
8466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        PackageInfo packageInfo = new PackageInfo();
8566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        packageInfo.packageName = "test.package";
8666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        packageInfo.versionCode = 3;
8766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle extras = new Bundle();
8866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        extras.putInt("key1", 4);
8966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        extras.putString("key2", "value2");
9066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
9166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        IBackupManagerMonitor result = BackupManagerMonitorUtils.monitorEvent(mMonitorMock, 1,
9266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov                packageInfo, 2, extras);
9366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
9466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isEqualTo(mMonitorMock);
9566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
9666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        verify(mMonitorMock).onEvent(bundleCaptor.capture());
9766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle eventBundle = bundleCaptor.getValue();
9866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.size()).isEqualTo(6);
9966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt(EXTRA_LOG_EVENT_ID)).isEqualTo(1);
10066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt(EXTRA_LOG_EVENT_CATEGORY)).isEqualTo(2);
10166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getString(EXTRA_LOG_EVENT_PACKAGE_NAME)).isEqualTo("test.package");
10266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt(EXTRA_LOG_EVENT_PACKAGE_VERSION)).isEqualTo(3);
10366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getInt("key1")).isEqualTo(4);
10466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(eventBundle.getString("key2")).isEqualTo("value2");
10566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
10666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
10766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
10866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraString_bundleExists_fillsBundleCorrectly() throws Exception {
10966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle bundle = new Bundle();
11066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
11166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(bundle, "key", "value");
11266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
11366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isEqualTo(bundle);
11466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
11566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getString("key")).isEqualTo("value");
11666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
11766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
11866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
11966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraString_bundleDoesNotExist_fillsBundleCorrectly()
12066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov            throws Exception {
12166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(null, "key", "value");
12266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
12366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isNotNull();
12466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
12566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getString("key")).isEqualTo("value");
12666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
12766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
12866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
12966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
13066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraLong_bundleExists_fillsBundleCorrectly() throws Exception {
13166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle bundle = new Bundle();
13266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
13366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(bundle, "key", 123);
13466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
13566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isEqualTo(bundle);
13666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
13766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getLong("key")).isEqualTo(123);
13866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
13966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
14066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
14166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraLong_bundleDoesNotExist_fillsBundleCorrectly() throws Exception {
14266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(null, "key", 123);
14366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
14466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isNotNull();
14566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
14666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getLong("key")).isEqualTo(123);
14766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
14866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
14966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
15066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraBoolean_bundleExists_fillsBundleCorrectly() throws Exception {
15166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle bundle = new Bundle();
15266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
15366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(bundle, "key", true);
15466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
15566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isEqualTo(bundle);
15666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
15766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getBoolean("key")).isTrue();
15866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
15966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
16066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    @Test
16166ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    public void putMonitoringExtraBoolean_bundleDoesNotExist_fillsBundleCorrectly()
16266ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov            throws Exception {
16366ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        Bundle result = BackupManagerMonitorUtils.putMonitoringExtra(null, "key", true);
16466ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
16566ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result).isNotNull();
16666ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.size()).isEqualTo(1);
16766ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov        assertThat(result.getBoolean("key")).isTrue();
16866ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov    }
16966ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov
17066ff1d62c02cd70d660b0fa99715c711faa635e9Artem Iglikov}