Search in sources :

Example 6 with RuleKeyAppendable

use of com.facebook.buck.rules.RuleKeyAppendable in project buck by facebook.

the class DefaultRuleKeyFactoryTest method testFactoryReportsInputsAndDependenciesToCacheForRuleKeyAppendable.

@Test
public void testFactoryReportsInputsAndDependenciesToCacheForRuleKeyAppendable() throws IOException {
    SourcePathRuleFinder ruleFinder = new SourcePathRuleFinder(new BuildRuleResolver(TargetGraph.EMPTY, new DefaultTargetNodeToBuildRuleTransformer()));
    SourcePathResolver pathResolver = new SourcePathResolver(ruleFinder);
    NoopRuleKeyCache<RuleKey> noopRuleKeyCache = new NoopRuleKeyCache<>();
    ProjectFilesystem filesystem = new FakeProjectFilesystem();
    DefaultRuleKeyFactory factory = new DefaultRuleKeyFactory(new RuleKeyFieldLoader(0), new StackedFileHashCache(ImmutableList.of(DefaultFileHashCache.createDefaultFileHashCache(filesystem))), pathResolver, ruleFinder, noopRuleKeyCache);
    // Create a sample input.
    PathSourcePath input = new PathSourcePath(filesystem, filesystem.getPath("input"));
    filesystem.touch(input.getRelativePath());
    // Create a sample dep rule.
    BuildRule dep = new EmptyRule(BuildTargetFactory.newInstance("//:dep"));
    // Create a sample dep appendable.
    RuleKeyAppendable depAppendable = sink -> {
    };
    // Create a sample rule key appendable.
    RuleKeyAppendable appendable = sink -> {
        sink.setReflectively("input", input);
        sink.setReflectively("dep", dep);
        sink.setReflectively("depAppendable", depAppendable);
    };
    // Create a dummy build rule that uses the input.
    BuildRule rule = new NoopBuildRule(new FakeBuildRuleParamsBuilder("//:target").setProjectFilesystem(filesystem).build()) {

        @AddToRuleKey
        private final RuleKeyAppendable appendableField = appendable;
    };
    // Build the rule key.
    factory.build(rule);
    // Verify the input was properly reported to the rule key cache.
    RuleKeyResult<RuleKey> result = noopRuleKeyCache.results.get(appendable);
    assertThat(result, Matchers.notNullValue());
    assertThat(result.inputs, Matchers.containsInAnyOrder(RuleKeyInput.of(filesystem, input.getRelativePath())));
    assertThat(result.deps, Matchers.containsInAnyOrder(dep, depAppendable));
}
Also used : Arrays(java.util.Arrays) BuildRuleType(com.facebook.buck.rules.BuildRuleType) LIBRARY(com.facebook.buck.rules.BuildableProperties.Kind.LIBRARY) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourceRoot(com.facebook.buck.rules.SourceRoot) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Assert.assertThat(org.junit.Assert.assertThat) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) RuleKey(com.facebook.buck.rules.RuleKey) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) Map(java.util.Map) DefaultTargetNodeToBuildRuleTransformer(com.facebook.buck.rules.DefaultTargetNodeToBuildRuleTransformer) Objects(com.google.common.base.Objects) RuleKeyObjectSink(com.facebook.buck.rules.RuleKeyObjectSink) Path(java.nio.file.Path) ImmutableSet(com.google.common.collect.ImmutableSet) AddToRuleKey(com.facebook.buck.rules.AddToRuleKey) ImmutableMap(com.google.common.collect.ImmutableMap) BuildableProperties(com.facebook.buck.rules.BuildableProperties) BuildableContext(com.facebook.buck.rules.BuildableContext) TargetGraph(com.facebook.buck.rules.TargetGraph) DefaultFileHashCache(com.facebook.buck.util.cache.DefaultFileHashCache) BuildTarget(com.facebook.buck.model.BuildTarget) Sha1HashCode(com.facebook.buck.util.sha1.Sha1HashCode) PathSourcePath(com.facebook.buck.rules.PathSourcePath) Optional(java.util.Optional) FakeBuildRuleParamsBuilder(com.facebook.buck.rules.FakeBuildRuleParamsBuilder) BuildRuleResolver(com.facebook.buck.rules.BuildRuleResolver) Pattern(java.util.regex.Pattern) CacheStats(com.google.common.cache.CacheStats) Step(com.facebook.buck.step.Step) SourcePath(com.facebook.buck.rules.SourcePath) Either(com.facebook.buck.model.Either) Function(java.util.function.Function) BuildRule(com.facebook.buck.rules.BuildRule) ImmutableList(com.google.common.collect.ImmutableList) NullFileHashCache(com.facebook.buck.util.cache.NullFileHashCache) BuildTargetFactory(com.facebook.buck.model.BuildTargetFactory) Suppliers(com.google.common.base.Suppliers) Nullable(javax.annotation.Nullable) ImmutableSortedSet(com.google.common.collect.ImmutableSortedSet) Matchers(org.hamcrest.Matchers) Test(org.junit.Test) IOException(java.io.IOException) Assert.assertNotEquals(org.junit.Assert.assertNotEquals) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) Paths(java.nio.file.Paths) FileHashCache(com.facebook.buck.util.cache.FileHashCache) BuildContext(com.facebook.buck.rules.BuildContext) Preconditions(com.google.common.base.Preconditions) MapMaker(com.google.common.collect.MapMaker) Assert.assertEquals(org.junit.Assert.assertEquals) RuleKey(com.facebook.buck.rules.RuleKey) AddToRuleKey(com.facebook.buck.rules.AddToRuleKey) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) PathSourcePath(com.facebook.buck.rules.PathSourcePath) FakeBuildRuleParamsBuilder(com.facebook.buck.rules.FakeBuildRuleParamsBuilder) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) BuildRuleResolver(com.facebook.buck.rules.BuildRuleResolver) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) BuildRule(com.facebook.buck.rules.BuildRule) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) DefaultTargetNodeToBuildRuleTransformer(com.facebook.buck.rules.DefaultTargetNodeToBuildRuleTransformer) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Test(org.junit.Test)

