1 package com.android.tradefed.targetprep; 2 3 import com.android.tradefed.build.IBuildInfo; 4 import com.android.tradefed.build.IDeviceBuildInfo; 5 import com.android.tradefed.device.DeviceNotAvailableException; 6 import com.android.tradefed.device.ITestDevice; 7 import com.android.tradefed.util.FileUtil; 8 9 import junit.framework.TestCase; 10 11 import org.easymock.EasyMock; 12 13 import java.io.File; 14 15 /** 16 * Unit tests for {@link AllTestAppsInstallSetup} 17 */ 18 public class AllTestAppsInstallSetupTest extends TestCase { 19 20 private static final String SERIAL = "SERIAL"; 21 private AllTestAppsInstallSetup mPrep; 22 private IDeviceBuildInfo mMockBuildInfo; 23 private ITestDevice mMockTestDevice; 24 25 /** 26 * {@inheritDoc} 27 */ 28 @Override 29 public void setUp() throws Exception { 30 super.setUp(); 31 mPrep = new AllTestAppsInstallSetup(); 32 mMockBuildInfo = EasyMock.createMock(IDeviceBuildInfo.class); 33 mMockTestDevice = EasyMock.createMock(ITestDevice.class); 34 EasyMock.expect(mMockTestDevice.getSerialNumber()).andStubReturn(SERIAL); 35 EasyMock.expect(mMockTestDevice.getDeviceDescriptor()).andStubReturn(null); 36 } 37 38 public void testNotIDeviceBuildInfo() throws DeviceNotAvailableException { 39 IBuildInfo mockBuildInfo = EasyMock.createMock(IBuildInfo.class); 40 EasyMock.replay(mockBuildInfo, mMockTestDevice); 41 try { 42 mPrep.setUp(mMockTestDevice, mockBuildInfo); 43 fail("Should have thrown a TargetSetupError"); 44 } catch (TargetSetupError e) { 45 // expected 46 assertEquals("Invalid buildInfo, expecting an IDeviceBuildInfo null", 47 e.getMessage()); 48 } 49 EasyMock.verify(mockBuildInfo, mMockTestDevice); 50 } 51 52 public void testNoTestDir() throws DeviceNotAvailableException { 53 EasyMock.expect(mMockBuildInfo.getTestsDir()).andStubReturn(new File("")); 54 EasyMock.replay(mMockBuildInfo, mMockTestDevice); 55 try { 56 mPrep.setUp(mMockTestDevice, mMockBuildInfo); 57 fail("Should have thrown a TargetSetupError"); 58 } catch (TargetSetupError e) { 59 assertEquals("Failed to find a valid test zip directory. null", 60 e.getMessage()); 61 } 62 EasyMock.verify(mMockBuildInfo, mMockTestDevice); 63 } 64 65 public void testNullTestDir() throws DeviceNotAvailableException { 66 67 EasyMock.replay(mMockBuildInfo, mMockTestDevice); 68 try { 69 mPrep.installApksRecursively(null, mMockTestDevice); 70 fail("Should have thrown a TargetSetupError"); 71 } catch (TargetSetupError e) { 72 assertEquals("Invalid test zip directory! null", e.getMessage()); 73 } 74 EasyMock.verify(mMockBuildInfo, mMockTestDevice); 75 } 76 77 public void testSetup() throws Exception { 78 File testDir = FileUtil.createTempDir("TestAppSetupTest"); 79 // fake hierarchy of directory and files 80 FileUtil.createTempFile("fakeApk", ".apk", testDir); 81 FileUtil.createTempFile("fakeApk2", ".apk", testDir); 82 FileUtil.createTempFile("notAnApk", ".txt", testDir); 83 File subTestDir = FileUtil.createTempDir("SubTestAppSetupTest", testDir); 84 FileUtil.createTempFile("subfakeApk", ".apk", subTestDir); 85 try { 86 EasyMock.expect(mMockBuildInfo.getTestsDir()).andReturn(testDir); 87 EasyMock.expect(mMockTestDevice.installPackage((File)EasyMock.anyObject(), 88 EasyMock.eq(true))).andReturn(null).times(3); 89 EasyMock.replay(mMockBuildInfo, mMockTestDevice); 90 mPrep.setUp(mMockTestDevice, mMockBuildInfo); 91 EasyMock.verify(mMockBuildInfo, mMockTestDevice); 92 } finally { 93 FileUtil.recursiveDelete(testDir); 94 } 95 } 96 97 public void testInstallFailure() throws DeviceNotAvailableException { 98 final String failure = "INSTALL_PARSE_FAILED_MANIFEST_MALFORMED"; 99 final String file = "TEST"; 100 EasyMock.expect(mMockTestDevice.installPackage((File)EasyMock.anyObject(), 101 EasyMock.eq(true))).andReturn(failure); 102 EasyMock.replay(mMockBuildInfo, mMockTestDevice); 103 try { 104 mPrep.installApk(new File("TEST"), mMockTestDevice); 105 fail("Should have thrown an exception"); 106 } catch (TargetSetupError e) { 107 String expected = String.format("Failed to install %s on %s. Reason: '%s' " 108 + "null", file, SERIAL, failure); 109 assertEquals(expected, e.getMessage()); 110 } 111 EasyMock.verify(mMockBuildInfo, mMockTestDevice); 112 } 113 } 114