blob: d076e0aa17660fd97a89ff76d8ad0728b1f64559 [file] [log] [blame]
/*
* 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 vogar.target.caliper;
import com.google.caliper.Benchmark;
import com.google.caliper.runner.UserCodeException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import vogar.RunnerType;
import vogar.target.AbstractTestRunnerTest;
import vogar.target.TestRunner;
import vogar.target.TestRunnerProperties;
/**
* Tests for using TestRunner to run Caliper classes.
*/
@RunWith(JUnit4.class)
public class TestRunnerCaliperTest extends AbstractTestRunnerTest {
@TestRunnerProperties(testClass = CaliperBenchmarkFailing.class)
@Test
public void testRunner_CaliperBenchmark_NoRunner() throws Exception {
TestRunner runner = testRunnerRule.createTestRunner("-i", "runtime");
runner.run();
expectedResults()
.unsupported()
.completedNormally();
}
@TestRunnerProperties(testClass = CaliperBenchmarkFailing.class,
runnerType = RunnerType.CALIPER)
@Test
public void testRunner_CaliperBenchmarkFailing() throws Exception {
TestRunner runner = testRunnerRule.createTestRunner("-i", "runtime");
runner.run();
expectedResults()
.failure(null, (""
+ "Experiment selection: \n"
+ " Benchmark Methods: [failingBenchmark]\n"
+ " Instruments: [runtime]\n"
+ " User parameters: {}\n"
+ " Virtual machines: [default]\n"
+ " Selection type: Full cartesian product\n"
+ "\n"
+ "This selection yields 1 experiments.\n"
+ UserCodeException.class.getName()
+ ": An exception was thrown from the benchmark code\n"
+ "Caused by: " + IllegalStateException.class.getName()
+ ": " + CaliperBenchmarkFailing.BENCHMARK_FAILED + "\n"))
.completedNormally();
}
/**
* Ensure that requesting profiling doesn't send an invalid option to Caliper.
*
* <p>Cannot check that profiling works because it will only work on Android and these tests
* do not run on android yet.
*/
@TestRunnerProperties(
testClass = CaliperBenchmark.class,
profile = true,
runnerType = RunnerType.CALIPER)
@Test
public void testRunner_CaliperBenchmark_Profile() throws Exception {
TestRunner runner = testRunnerRule.createTestRunner("-i", "runtime");
runner.run();
expectedResults()
.ensureProfilingWasRequested()
.success(null, ""
+ "Experiment selection: \n"
+ " Benchmark Methods: [timeMethod]\n"
+ " Instruments: [runtime]\n"
+ " User parameters: {}\n"
+ " Virtual machines: [default]\n"
+ " Selection type: Full cartesian product\n"
+ "\n"
+ "This selection yields 1 experiments.\n"
+ "1\n")
.completedNormally();
}
public static class CaliperBenchmark {
@Benchmark
public long timeMethod(long reps) {
System.out.println(reps);
return reps;
}
}
public static class CaliperBenchmarkFailing {
static final String BENCHMARK_FAILED = "Benchmark failed";
@Benchmark
public long failingBenchmark(long reps) {
throw new IllegalStateException(BENCHMARK_FAILED);
}
}
}