Example 7 with RuleKeyAppendable

use of com.facebook.buck.rules.RuleKeyAppendable in project buck by facebook.

the class DefaultRuleKeyFactoryTest method testFactoryReportsInputsAndDependenciesToCacheForBuildRule.

@Test
public void testFactoryReportsInputsAndDependenciesToCacheForBuildRule() throws IOException {
    SourcePathRuleFinder ruleFinder = new SourcePathRuleFinder(new BuildRuleResolver(TargetGraph.EMPTY, new DefaultTargetNodeToBuildRuleTransformer()));
    SourcePathResolver pathResolver = new SourcePathResolver(ruleFinder);
    NoopRuleKeyCache<RuleKey> noopRuleKeyCache = new NoopRuleKeyCache<>();
    ProjectFilesystem filesystem = new FakeProjectFilesystem();
    DefaultRuleKeyFactory factory = new DefaultRuleKeyFactory(new RuleKeyFieldLoader(0), new StackedFileHashCache(ImmutableList.of(DefaultFileHashCache.createDefaultFileHashCache(filesystem))), pathResolver, ruleFinder, noopRuleKeyCache);
    // Create a sample input.
    PathSourcePath input = new PathSourcePath(filesystem, filesystem.getPath("input"));
    filesystem.touch(input.getRelativePath());
    // Create a sample dep rule.
    BuildRule dep = new EmptyRule(BuildTargetFactory.newInstance("//:dep"));
    // Create a sample rule key appendable.
    RuleKeyAppendable appendable = sink -> {
    };
    // Create a dummy build rule that uses the input.
    BuildRule rule = new NoopBuildRule(new FakeBuildRuleParamsBuilder("//:target").setProjectFilesystem(filesystem).setDeclaredDeps(ImmutableSortedSet.of(dep)).build()) {

        @AddToRuleKey
        private final SourcePath inputField = input;

        @AddToRuleKey
        private final RuleKeyAppendable appendableField = appendable;
    };
    // Build the rule key.
    factory.build(rule);
    // Verify the input was properly reported to the rule key cache.
    RuleKeyResult<RuleKey> result = noopRuleKeyCache.results.get(rule);
    assertThat(result, Matchers.notNullValue());
    assertThat(result.inputs, Matchers.containsInAnyOrder(RuleKeyInput.of(filesystem, input.getRelativePath())));
    assertThat(result.deps, Matchers.containsInAnyOrder(dep, appendable));
}
Also used : Arrays(java.util.Arrays) BuildRuleType(com.facebook.buck.rules.BuildRuleType) LIBRARY(com.facebook.buck.rules.BuildableProperties.Kind.LIBRARY) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourceRoot(com.facebook.buck.rules.SourceRoot) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Assert.assertThat(org.junit.Assert.assertThat) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) RuleKey(com.facebook.buck.rules.RuleKey) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) Map(java.util.Map) DefaultTargetNodeToBuildRuleTransformer(com.facebook.buck.rules.DefaultTargetNodeToBuildRuleTransformer) Objects(com.google.common.base.Objects) RuleKeyObjectSink(com.facebook.buck.rules.RuleKeyObjectSink) Path(java.nio.file.Path) ImmutableSet(com.google.common.collect.ImmutableSet) AddToRuleKey(com.facebook.buck.rules.AddToRuleKey) ImmutableMap(com.google.common.collect.ImmutableMap) BuildableProperties(com.facebook.buck.rules.BuildableProperties) BuildableContext(com.facebook.buck.rules.BuildableContext) TargetGraph(com.facebook.buck.rules.TargetGraph) DefaultFileHashCache(com.facebook.buck.util.cache.DefaultFileHashCache) BuildTarget(com.facebook.buck.model.BuildTarget) Sha1HashCode(com.facebook.buck.util.sha1.Sha1HashCode) PathSourcePath(com.facebook.buck.rules.PathSourcePath) Optional(java.util.Optional) FakeBuildRuleParamsBuilder(com.facebook.buck.rules.FakeBuildRuleParamsBuilder) BuildRuleResolver(com.facebook.buck.rules.BuildRuleResolver) Pattern(java.util.regex.Pattern) CacheStats(com.google.common.cache.CacheStats) Step(com.facebook.buck.step.Step) SourcePath(com.facebook.buck.rules.SourcePath) Either(com.facebook.buck.model.Either) Function(java.util.function.Function) BuildRule(com.facebook.buck.rules.BuildRule) ImmutableList(com.google.common.collect.ImmutableList) NullFileHashCache(com.facebook.buck.util.cache.NullFileHashCache) BuildTargetFactory(com.facebook.buck.model.BuildTargetFactory) Suppliers(com.google.common.base.Suppliers) Nullable(javax.annotation.Nullable) ImmutableSortedSet(com.google.common.collect.ImmutableSortedSet) Matchers(org.hamcrest.Matchers) Test(org.junit.Test) IOException(java.io.IOException) Assert.assertNotEquals(org.junit.Assert.assertNotEquals) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) Paths(java.nio.file.Paths) FileHashCache(com.facebook.buck.util.cache.FileHashCache) BuildContext(com.facebook.buck.rules.BuildContext) Preconditions(com.google.common.base.Preconditions) MapMaker(com.google.common.collect.MapMaker) Assert.assertEquals(org.junit.Assert.assertEquals) RuleKey(com.facebook.buck.rules.RuleKey) AddToRuleKey(com.facebook.buck.rules.AddToRuleKey) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) PathSourcePath(com.facebook.buck.rules.PathSourcePath) FakeBuildRuleParamsBuilder(com.facebook.buck.rules.FakeBuildRuleParamsBuilder) SourcePathRuleFinder(com.facebook.buck.rules.SourcePathRuleFinder) SourcePathResolver(com.facebook.buck.rules.SourcePathResolver) BuildRuleResolver(com.facebook.buck.rules.BuildRuleResolver) PathSourcePath(com.facebook.buck.rules.PathSourcePath) SourcePath(com.facebook.buck.rules.SourcePath) StackedFileHashCache(com.facebook.buck.util.cache.StackedFileHashCache) NoopBuildRule(com.facebook.buck.rules.NoopBuildRule) BuildRule(com.facebook.buck.rules.BuildRule) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) DefaultTargetNodeToBuildRuleTransformer(com.facebook.buck.rules.DefaultTargetNodeToBuildRuleTransformer) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Test(org.junit.Test)

