Search in sources :

Example 1 with UnwrittenLayer

use of com.google.cloud.tools.jib.image.UnwrittenLayer in project jib by google.

the class CacheWriterTest method testWriteLayer_unwritten.

@Test
public void testWriteLayer_unwritten() throws IOException, LayerPropertyNotFoundException {
    ExpectedLayer expectedLayer = getExpectedLayer();
    // Writes resourceBlob as a layer to the cache.
    CacheWriter cacheWriter = new CacheWriter(testCache);
    UnwrittenLayer unwrittenLayer = new UnwrittenLayer(Blobs.from(resourceBlob));
    List<Path> fakeSourceFiles = Collections.singletonList(Paths.get("some", "source", "file"));
    LayerBuilder mockLayerBuilder = Mockito.mock(LayerBuilder.class);
    Mockito.when(mockLayerBuilder.build()).thenReturn(unwrittenLayer);
    Mockito.when(mockLayerBuilder.getSourceFiles()).thenReturn(fakeSourceFiles);
    CachedLayer cachedLayer = cacheWriter.writeLayer(mockLayerBuilder);
    CachedLayerWithMetadata layerInMetadata = testCache.getMetadata().getLayers().get(0);
    Assert.assertNotNull(layerInMetadata.getMetadata());
    Assert.assertEquals(Collections.singletonList(Paths.get("some", "source", "file").toString()), layerInMetadata.getMetadata().getSourceFiles());
    verifyCachedLayerIsExpected(expectedLayer, cachedLayer);
}
Also used : Path(java.nio.file.Path) LayerBuilder(com.google.cloud.tools.jib.image.LayerBuilder) UnwrittenLayer(com.google.cloud.tools.jib.image.UnwrittenLayer) Test(org.junit.Test)

Example 2 with UnwrittenLayer

use of com.google.cloud.tools.jib.image.UnwrittenLayer in project jib by google.

the class CacheWriter method writeLayer.

/**
 * Builds an {@link UnwrittenLayer} from a {@link LayerBuilder} and compresses and writes the
 * {@link UnwrittenLayer}'s uncompressed layer content BLOB to cache.
 *
 * @param layerBuilder the layer builder
 * @return the cached layer
 */
public CachedLayer writeLayer(LayerBuilder layerBuilder) throws IOException, LayerPropertyNotFoundException {
    UnwrittenLayer unwrittenLayer = layerBuilder.build();
    // Writes to a temporary file first because the UnwrittenLayer needs to be written first to
    // obtain its digest.
    Path tempLayerFile = Files.createTempFile(cache.getCacheDirectory(), null, null);
    // TODO: Find a way to do this with java.nio.file
    tempLayerFile.toFile().deleteOnExit();
    // Writes the UnwrittenLayer layer BLOB to a file to convert into a CachedLayer.
    try (CountingDigestOutputStream compressedDigestOutputStream = new CountingDigestOutputStream(new BufferedOutputStream(Files.newOutputStream(tempLayerFile)))) {
        // Writes the layer with GZIP compression. The original bytes are captured as the layer's
        // diff ID and the bytes outputted from the GZIP compression are captured as the layer's
        // content descriptor.
        GZIPOutputStream compressorStream = new GZIPOutputStream(compressedDigestOutputStream);
        DescriptorDigest diffId = unwrittenLayer.getBlob().writeTo(compressorStream).getDigest();
        // The GZIPOutputStream must be closed in order to write out the remaining compressed data.
        compressorStream.close();
        BlobDescriptor compressedBlobDescriptor = compressedDigestOutputStream.toBlobDescriptor();
        // Renames the temporary layer file to the correct filename. If the file already exists, we
        // skip renaming and use the existing file. This happens if a new layer happens to have the
        // same content as a previously-cached layer.
        Path layerFile = getLayerFile(compressedBlobDescriptor.getDigest());
        Files.move(tempLayerFile, layerFile, StandardCopyOption.REPLACE_EXISTING);
        CachedLayer cachedLayer = new CachedLayer(layerFile, compressedBlobDescriptor, diffId);
        LayerMetadata layerMetadata = LayerMetadata.from(layerBuilder.getSourceFiles(), FileTime.from(Instant.now()));
        cache.addLayerToMetadata(cachedLayer, layerMetadata);
        return cachedLayer;
    }
}
Also used : Path(java.nio.file.Path) CountingDigestOutputStream(com.google.cloud.tools.jib.hash.CountingDigestOutputStream) BlobDescriptor(com.google.cloud.tools.jib.blob.BlobDescriptor) GZIPOutputStream(java.util.zip.GZIPOutputStream) DescriptorDigest(com.google.cloud.tools.jib.image.DescriptorDigest) BufferedOutputStream(java.io.BufferedOutputStream) UnwrittenLayer(com.google.cloud.tools.jib.image.UnwrittenLayer)

Aggregations

UnwrittenLayer (com.google.cloud.tools.jib.image.UnwrittenLayer)2 Path (java.nio.file.Path)2 BlobDescriptor (com.google.cloud.tools.jib.blob.BlobDescriptor)1 CountingDigestOutputStream (com.google.cloud.tools.jib.hash.CountingDigestOutputStream)1 DescriptorDigest (com.google.cloud.tools.jib.image.DescriptorDigest)1 LayerBuilder (com.google.cloud.tools.jib.image.LayerBuilder)1 BufferedOutputStream (java.io.BufferedOutputStream)1 GZIPOutputStream (java.util.zip.GZIPOutputStream)1 Test (org.junit.Test)1