blob: 1cbceba0d2e6c9cd35e18ee15e6598a15024dc6c [file] [log] [blame]
/*
* Copyright (C) 2019 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.cluster;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.verify;
import com.android.tradefed.config.Configuration;
import com.android.tradefed.config.ConfigurationException;
import com.android.tradefed.config.IConfiguration;
import com.android.tradefed.config.OptionSetter;
import com.android.tradefed.device.DeviceNotAvailableException;
import com.android.tradefed.invoker.IInvocationContext;
import com.android.tradefed.invoker.InvocationContext;
import com.android.tradefed.metrics.proto.MetricMeasurement;
import com.android.tradefed.result.ITestInvocationListener;
import com.android.tradefed.result.TestDescription;
import com.android.tradefed.util.FileUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
/** Functional tests for {@link ClusterCommandLauncher}. */
@RunWith(MockitoJUnitRunner.class)
public class ClusterCommandLauncherFuncTest {
private static final String LEGACY_TRADEFED_JAR = "/testdata/tradefed-prebuilt-cts-8.0_r21.jar";
private static final String LEGACY_TRADEFED_COMMAND =
"host --null-device --class com.android.tradefed.device.DeviceDiagTest";
private File mRootDir;
private IConfiguration mConfiguration;
private IInvocationContext mInvocationContext;
private OptionSetter mOptionSetter;
@Spy private ClusterCommandLauncher mLauncher;
@Mock private ITestInvocationListener mListener;
@Before
public void setUp() throws Exception {
mRootDir = FileUtil.createTempDir(getClass().getName() + "_RootDir");
mConfiguration = new Configuration("name", "description");
mConfiguration.getCommandOptions().setInvocationTimeout(60_000L); // 1 minute
mInvocationContext = new InvocationContext();
mLauncher.setConfiguration(mConfiguration);
mLauncher.setInvocationContext(mInvocationContext);
mOptionSetter = new OptionSetter(mLauncher);
mOptionSetter.setOptionValue("cluster:root-dir", mRootDir.getAbsolutePath());
mOptionSetter.setOptionValue("cluster:env-var", "TF_WORK_DIR", mRootDir.getAbsolutePath());
}
@After
public void tearDown() {
FileUtil.recursiveDelete(mRootDir);
}
@Test
public void testRun_withLegacyTradefed()
throws IOException, ConfigurationException, DeviceNotAvailableException {
File tfJar = new File(mRootDir, "tradefed.jar");
FileUtil.writeToFile(getClass().getResourceAsStream(LEGACY_TRADEFED_JAR), tfJar);
mOptionSetter.setOptionValue("cluster:env-var", "TF_PATH", mRootDir.getAbsolutePath());
mOptionSetter.setOptionValue("cluster:use-subprocess-reporting", "true");
mOptionSetter.setOptionValue("cluster:command-line", LEGACY_TRADEFED_COMMAND);
mLauncher.run(mListener);
HashMap<String, MetricMeasurement.Metric> emptyMap = new HashMap<>();
verify(mListener).testRunStarted(anyString(), anyInt(), anyInt(), anyLong());
verify(mListener).testStarted(any(TestDescription.class), anyLong());
verify(mListener).testEnded(any(TestDescription.class), anyLong(), eq(emptyMap));
verify(mListener).testRunEnded(anyLong(), eq(emptyMap));
}
}