mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	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 e29e580f7f)
		
	
			
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			71 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)
 | 
						|
	}
 | 
						|
 | 
						|
}
 |