27
27
import java .io .ByteArrayInputStream ;
28
28
import java .io .IOException ;
29
29
import java .nio .file .FileAlreadyExistsException ;
30
+ import java .nio .file .Files ;
30
31
import java .nio .file .Path ;
31
- import java .nio .file .Paths ;
32
+ import java .nio .file .attribute .FileTime ;
33
+ import java .time .Instant ;
32
34
import java .util .zip .GZIPInputStream ;
33
35
import java .util .zip .GZIPOutputStream ;
34
36
import org .junit .Assert ;
@@ -104,35 +106,38 @@ private static long sizeOf(Blob blob) throws IOException {
104
106
private DescriptorDigest layerDiffId1 ;
105
107
private long layerSize1 ;
106
108
private ImmutableList <LayerEntry > layerEntries1 ;
107
- private Blob metadataBlob1 ;
108
109
109
110
private Blob layerBlob2 ;
110
111
private DescriptorDigest layerDigest2 ;
111
112
private DescriptorDigest layerDiffId2 ;
112
113
private long layerSize2 ;
113
114
private ImmutableList <LayerEntry > layerEntries2 ;
114
- private Blob metadataBlob2 ;
115
115
116
116
@ Before
117
117
public void setUp () throws IOException {
118
+ Path directory = temporaryFolder .newFolder ().toPath ();
119
+ Files .createDirectory (directory .resolve ("source" ));
120
+ Files .createFile (directory .resolve ("source/file" ));
121
+ Files .createDirectories (directory .resolve ("another/source" ));
122
+ Files .createFile (directory .resolve ("another/source/file" ));
123
+
118
124
layerBlob1 = Blobs .from ("layerBlob1" );
119
125
layerDigest1 = digestOf (compress (layerBlob1 ));
120
126
layerDiffId1 = digestOf (layerBlob1 );
121
127
layerSize1 = sizeOf (compress (layerBlob1 ));
122
128
layerEntries1 =
123
129
ImmutableList .of (
124
- new LayerEntry (Paths .get ("source/file" ), AbsoluteUnixPath .get ("/extraction/path" )),
125
130
new LayerEntry (
126
- Paths .get ("another/source/file" ),
131
+ directory .resolve ("source/file" ), AbsoluteUnixPath .get ("/extraction/path" )),
132
+ new LayerEntry (
133
+ directory .resolve ("another/source/file" ),
127
134
AbsoluteUnixPath .get ("/another/extraction/path" )));
128
- metadataBlob1 = Blobs .from ("metadata" );
129
135
130
136
layerBlob2 = Blobs .from ("layerBlob2" );
131
137
layerDigest2 = digestOf (compress (layerBlob2 ));
132
138
layerDiffId2 = digestOf (layerBlob2 );
133
139
layerSize2 = sizeOf (compress (layerBlob2 ));
134
140
layerEntries2 = ImmutableList .of ();
135
- metadataBlob2 = Blobs .from ("metadata" );
136
141
}
137
142
138
143
@ Test
@@ -159,31 +164,36 @@ public void testWriteLayerOnly_retrieveByLayerDigest()
159
164
}
160
165
161
166
@ Test
162
- public void testWriteWithSelectorAndMetadata_retrieveByLayerDigest ()
167
+ public void testWriteWithLayerEntries_retrieveByLayerDigest ()
163
168
throws IOException , CacheCorruptedException {
164
169
Cache cache = Cache .withDirectory (temporaryFolder .newFolder ().toPath ());
165
170
166
- verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 , metadataBlob1 ));
171
+ verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 ));
167
172
verifyIsLayer1WithMetadata (cache .retrieve (layerDigest1 ).orElseThrow (AssertionError ::new ));
168
173
Assert .assertFalse (cache .retrieve (layerDigest2 ).isPresent ());
169
174
}
170
175
171
176
@ Test
172
- public void testWriteWithSelectorAndMetadata_retrieveByLayerEntries ()
177
+ public void testWriteWithLayerEntries_retrieveByLayerEntries ()
173
178
throws IOException , CacheCorruptedException {
174
179
Cache cache = Cache .withDirectory (temporaryFolder .newFolder ().toPath ());
175
180
176
- verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 , metadataBlob1 ));
181
+ verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 ));
177
182
verifyIsLayer1WithMetadata (cache .retrieve (layerEntries1 ).orElseThrow (AssertionError ::new ));
178
183
Assert .assertFalse (cache .retrieve (layerDigest2 ).isPresent ());
184
+
185
+ // A source file modification results in the cached layer to be out-of-date and not retrieved.
186
+ Files .setLastModifiedTime (
187
+ layerEntries1 .get (0 ).getSourceFile (), FileTime .from (Instant .now ().plusSeconds (1 )));
188
+ Assert .assertFalse (cache .retrieve (layerEntries1 ).isPresent ());
179
189
}
180
190
181
191
@ Test
182
192
public void testRetrieveWithTwoEntriesInCache () throws IOException , CacheCorruptedException {
183
193
Cache cache = Cache .withDirectory (temporaryFolder .newFolder ().toPath ());
184
194
185
- verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 , metadataBlob1 ));
186
- verifyIsLayer2WithMetadata (cache .write (layerBlob2 , layerEntries2 , metadataBlob2 ));
195
+ verifyIsLayer1WithMetadata (cache .write (layerBlob1 , layerEntries1 ));
196
+ verifyIsLayer2WithMetadata (cache .write (layerBlob2 , layerEntries2 ));
187
197
verifyIsLayer1WithMetadata (cache .retrieve (layerDigest1 ).orElseThrow (AssertionError ::new ));
188
198
verifyIsLayer2WithMetadata (cache .retrieve (layerDigest2 ).orElseThrow (AssertionError ::new ));
189
199
verifyIsLayer1WithMetadata (cache .retrieve (layerEntries1 ).orElseThrow (AssertionError ::new ));
@@ -212,7 +222,9 @@ private void verifyIsLayer1NoMetadata(CacheEntry cacheEntry) throws IOException
212
222
private void verifyIsLayer1WithMetadata (CacheEntry cacheEntry ) throws IOException {
213
223
verifyIsLayer1 (cacheEntry );
214
224
Assert .assertTrue (cacheEntry .getMetadataBlob ().isPresent ());
215
- Assert .assertEquals ("metadata" , Blobs .writeToString (cacheEntry .getMetadataBlob ().get ()));
225
+ Assert .assertEquals (
226
+ Blobs .writeToString (LastModifiedTimeMetadata .generateMetadata (layerEntries1 )),
227
+ Blobs .writeToString (cacheEntry .getMetadataBlob ().get ()));
216
228
}
217
229
218
230
/**
@@ -242,6 +254,8 @@ private void verifyIsLayer2WithMetadata(CacheEntry cacheEntry) throws IOExceptio
242
254
Assert .assertEquals (layerDiffId2 , cacheEntry .getLayerDiffId ());
243
255
Assert .assertEquals (layerSize2 , cacheEntry .getLayerSize ());
244
256
Assert .assertTrue (cacheEntry .getMetadataBlob ().isPresent ());
245
- Assert .assertEquals ("metadata" , Blobs .writeToString (cacheEntry .getMetadataBlob ().get ()));
257
+ Assert .assertEquals (
258
+ Blobs .writeToString (LastModifiedTimeMetadata .generateMetadata (layerEntries2 )),
259
+ Blobs .writeToString (cacheEntry .getMetadataBlob ().get ()));
246
260
}
247
261
}
0 commit comments