Example 8 with RuleKeyAppendable

use of com.facebook.buck.rules.RuleKeyAppendable in project buck by facebook.

the class RuleKeyCacheRecyclerTest method pathWatchEventDoesNotInvalidateDifferentInput.

@Test
public void pathWatchEventDoesNotInvalidateDifferentInput() {
    DefaultRuleKeyCache<Void> cache = new DefaultRuleKeyCache<>();
    RuleKeyInput input1 = RuleKeyInput.of(FILESYSTEM, FILESYSTEM.getPath("input1"));
    RuleKeyAppendable appendable1 = sink -> {
    };
    RuleKeyInput input2 = RuleKeyInput.of(FILESYSTEM, FILESYSTEM.getPath("input2"));
    RuleKeyAppendable appendable2 = sink -> {
    };
    cache.get(appendable1, a -> new RuleKeyResult<>(null, ImmutableList.of(), ImmutableList.of(input1)));
    cache.get(appendable2, a -> new RuleKeyResult<>(null, ImmutableList.of(), ImmutableList.of(input2)));
    RuleKeyCacheRecycler<Void> recycler = RuleKeyCacheRecycler.createAndRegister(EVENT_BUS, cache, ImmutableSet.of(FILESYSTEM));
    recycler.onFilesystemChange(WatchEventsForTests.createPathEvent(input2.getPath(), StandardWatchEventKinds.ENTRY_MODIFY));
    assertTrue(cache.isCached(appendable1));
    assertFalse(cache.isCached(appendable2));
}
Also used : BuckEventBus(com.facebook.buck.event.BuckEventBus) ImmutableSet(com.google.common.collect.ImmutableSet) ActionGraph(com.facebook.buck.rules.ActionGraph) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) Assert.assertTrue(org.junit.Assert.assertTrue) WatchEventsForTests(com.facebook.buck.testutil.WatchEventsForTests) Test(org.junit.Test) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) EventBus(com.google.common.eventbus.EventBus) FakeClock(com.facebook.buck.timing.FakeClock) StandardWatchEventKinds(java.nio.file.StandardWatchEventKinds) ImmutableList(com.google.common.collect.ImmutableList) BuildId(com.facebook.buck.model.BuildId) Assert.assertFalse(org.junit.Assert.assertFalse) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Test(org.junit.Test)

