This adds verification for getting layer data out of layerstore. These failures should only be possible if layer metadata files have been manually changed of if something is wrong with tar-split algorithm. Failing early makes sure we don’t upload invalid data to the registries where it would fail after someone tries to pull it. Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com> (cherry picked from commit e29e580f7fe628e936925681a4885d0b655bb151) Upstream-commit: 50a498ea1c49cc3caa81bb9fb1417de387117e89 Component: engine
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
// +build !windows
|
|
|
|
package layer
|
|
|
|
import "testing"
|
|
|
|
func graphDiffSize(ls Store, l Layer) (int64, error) {
|
|
cl := getCachedLayer(l)
|
|
var parent string
|
|
if cl.parent != nil {
|
|
parent = cl.parent.cacheID
|
|
}
|
|
return ls.(*layerStore).driver.DiffSize(cl.cacheID, parent)
|
|
}
|
|
|
|
// Unix as Windows graph driver does not support Changes which is indirectly
|
|
// invoked by calling DiffSize on the driver
|
|
func TestLayerSize(t *testing.T) {
|
|
ls, _, cleanup := newTestStore(t)
|
|
defer cleanup()
|
|
|
|
content1 := []byte("Base contents")
|
|
content2 := []byte("Added contents")
|
|
|
|
layer1, err := createLayer(ls, "", initWithFiles(newTestFile("file1", content1, 0644)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
layer2, err := createLayer(ls, layer1.ChainID(), initWithFiles(newTestFile("file2", content2, 0644)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
layer1DiffSize, err := graphDiffSize(ls, layer1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if int(layer1DiffSize) != len(content1) {
|
|
t.Fatalf("Unexpected diff size %d, expected %d", layer1DiffSize, len(content1))
|
|
}
|
|
|
|
layer1Size, err := layer1.Size()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if expected := len(content1); int(layer1Size) != expected {
|
|
t.Fatalf("Unexpected size %d, expected %d", layer1Size, expected)
|
|
}
|
|
|
|
layer2DiffSize, err := graphDiffSize(ls, layer2)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if int(layer2DiffSize) != len(content2) {
|
|
t.Fatalf("Unexpected diff size %d, expected %d", layer2DiffSize, len(content2))
|
|
}
|
|
|
|
layer2Size, err := layer2.Size()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if expected := len(content1) + len(content2); int(layer2Size) != expected {
|
|
t.Fatalf("Unexpected size %d, expected %d", layer2Size, expected)
|
|
}
|
|
|
|
}
|