Home | History | Annotate | Download | only in targetprep
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 package com.android.tradefed.targetprep;
     17 
     18 import com.android.tradefed.build.IDeviceBuildInfo;
     19 import com.android.tradefed.device.DeviceNotAvailableException;
     20 import com.android.tradefed.device.ITestDevice;
     21 import com.android.tradefed.util.FileUtil;
     22 
     23 import org.easymock.EasyMock;
     24 import org.junit.After;
     25 import org.junit.Before;
     26 import org.junit.Test;
     27 import org.junit.runner.RunWith;
     28 import org.junit.runners.JUnit4;
     29 
     30 import java.io.File;
     31 import java.util.ArrayList;
     32 import java.util.Collection;
     33 
     34 import static org.junit.Assert.*;
     35 
     36 /**
     37  * Unit tests for {@link InstallApkSetup}
     38  */
     39 @RunWith(JUnit4.class)
     40 public class InstallApkSetupTest {
     41 
     42     private static final String SERIAL = "SERIAL";
     43     private InstallApkSetup mInstallApkSetup;
     44     private IDeviceBuildInfo mMockBuildInfo;
     45     private ITestDevice mMockTestDevice;
     46 
     47     private File testDir = null;
     48     private File testFile = null;
     49     private Collection<File> testCollectionFiles = new ArrayList<File>();
     50 
     51     @Before
     52     public void setUp() throws Exception {
     53         mInstallApkSetup = new InstallApkSetup();
     54         mMockBuildInfo = EasyMock.createMock(IDeviceBuildInfo.class);
     55         mMockTestDevice = EasyMock.createMock(ITestDevice.class);
     56         EasyMock.expect(mMockTestDevice.getSerialNumber()).andStubReturn(SERIAL);
     57         EasyMock.expect(mMockTestDevice.getDeviceDescriptor()).andStubReturn(null);
     58 
     59         testDir = FileUtil.createTempDir("TestApkDir");
     60         testFile = FileUtil.createTempFile("File", ".apk", testDir);
     61     }
     62 
     63     @After
     64     public void tearDown() throws Exception {
     65         testCollectionFiles.clear();
     66         FileUtil.recursiveDelete(testDir);
     67     }
     68 
     69     /**
     70      * Test {@link InstallApkSetupTest#setUp()} by successfully installing 2 Apk files
     71      */
     72     @Test
     73     public void testSetup() throws DeviceNotAvailableException, BuildError, TargetSetupError {
     74         testCollectionFiles.add(testFile);
     75         testCollectionFiles.add(testFile);
     76         mInstallApkSetup.setApkPaths(testCollectionFiles);
     77         EasyMock.expect(mMockTestDevice.installPackage((File) EasyMock.anyObject(),
     78                 EasyMock.eq(true))).andReturn(null).times(2);
     79         EasyMock.replay(mMockBuildInfo, mMockTestDevice);
     80         mInstallApkSetup.setUp(mMockTestDevice, mMockBuildInfo);
     81         EasyMock.verify(mMockBuildInfo, mMockTestDevice);
     82     }
     83 
     84     /**
     85      * Test {@link InstallApkSetupTest#setUp()} by installing a non-existing Apk
     86      */
     87     @Test
     88     public void testNonExistingApk() throws DeviceNotAvailableException, BuildError {
     89         testCollectionFiles.add(testFile);
     90         FileUtil.recursiveDelete(testFile);
     91         mInstallApkSetup.setApkPaths(testCollectionFiles);
     92         EasyMock.replay(mMockBuildInfo, mMockTestDevice);
     93         try {
     94             mInstallApkSetup.setUp(mMockTestDevice, mMockBuildInfo);
     95             fail("should have failed due to missing APK file");
     96         } catch (TargetSetupError expected) {
     97             String refMessage = String.format("%s does not exist null", testFile.getAbsolutePath());
     98             assertEquals(refMessage, expected.getMessage());
     99         }
    100         EasyMock.verify(mMockBuildInfo, mMockTestDevice);
    101     }
    102 
    103     /**
    104      * Test {@link InstallApkSetupTest#setUp()} by having an installation failure
    105      * but not throwing any exception
    106      */
    107     @Test
    108     public void testInstallFailureNoThrow() throws DeviceNotAvailableException, BuildError,
    109             TargetSetupError {
    110         testCollectionFiles.add(testFile);
    111         mInstallApkSetup.setApkPaths(testCollectionFiles);
    112 
    113         EasyMock.expect(mMockTestDevice.installPackage((File) EasyMock.anyObject(),
    114                 EasyMock.eq(true))).andReturn(String.format("%s (Permission denied)",
    115                 testFile.getAbsolutePath())).times(1);
    116         EasyMock.replay(mMockBuildInfo, mMockTestDevice);
    117         mInstallApkSetup.setUp(mMockTestDevice, mMockBuildInfo);
    118         EasyMock.verify(mMockBuildInfo, mMockTestDevice);
    119     }
    120 
    121     /**
    122      * Test {@link InstallApkSetupTest#setUp()} by having an installation failure
    123      * and throwing an exception
    124      */
    125     @Test
    126     public void testInstallFailureThrow() throws DeviceNotAvailableException, BuildError {
    127         testCollectionFiles.add(testFile);
    128         mInstallApkSetup.setApkPaths(testCollectionFiles);
    129         mInstallApkSetup.setThrowIfInstallFail(true);
    130 
    131         EasyMock.expect(mMockTestDevice.installPackage((File) EasyMock.anyObject(),
    132                 EasyMock.eq(true))).andReturn(String.format("%s (Permission denied)",
    133                 testFile.getAbsolutePath())).times(1);
    134         EasyMock.replay(mMockBuildInfo, mMockTestDevice);
    135         try {
    136             mInstallApkSetup.setUp(mMockTestDevice, mMockBuildInfo);
    137             fail("should have failed due to installation failure");
    138         } catch (TargetSetupError expected) {
    139             String refMessage = String.format("Stopping test: failed to install %s on device %s. " +
    140                     "Reason: %s (Permission denied) null", testFile.getAbsolutePath(),
    141                     SERIAL, testFile.getAbsolutePath());
    142             assertEquals(refMessage, expected.getMessage());
    143         }
    144         EasyMock.verify(mMockBuildInfo, mMockTestDevice);
    145     }
    146 }
    147