1 /* 2 * Copyright (C) 2018 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 17 package com.android.tradefed.device.metric; 18 19 import static org.junit.Assert.assertTrue; 20 21 import com.android.tradefed.build.IBuildInfo; 22 import com.android.tradefed.device.ITestDevice; 23 import com.android.tradefed.invoker.IInvocationContext; 24 import com.android.tradefed.result.ITestInvocationListener; 25 import com.android.tradefed.util.FileUtil; 26 27 import org.easymock.EasyMock; 28 import org.junit.Before; 29 import org.junit.Test; 30 import org.junit.runner.RunWith; 31 import org.junit.runners.JUnit4; 32 33 import java.io.File; 34 import java.util.ArrayList; 35 import java.util.HashMap; 36 import java.util.List; 37 import java.util.Map; 38 39 /** 40 * Unit tests for {@link VtsHalTraceCollector}. 41 */ 42 @RunWith(JUnit4.class) 43 public class VtsHalTraceCollectorTest { 44 private static final String VTS_TMP_DIR = VtsHalTraceCollector.VTS_TMP_DIR; 45 private static final String TRACE_PATH = VtsHalTraceCollector.TRACE_PATH; 46 47 private Map<String, String> mBuildAttributes = new HashMap<>(); 48 private List<IBuildInfo> mBuildInfos = new ArrayList<IBuildInfo>(); 49 private List<ITestDevice> mDevices = new ArrayList<ITestDevice>(); 50 private VtsHalTraceCollector mCollect; 51 private IBuildInfo mMockBuildInfo; 52 private ITestDevice mMockDevice; 53 private IInvocationContext mMockContext; 54 private ITestInvocationListener mMockListener; 55 56 @Before 57 public void setUp() throws Exception { 58 mMockDevice = EasyMock.createNiceMock(ITestDevice.class); 59 mMockBuildInfo = EasyMock.createNiceMock(IBuildInfo.class); 60 mMockListener = EasyMock.createNiceMock(ITestInvocationListener.class); 61 mMockContext = EasyMock.createNiceMock(IInvocationContext.class); 62 mCollect = new VtsHalTraceCollector() { 63 @Override 64 public String getRunName() { 65 return "device1 testRun"; 66 } 67 }; 68 mCollect.init(mMockContext, mMockListener); 69 } 70 71 @Test 72 public void testOnTestRunEnd() throws Exception { 73 File traceBaseDir = FileUtil.createTempDir("vts-trace"); 74 File traceDir = null; 75 try { 76 mBuildAttributes.put(TRACE_PATH, traceBaseDir.getAbsolutePath()); 77 EasyMock.expect(mMockBuildInfo.getBuildAttributes()).andReturn(mBuildAttributes); 78 mDevices.add(mMockDevice); 79 mBuildInfos.add(mMockBuildInfo); 80 EasyMock.expect(mMockContext.getDevices()).andReturn(mDevices); 81 EasyMock.expect(mMockContext.getBuildInfos()).andReturn(mBuildInfos); 82 String listResult = VTS_TMP_DIR + "test1.vts.trace\n" + VTS_TMP_DIR + "test2.vts.trace"; 83 EasyMock.expect(mMockDevice.executeShellCommand( 84 EasyMock.eq(String.format("ls %s/*.vts.trace", VTS_TMP_DIR)))) 85 .andReturn(listResult); 86 traceDir = new File(traceBaseDir, "device1_testRun/"); 87 File testTrace1 = new File(traceDir, "test1.vts.trace"); 88 File testTrace2 = new File(traceDir, "test2.vts.trace"); 89 EasyMock.expect(mMockDevice.pullFile(EasyMock.eq(VTS_TMP_DIR + "test1.vts.trace"), 90 EasyMock.eq(testTrace1))) 91 .andReturn(true) 92 .times(1); 93 EasyMock.expect(mMockDevice.pullFile(EasyMock.eq(VTS_TMP_DIR + "test2.vts.trace"), 94 EasyMock.eq(testTrace2))) 95 .andReturn(true) 96 .times(1); 97 98 EasyMock.replay(mMockBuildInfo); 99 EasyMock.replay(mMockContext); 100 EasyMock.replay(mMockDevice); 101 102 mCollect.onTestRunEnd(null, null); 103 assertTrue(traceDir.exists()); 104 105 EasyMock.verify(mMockBuildInfo); 106 EasyMock.verify(mMockContext); 107 EasyMock.verify(mMockDevice); 108 109 } finally { 110 FileUtil.recursiveDelete(traceDir); 111 FileUtil.recursiveDelete(traceBaseDir); 112 } 113 } 114 } 115