Java tutorial
/* * Copyright (C) 2016 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.build; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import com.android.tradefed.util.FileUtil; import com.android.tradefed.util.ZipUtil2; import org.apache.commons.compress.archivers.zip.ZipFile; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.File; /** * Unit tests for {@link LocalDeviceBuildProvider} */ public class LocalDeviceBuildProviderTest { private static final String ANDROID_INFO = "require board=board\n" + "require version-bootloader=BHZ11h\n" + "require version-baseband=M8994F-2.6.36.2.20"; private static final String BOOT_IMG = "boot_img"; private static final String RADIO_IMG = "radio_img"; private static final String BOOTLOADER_IMG = "bootloader_img"; private static final String SYSTEM_IMG = "system_img"; private LocalDeviceBuildProvider mLocalDeviceBuildProvider = null; private File mTmpDir = null; private File mBuildDir = null; private File mTestDir = null; private File mAndroidInfo = null; private File mBootImg = null; private File mRadioImg = null; private File mBootloaderImg = null; private File mSystemImg = null; @Before public void setUp() throws Exception { mTmpDir = FileUtil.createTempDir("tmp"); mBuildDir = FileUtil.createTempDir("buildOutput"); mTestDir = FileUtil.createTempDir("tests"); mAndroidInfo = new File(mBuildDir, "android-info.txt"); FileUtil.writeToFile(ANDROID_INFO, mAndroidInfo); mBootImg = new File(mBuildDir, "boot.img"); FileUtil.writeToFile(BOOT_IMG, mBootImg); mRadioImg = new File(mBuildDir, "radio.img"); FileUtil.writeToFile(RADIO_IMG, mRadioImg); mBootloaderImg = new File(mBuildDir, "bootloader.img"); FileUtil.writeToFile(BOOTLOADER_IMG, mBootloaderImg); mSystemImg = new File(mBuildDir, "system.img"); FileUtil.writeToFile(SYSTEM_IMG, mSystemImg); mLocalDeviceBuildProvider = new LocalDeviceBuildProvider(); mLocalDeviceBuildProvider.setBuildDir(mBuildDir); } @After public void tearDown() throws Exception { FileUtil.recursiveDelete(mTmpDir); FileUtil.recursiveDelete(mBuildDir); FileUtil.recursiveDelete(mTestDir); } @Test public void testGetBuild() throws Exception { File imgFile = new File(mBuildDir, "img.zip"); mLocalDeviceBuildProvider = new LocalDeviceBuildProvider() { @Override void setDeviceImageFile(DeviceBuildInfo buildInfo) { buildInfo.setDeviceImageFile(imgFile, buildInfo.getBuildId()); } @Override void parseBootloaderAndRadioVersions(DeviceBuildInfo buildInfo) { // do nothing } }; mLocalDeviceBuildProvider.setBuildDir(mBuildDir); DeviceBuildInfo info = (DeviceBuildInfo) mLocalDeviceBuildProvider.getBuild(); assertEquals(imgFile, info.getDeviceImageFile()); } @Test public void testGetBuild_noImage() throws Exception { File buildImageZip = new File(mTmpDir, "image.zip"); mLocalDeviceBuildProvider = new LocalDeviceBuildProvider() { @Override File createBuildImageZip() throws BuildRetrievalError { return buildImageZip; } @Override void parseBootloaderAndRadioVersions(DeviceBuildInfo buildInfo) { // do nothing } }; mLocalDeviceBuildProvider.setBuildDir(mBuildDir); DeviceBuildInfo info = (DeviceBuildInfo) mLocalDeviceBuildProvider.getBuild(); assertEquals(buildImageZip, info.getDeviceImageFile()); } @Test public void testCreateBuildImageZip() throws Exception { File buildImageZip = mLocalDeviceBuildProvider.createBuildImageZip(); try (ZipFile zip = new ZipFile(buildImageZip)) { assertNotNull(buildImageZip); ZipUtil2.extractZip(zip, mTmpDir); File extractedFile1 = new File(mTmpDir, mAndroidInfo.getName()); File extractedFile2 = new File(mTmpDir, mBootImg.getName()); File extractedFile3 = new File(mTmpDir, mSystemImg.getName()); assertTrue(extractedFile1.exists()); assertTrue(extractedFile2.exists()); assertTrue(extractedFile3.exists()); assertTrue(FileUtil.compareFileContents(mAndroidInfo, extractedFile1)); assertTrue(FileUtil.compareFileContents(mBootImg, extractedFile2)); assertTrue(FileUtil.compareFileContents(mSystemImg, extractedFile3)); } finally { FileUtil.deleteFile(buildImageZip); } } @Test public void testSetRadioImage() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); mLocalDeviceBuildProvider.setRadioVersion("radio_version"); mLocalDeviceBuildProvider.setRadioImage(buildInfo); assertEquals(mRadioImg, buildInfo.getBasebandImageFile()); assertEquals("radio_version", buildInfo.getBasebandVersion()); } @Test public void testSetBootloaderImage() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); mLocalDeviceBuildProvider.setBootloaderVersion("bootloader_version"); mLocalDeviceBuildProvider.setBootloaderImage(buildInfo); assertEquals(mBootloaderImg, buildInfo.getBootloaderImageFile()); assertEquals("bootloader_version", buildInfo.getBootloaderVersion()); } @Test public void testSetDeviceImageFile() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); File buildImageZip = new File(mBuildDir, "board-img-12345.zip"); FileUtil.writeToFile("build_image", buildImageZip); mLocalDeviceBuildProvider.setDeviceImageFile(buildInfo); assertEquals(buildImageZip, buildInfo.getDeviceImageFile()); } @Test public void testSetTestsDir() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); mLocalDeviceBuildProvider.setTestsDir(buildInfo); // No test dir specified, should be null assertNull(buildInfo.getTestsDir()); } @Test public void testSetTestsDir_givenTestDir() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); File testFile = new File(mTestDir, "some-test"); FileUtil.writeToFile("tests", testFile); mLocalDeviceBuildProvider.setTestDir(mTestDir); mLocalDeviceBuildProvider.setTestsDir(buildInfo); File testDir = buildInfo.getTestsDir(); assertEquals(mTestDir, testDir); File extractedTestFile = new File(testDir, testFile.getName()); assertTrue(extractedTestFile.exists()); assertTrue(FileUtil.compareFileContents(testFile, extractedTestFile)); } @Test public void testSetTestsDir_givenTestDirPattern() throws Exception { DeviceBuildInfo buildInfo = new DeviceBuildInfo(); File testDir = FileUtil.createTempDir("test_dir", mBuildDir); mLocalDeviceBuildProvider.setTestDirPattern(testDir.getName()); mLocalDeviceBuildProvider.setTestsDir(buildInfo); assertEquals(testDir, buildInfo.getTestsDir()); } @Test public void testFindFileInDir() throws Exception { File fileFound = mLocalDeviceBuildProvider.findFileInDir(mAndroidInfo.getName()); assertEquals(mAndroidInfo, fileFound); } @Test(expected = BuildRetrievalError.class) public void testFindFileInDir_multipleFiles() throws Exception { mLocalDeviceBuildProvider.findFileInDir(".*\\.img"); } @Test public void testFindFileInDir_noneFound() throws Exception { File fileFound = mLocalDeviceBuildProvider.findFileInDir("this_should_not_exist"); assertNull(fileFound); } }