Example 9 with RuleKeyAppendable

use of com.facebook.buck.rules.RuleKeyAppendable in project buck by facebook.

the class RuleKeyCacheRecyclerTest method getCacheWithDifferentActionGraphInstanceInvalidates.

@Test
public void getCacheWithDifferentActionGraphInstanceInvalidates() {
    DefaultRuleKeyCache<Void> cache = new DefaultRuleKeyCache<>();
    RuleKeyCacheRecycler<Void> recycler = RuleKeyCacheRecycler.createAndRegister(EVENT_BUS, cache, ImmutableSet.of(FILESYSTEM));
    RuleKeyAppendable appendable = sink -> {
    };
    recycler.withRecycledCache(BUCK_EVENT_BUS, SETTINGS, c -> {
        cache.get(appendable, a -> new RuleKeyResult<>(null, ImmutableList.of(), ImmutableList.of()));
    });
    assertTrue(cache.isCached(appendable));
    recycler.withRecycledCache(BUCK_EVENT_BUS, new RuleKeyCacheRecycler.SettingsAffectingCache(RULE_KEY_SEED, new ActionGraph(ImmutableList.of())), c -> {
    });
    assertFalse(cache.isCached(appendable));
}
Also used : BuckEventBus(com.facebook.buck.event.BuckEventBus) ImmutableSet(com.google.common.collect.ImmutableSet) ActionGraph(com.facebook.buck.rules.ActionGraph) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) Assert.assertTrue(org.junit.Assert.assertTrue) WatchEventsForTests(com.facebook.buck.testutil.WatchEventsForTests) Test(org.junit.Test) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) EventBus(com.google.common.eventbus.EventBus) FakeClock(com.facebook.buck.timing.FakeClock) StandardWatchEventKinds(java.nio.file.StandardWatchEventKinds) ImmutableList(com.google.common.collect.ImmutableList) BuildId(com.facebook.buck.model.BuildId) Assert.assertFalse(org.junit.Assert.assertFalse) ActionGraph(com.facebook.buck.rules.ActionGraph) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Test(org.junit.Test)

