use of com.google.cloud.tools.jib.api.buildplan.FileEntry in project jib by GoogleContainerTools.
the class LayerEntriesSelectorTest method testGenerateSelector_ownersModified.
@Test
public void testGenerateSelector_ownersModified() throws IOException {
Path layerFile = temporaryFolder.newFolder("testFolder").toPath().resolve("file");
Files.write(layerFile, "hello".getBytes(StandardCharsets.UTF_8));
FileEntry layerEntry111 = new FileEntry(layerFile, AbsoluteUnixPath.get("/extraction/path"), FilePermissions.fromOctalString("111"), FileEntriesLayer.DEFAULT_MODIFICATION_TIME, "0:0");
FileEntry layerEntry222 = new FileEntry(layerFile, AbsoluteUnixPath.get("/extraction/path"), FilePermissions.fromOctalString("222"), FileEntriesLayer.DEFAULT_MODIFICATION_TIME, "foouser");
// Verify that changing ownership generates a different selector
Assert.assertNotEquals(LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry111)), LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry222)));
}
use of com.google.cloud.tools.jib.api.buildplan.FileEntry in project jib by GoogleContainerTools.
the class LayerEntriesSelectorTest method testGenerateSelector_targetModificationTimeChanged.
@Test
public void testGenerateSelector_targetModificationTimeChanged() throws IOException {
Path layerFile = temporaryFolder.newFile().toPath();
AbsoluteUnixPath pathInContainer = AbsoluteUnixPath.get("/bar");
FilePermissions permissions = FilePermissions.fromOctalString("111");
FileEntry layerEntry1 = new FileEntry(layerFile, pathInContainer, permissions, Instant.now());
FileEntry layerEntry2 = new FileEntry(layerFile, pathInContainer, permissions, Instant.EPOCH);
// Verify that different target modification times generate different selectors
Assert.assertNotEquals(LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry1)), LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry2)));
}
use of com.google.cloud.tools.jib.api.buildplan.FileEntry in project jib by GoogleContainerTools.
the class LayerEntriesSelectorTest method testGenerateSelector_sourceModificationTimeChanged.
@Test
public void testGenerateSelector_sourceModificationTimeChanged() throws IOException {
Path layerFile = temporaryFolder.newFile().toPath();
Files.setLastModifiedTime(layerFile, FileTime.from(Instant.EPOCH));
FileEntry layerEntry = defaultLayerEntry(layerFile, AbsoluteUnixPath.get("/extraction/path"));
DescriptorDigest expectedSelector = LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry));
// Verify that changing source modification time generates a different selector
Files.setLastModifiedTime(layerFile, FileTime.from(Instant.ofEpochSecond(1)));
Assert.assertNotEquals(expectedSelector, LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry)));
// Verify that changing source modification time back generates same selector
Files.setLastModifiedTime(layerFile, FileTime.from(Instant.EPOCH));
Assert.assertEquals(expectedSelector, LayerEntriesSelector.generateSelector(ImmutableList.of(layerEntry)));
}
use of com.google.cloud.tools.jib.api.buildplan.FileEntry in project jib by GoogleContainerTools.
the class BuildAndCacheApplicationLayerStepTest method testRun_emptyLayersIgnored.
@Test
public void testRun_emptyLayersIgnored() throws IOException, CacheCorruptedException {
ImmutableList<FileEntriesLayer> fakeLayerConfigurations = ImmutableList.of(fakeDependenciesLayerConfiguration, emptyLayerConfiguration, fakeResourcesLayerConfiguration, fakeClassesLayerConfiguration, emptyLayerConfiguration);
Mockito.when(mockBuildContext.getLayerConfigurations()).thenReturn(fakeLayerConfigurations);
// Populates the cache.
List<Layer> applicationLayers = buildFakeLayersToCache();
Assert.assertEquals(3, applicationLayers.size());
ImmutableList<FileEntry> dependenciesLayerEntries = ImmutableList.copyOf(fakeLayerConfigurations.get(0).getEntries());
ImmutableList<FileEntry> resourcesLayerEntries = ImmutableList.copyOf(fakeLayerConfigurations.get(2).getEntries());
ImmutableList<FileEntry> classesLayerEntries = ImmutableList.copyOf(fakeLayerConfigurations.get(3).getEntries());
CachedLayer dependenciesCachedLayer = cache.retrieve(dependenciesLayerEntries).orElseThrow(AssertionError::new);
CachedLayer resourcesCachedLayer = cache.retrieve(resourcesLayerEntries).orElseThrow(AssertionError::new);
CachedLayer classesCachedLayer = cache.retrieve(classesLayerEntries).orElseThrow(AssertionError::new);
// Verifies that the cached layers are up-to-date.
Assert.assertEquals(applicationLayers.get(0).getBlobDescriptor().getDigest(), dependenciesCachedLayer.getDigest());
Assert.assertEquals(applicationLayers.get(1).getBlobDescriptor().getDigest(), resourcesCachedLayer.getDigest());
Assert.assertEquals(applicationLayers.get(2).getBlobDescriptor().getDigest(), classesCachedLayer.getDigest());
// Verifies that the cache reader gets the same layers as the newest application layers.
assertBlobsEqual(applicationLayers.get(0).getBlob(), dependenciesCachedLayer.getBlob());
assertBlobsEqual(applicationLayers.get(1).getBlob(), resourcesCachedLayer.getBlob());
assertBlobsEqual(applicationLayers.get(2).getBlob(), classesCachedLayer.getBlob());
}
use of com.google.cloud.tools.jib.api.buildplan.FileEntry in project jib by GoogleContainerTools.
the class JibContainerBuilderTest method setApplyContainerBuildPlan.
@Test
public void setApplyContainerBuildPlan() throws InvalidImageReferenceException, CacheDirectoryCreationException {
FileEntriesLayer layer = FileEntriesLayer.builder().addEntry(Paths.get("/src/file/foo"), AbsoluteUnixPath.get("/path/in/container")).build();
ContainerBuildPlan buildPlan = ContainerBuildPlan.builder().setBaseImage("some/base").setPlatforms(ImmutableSet.of(new Platform("testArchitecture", "testOS"))).setFormat(ImageFormat.OCI).setCreationTime(Instant.ofEpochMilli(30)).setEnvironment(ImmutableMap.of("env", "var")).setVolumes(ImmutableSet.of(AbsoluteUnixPath.get("/mnt/foo"), AbsoluteUnixPath.get("/bar"))).setLabels(ImmutableMap.of("com.example.label", "cool")).setExposedPorts(ImmutableSet.of(Port.tcp(443))).setLayers(Arrays.asList(layer)).setUser(":").setWorkingDirectory(AbsoluteUnixPath.get("/workspace")).setEntrypoint(Arrays.asList("foo", "entrypoint")).setCmd(Arrays.asList("bar", "cmd")).build();
ImageConfiguration imageConfiguration = ImageConfiguration.builder(ImageReference.parse("initial/base")).build();
JibContainerBuilder containerBuilder = new JibContainerBuilder(imageConfiguration, spyBuildContextBuilder).applyContainerBuildPlan(buildPlan);
BuildContext buildContext = containerBuilder.toBuildContext(Containerizer.to(RegistryImage.named("target/image")));
Assert.assertEquals("some/base", buildContext.getBaseImageConfiguration().getImage().toString());
Assert.assertEquals(OciManifestTemplate.class, buildContext.getTargetFormat());
Assert.assertEquals(1, buildContext.getLayerConfigurations().size());
Assert.assertEquals(1, buildContext.getLayerConfigurations().get(0).getEntries().size());
Assert.assertEquals(Arrays.asList(new FileEntry(Paths.get("/src/file/foo"), AbsoluteUnixPath.get("/path/in/container"), FilePermissions.fromOctalString("644"), Instant.ofEpochSecond(1))), buildContext.getLayerConfigurations().get(0).getEntries());
ContainerConfiguration containerConfiguration = buildContext.getContainerConfiguration();
Assert.assertEquals(Instant.ofEpochMilli(30), containerConfiguration.getCreationTime());
Assert.assertEquals(ImmutableMap.of("env", "var"), containerConfiguration.getEnvironmentMap());
Assert.assertEquals(ImmutableMap.of("com.example.label", "cool"), containerConfiguration.getLabels());
Assert.assertEquals(ImmutableSet.of(AbsoluteUnixPath.get("/mnt/foo"), AbsoluteUnixPath.get("/bar")), containerConfiguration.getVolumes());
Assert.assertEquals(ImmutableSet.of(Port.tcp(443)), containerConfiguration.getExposedPorts());
Assert.assertEquals(":", containerConfiguration.getUser());
Assert.assertEquals(AbsoluteUnixPath.get("/workspace"), containerConfiguration.getWorkingDirectory());
Assert.assertEquals(Arrays.asList("foo", "entrypoint"), containerConfiguration.getEntrypoint());
Assert.assertEquals(Arrays.asList("bar", "cmd"), containerConfiguration.getProgramArguments());
ContainerBuildPlan convertedPlan = containerBuilder.toContainerBuildPlan();
Assert.assertEquals(ImmutableSet.of(new Platform("testArchitecture", "testOS")), convertedPlan.getPlatforms());
}
Aggregations