Search in sources :

Example 6 with BorrowablePath

use of com.facebook.buck.io.BorrowablePath in project buck by facebook.

the class ServedCacheIntegrationTest method testMultipleNamedCaches.

@Test
public void testMultipleNamedCaches() throws Exception {
    LazyPath fetchedContents = LazyPath.ofInstance(tmpDir.newFile());
    final RuleKey bFileRuleKey = new RuleKey("baadbeef");
    webServer = new WebServer(/* port */
    0, projectFilesystem, "/static/", MAPPER);
    webServer.updateAndStartIfNeeded(Optional.of(dirCache));
    ArtifactCache secondCache = new ArtifactCache() {

        @Override
        public CacheResult fetch(RuleKey ruleKey, LazyPath output) {
            if (ruleKey.equals(bFileRuleKey)) {
                try {
                    projectFilesystem.writeContentsToPath("second", output.get());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
                return CacheResult.hit("secondCache");
            }
            return CacheResult.miss();
        }

        @Override
        public ListenableFuture<Void> store(ArtifactInfo info, BorrowablePath output) {
            return Futures.immediateFuture(null);
        }

        @Override
        public boolean isStoreSupported() {
            return true;
        }

        @Override
        public void close() {
        // Intentional no-op.
        }
    };
    assertThat(secondCache.fetch(A_FILE_RULE_KEY, fetchedContents).getType(), Matchers.equalTo(CacheResultType.MISS));
    assertThat(secondCache.fetch(bFileRuleKey, fetchedContents).getType(), Matchers.equalTo(CacheResultType.HIT));
    WebServer secondWebServer = new WebServer(/* port */
    0, projectFilesystem, "/static/", MAPPER);
    try {
        secondWebServer.updateAndStartIfNeeded(Optional.of(secondCache));
        ArtifactCacheBuckConfig mutltiCacheConfig = createMockLocalConfig("[cache]", "mode = http", "http_cache_names = one, two", "[cache#two]", String.format("http_url = http://127.0.0.1:%d/", secondWebServer.getPort().get()), "[cache#one]", String.format("http_url = http://127.0.0.1:%d/", webServer.getPort().get()));
        ArtifactCache serverBackedCache = createArtifactCache(mutltiCacheConfig);
        assertThat(serverBackedCache.fetch(A_FILE_RULE_KEY, fetchedContents).getType(), Matchers.equalTo(CacheResultType.HIT));
        assertThat(serverBackedCache.fetch(bFileRuleKey, fetchedContents).getType(), Matchers.equalTo(CacheResultType.HIT));
    } finally {
        secondWebServer.stop();
    }
}
Also used : ArtifactInfo(com.facebook.buck.artifact_cache.ArtifactInfo) ArtifactCacheBuckConfig(com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig) RuleKey(com.facebook.buck.rules.RuleKey) BorrowablePath(com.facebook.buck.io.BorrowablePath) LazyPath(com.facebook.buck.io.LazyPath) IOException(java.io.IOException) ArtifactCache(com.facebook.buck.artifact_cache.ArtifactCache) Test(org.junit.Test)

Aggregations

BorrowablePath (com.facebook.buck.io.BorrowablePath)6 IOException (java.io.IOException)5 LazyPath (com.facebook.buck.io.LazyPath)4 Path (java.nio.file.Path)4 ArtifactInfo (com.facebook.buck.artifact_cache.ArtifactInfo)3 RuleKey (com.facebook.buck.rules.RuleKey)3 ArtifactCache (com.facebook.buck.artifact_cache.ArtifactCache)2 Test (org.junit.Test)2 ArtifactCacheBuckConfig (com.facebook.buck.artifact_cache.ArtifactCacheBuckConfig)1 NoopArtifactCache (com.facebook.buck.artifact_cache.NoopArtifactCache)1 BuckEventBus (com.facebook.buck.event.BuckEventBus)1 BuildId (com.facebook.buck.model.BuildId)1 FakeProjectFilesystem (com.facebook.buck.testutil.FakeProjectFilesystem)1 Zip (com.facebook.buck.testutil.Zip)1 FakeClock (com.facebook.buck.timing.FakeClock)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 DataOutputStream (java.io.DataOutputStream)1 Map (java.util.Map)1 ExecutionException (java.util.concurrent.ExecutionException)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1