/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.tradefed.targetprep; import com.android.tradefed.build.DeviceBuildInfo; import com.android.tradefed.build.IBuildInfo; import com.android.tradefed.build.IDeviceBuildInfo; import com.android.tradefed.device.DeviceNotAvailableException; import com.android.tradefed.device.DeviceUnresponsiveException; import com.android.tradefed.device.ITestDevice; import com.android.tradefed.device.ITestDevice.RecoveryMode; import com.android.tradefed.targetprep.IDeviceFlasher; import com.android.tradefed.targetprep.IDeviceFlasher.UserDataFlashOption; import com.android.tradefed.util.FileUtil; import junit.framework.TestCase; import org.easymock.EasyMock; import java.io.File; import java.util.Arrays; /** * Unit tests for {@link DeviceFlashPreparer}. */ public class DeviceFlashPreparerTest extends TestCase { private IDeviceFlasher mMockFlasher; private DeviceFlashPreparer mDeviceFlashPreparer; private ITestDevice mMockDevice; private IDeviceBuildInfo mMockBuildInfo; private File mTmpDir; /** * {@inheritDoc} */ @Override protected void setUp() throws Exception { super.setUp(); mMockFlasher = EasyMock.createMock(IDeviceFlasher.class); mMockDevice = EasyMock.createMock(ITestDevice.class); EasyMock.expect(mMockDevice.getSerialNumber()).andReturn("foo").anyTimes(); mMockBuildInfo = new DeviceBuildInfo("0", "", ""); mDeviceFlashPreparer = new DeviceFlashPreparer() { @Override protected IDeviceFlasher createFlasher(ITestDevice device) { return mMockFlasher; } @Override int getDeviceBootPollTimeMs() { return 100; } }; mDeviceFlashPreparer.setDeviceBootTime(100); // expect this call mMockFlasher.setUserDataFlashOption(UserDataFlashOption.FLASH); mTmpDir = FileUtil.createTempDir("tmp"); } /** * {@inheritDoc} */ @Override protected void tearDown() throws Exception { FileUtil.recursiveDelete(mTmpDir); super.tearDown(); } /** * Simple normal case test for {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)}. */ public void testSetup() throws Exception { doSetupExpectations(); EasyMock.replay(mMockFlasher, mMockDevice); mDeviceFlashPreparer.setUp(mMockDevice, mMockBuildInfo); EasyMock.verify(mMockFlasher, mMockDevice); } /** * Set EasyMock expectations for a normal setup call */ private void doSetupExpectations() throws TargetSetupError, DeviceNotAvailableException { mMockDevice.setRecoveryMode(RecoveryMode.ONLINE); mMockFlasher.overrideDeviceOptions(mMockDevice); mMockFlasher.setForceSystemFlash(false); mMockFlasher.setDataWipeSkipList(Arrays.asList(new String[]{})); mMockFlasher.flash(mMockDevice, mMockBuildInfo); mMockDevice.waitForDeviceOnline(); EasyMock.expect(mMockDevice.isEncryptionSupported()).andStubReturn(Boolean.TRUE); EasyMock.expect(mMockDevice.isDeviceEncrypted()).andStubReturn(Boolean.FALSE); mMockDevice.clearLogcat(); mMockDevice.waitForDeviceAvailable(EasyMock.anyLong()); mMockDevice.setRecoveryMode(RecoveryMode.AVAILABLE); mMockDevice.postBootSetup(); } /** * Test {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when a non IDeviceBuildInfo type * is provided */ public void testSetUp_nonDevice() throws Exception { try { mDeviceFlashPreparer.setUp(mMockDevice, EasyMock.createMock(IBuildInfo.class)); fail("IllegalArgumentException not thrown"); } catch (IllegalArgumentException e) { // expected } } /** * Test {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when build does not boot */ public void testSetup_buildError() throws Exception { mMockDevice.setRecoveryMode(RecoveryMode.ONLINE); mMockFlasher.overrideDeviceOptions(mMockDevice); mMockFlasher.setForceSystemFlash(false); mMockFlasher.setDataWipeSkipList(Arrays.asList(new String[]{})); mMockFlasher.flash(mMockDevice, mMockBuildInfo); mMockDevice.waitForDeviceOnline(); EasyMock.expect(mMockDevice.isEncryptionSupported()).andStubReturn(Boolean.TRUE); EasyMock.expect(mMockDevice.isDeviceEncrypted()).andStubReturn(Boolean.FALSE); mMockDevice.clearLogcat(); mMockDevice.waitForDeviceAvailable(EasyMock.anyLong()); EasyMock.expectLastCall().andThrow(new DeviceUnresponsiveException("foo")); mMockDevice.setRecoveryMode(RecoveryMode.AVAILABLE); EasyMock.replay(mMockFlasher, mMockDevice); try { mDeviceFlashPreparer.setUp(mMockDevice, mMockBuildInfo); fail("DeviceFlashPreparerTest not thrown"); } catch (BuildError e) { // expected; use the general version to make absolutely sure that // DeviceFailedToBootError properly masquerades as a BuildError. assertTrue(e instanceof DeviceFailedToBootError); } EasyMock.verify(mMockFlasher, mMockDevice); } }