Example 10 with RuleKeyAppendable

use of com.facebook.buck.rules.RuleKeyAppendable in project buck by facebook.

the class RuleKeyCacheRecyclerTest method getCacheWithDifferentRuleKeySeedInvalidates.

@Test
public void getCacheWithDifferentRuleKeySeedInvalidates() {
    DefaultRuleKeyCache<Void> cache = new DefaultRuleKeyCache<>();
    RuleKeyCacheRecycler<Void> recycler = RuleKeyCacheRecycler.createAndRegister(EVENT_BUS, cache, ImmutableSet.of(FILESYSTEM));
    RuleKeyAppendable appendable = sink -> {
    };
    recycler.withRecycledCache(BUCK_EVENT_BUS, SETTINGS, c -> {
        cache.get(appendable, a -> new RuleKeyResult<>(null, ImmutableList.of(), ImmutableList.of()));
    });
    assertTrue(cache.isCached(appendable));
    recycler.withRecycledCache(BUCK_EVENT_BUS, new RuleKeyCacheRecycler.SettingsAffectingCache(RULE_KEY_SEED + 1, ACTION_GRAPH), c -> {
    });
    assertFalse(cache.isCached(appendable));
}
Also used : BuckEventBus(com.facebook.buck.event.BuckEventBus) ImmutableSet(com.google.common.collect.ImmutableSet) ActionGraph(com.facebook.buck.rules.ActionGraph) FakeProjectFilesystem(com.facebook.buck.testutil.FakeProjectFilesystem) Assert.assertTrue(org.junit.Assert.assertTrue) WatchEventsForTests(com.facebook.buck.testutil.WatchEventsForTests) Test(org.junit.Test) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) ProjectFilesystem(com.facebook.buck.io.ProjectFilesystem) EventBus(com.google.common.eventbus.EventBus) FakeClock(com.facebook.buck.timing.FakeClock) StandardWatchEventKinds(java.nio.file.StandardWatchEventKinds) ImmutableList(com.google.common.collect.ImmutableList) BuildId(com.facebook.buck.model.BuildId) Assert.assertFalse(org.junit.Assert.assertFalse) RuleKeyAppendable(com.facebook.buck.rules.RuleKeyAppendable) Test(org.junit.Test)

Aggregations

RuleKeyAppendable (com.facebook.buck.rules.RuleKeyAppendable)12 ProjectFilesystem (com.facebook.buck.io.ProjectFilesystem)7 FakeProjectFilesystem (com.facebook.buck.testutil.FakeProjectFilesystem)7 ImmutableList (com.google.common.collect.ImmutableList)7 ImmutableSet (com.google.common.collect.ImmutableSet)7 BuildRule (com.facebook.buck.rules.BuildRule)6 SourcePath (com.facebook.buck.rules.SourcePath)6 Test (org.junit.Test)6 BuckEventBus (com.facebook.buck.event.BuckEventBus)5 BuildId (com.facebook.buck.model.BuildId)5 ActionGraph (com.facebook.buck.rules.ActionGraph)5 RuleKey (com.facebook.buck.rules.RuleKey)5 WatchEventsForTests (com.facebook.buck.testutil.WatchEventsForTests)5 FakeClock (com.facebook.buck.timing.FakeClock)5 EventBus (com.google.common.eventbus.EventBus)5 StandardWatchEventKinds (java.nio.file.StandardWatchEventKinds)5 BuildRuleResolver (com.facebook.buck.rules.BuildRuleResolver)4 PathSourcePath (com.facebook.buck.rules.PathSourcePath)4 SourcePathResolver (com.facebook.buck.rules.SourcePathResolver)4 SourcePathRuleFinder (com.facebook.buck.rules.SourcePathRuleFinder)4