@Test public void testIsTestRunRequiredForTestBuiltLocally() throws IOException, ExecutionException, InterruptedException { ExecutionContext executionContext = createMock(ExecutionContext.class); expect(executionContext.isDebugEnabled()).andReturn(false); FakeTestRule testRule = new FakeTestRule( ImmutableSet.<Label>of(Label.of("windows")), BuildTargetFactory.newInstance("//:lulz"), new SourcePathResolver(new BuildRuleResolver()), ImmutableSortedSet.<BuildRule>of()); CachingBuildEngine cachingBuildEngine = createMock(CachingBuildEngine.class); BuildResult result = new BuildResult(testRule, BUILT_LOCALLY, CacheResult.skip()); expect(cachingBuildEngine.getBuildRuleResult(BuildTargetFactory.newInstance("//:lulz"))) .andReturn(result); replay(executionContext, cachingBuildEngine); assertTrue( "A test built locally should always run regardless of any cached result. ", TestRunning.isTestRunRequiredForTest( testRule, cachingBuildEngine, executionContext, createMock(TestRuleKeyFileHelper.class), /* results cache enabled */ true, /* running with test selectors */ false)); verify(executionContext, cachingBuildEngine); }
@Test public void testIsTestRunRequiredForTestBuiltFromCacheIfHasTestResultFiles() throws IOException, ExecutionException, InterruptedException { ExecutionContext executionContext = createMock(ExecutionContext.class); expect(executionContext.isDebugEnabled()).andReturn(false); FakeTestRule testRule = new FakeTestRule( ImmutableSet.<Label>of(Label.of("windows")), BuildTargetFactory.newInstance("//:lulz"), new SourcePathResolver(new BuildRuleResolver()), ImmutableSortedSet.<BuildRule>of()); CachingBuildEngine cachingBuildEngine = createMock(CachingBuildEngine.class); BuildResult result = new BuildResult(testRule, FETCHED_FROM_CACHE, CacheResult.hit("dir")); expect(cachingBuildEngine.getBuildRuleResult(BuildTargetFactory.newInstance("//:lulz"))) .andReturn(result); replay(executionContext, cachingBuildEngine); assertTrue( "A cache hit updates the build artifact but not the test results. " + "Therefore, the test should be re-run to ensure the test results are up to date.", TestRunning.isTestRunRequiredForTest( testRule, cachingBuildEngine, executionContext, createMock(TestRuleKeyFileHelper.class), /* results cache enabled */ true, /* running with test selectors */ false)); verify(executionContext, cachingBuildEngine); }
@Test public void testIsTestRunRequiredIfRuleKeyNotPresent() throws IOException, ExecutionException, InterruptedException { ExecutionContext executionContext = createMock(ExecutionContext.class); expect(executionContext.isDebugEnabled()).andReturn(false); FakeTestRule testRule = new FakeTestRule( ImmutableSet.<Label>of(Label.of("windows")), BuildTargetFactory.newInstance("//:lulz"), new SourcePathResolver(new BuildRuleResolver()), ImmutableSortedSet.<BuildRule>of()) { @Override public boolean hasTestResultFiles(ExecutionContext context) { return true; } }; TestRuleKeyFileHelper testRuleKeyFileHelper = createNiceMock(TestRuleKeyFileHelper.class); expect(testRuleKeyFileHelper.isRuleKeyInDir(testRule)).andReturn(false); CachingBuildEngine cachingBuildEngine = createMock(CachingBuildEngine.class); BuildResult result = new BuildResult(testRule, MATCHING_RULE_KEY, CacheResult.skip()); expect(cachingBuildEngine.getBuildRuleResult(BuildTargetFactory.newInstance("//:lulz"))) .andReturn(result); replay(executionContext, cachingBuildEngine, testRuleKeyFileHelper); assertTrue( "A cached build should run the tests if the test output directory\'s rule key is not " + "present or does not matche the rule key for the test.", TestRunning.isTestRunRequiredForTest( testRule, cachingBuildEngine, executionContext, testRuleKeyFileHelper, /* results cache enabled */ true, /* running with test selectors */ false)); verify(executionContext, cachingBuildEngine, testRuleKeyFileHelper); }