mirror of
				https://github.com/distribution/distribution.git
				synced 2025-11-03 19:31:12 +00:00 
			
		
		
		
	This change is slightly more complex than previous package maves in that the package name changed. To address this, we simply always reference the package driver as storagedriver to avoid compatbility issues with existing code. While unfortunate, this can be cleaned up over time. Signed-off-by: Stephen J Day <stephen.day@docker.com>
		
			
				
	
	
		
			127 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package azure
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func Test_zeroFillWrite_AppendNoGap(t *testing.T) {
 | 
						|
	s := NewStorageSimulator()
 | 
						|
	bw := newRandomBlobWriter(&s, 1024*1)
 | 
						|
	zw := newZeroFillWriter(&bw)
 | 
						|
	if err := s.CreateBlockBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	firstChunk := randomContents(1024*3 + 512)
 | 
						|
	if nn, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else if expected := int64(len(firstChunk)); expected != nn {
 | 
						|
		t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, firstChunk)
 | 
						|
	}
 | 
						|
 | 
						|
	secondChunk := randomContents(256)
 | 
						|
	if nn, err := zw.Write("a", "b", int64(len(firstChunk)), bytes.NewReader(secondChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else if expected := int64(len(secondChunk)); expected != nn {
 | 
						|
		t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, append(firstChunk, secondChunk...))
 | 
						|
	}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
func Test_zeroFillWrite_StartWithGap(t *testing.T) {
 | 
						|
	s := NewStorageSimulator()
 | 
						|
	bw := newRandomBlobWriter(&s, 1024*2)
 | 
						|
	zw := newZeroFillWriter(&bw)
 | 
						|
	if err := s.CreateBlockBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	chunk := randomContents(1024 * 5)
 | 
						|
	padding := int64(1024*2 + 256)
 | 
						|
	if nn, err := zw.Write("a", "b", padding, bytes.NewReader(chunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else if expected := int64(len(chunk)); expected != nn {
 | 
						|
		t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, append(make([]byte, padding), chunk...))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_zeroFillWrite_AppendWithGap(t *testing.T) {
 | 
						|
	s := NewStorageSimulator()
 | 
						|
	bw := newRandomBlobWriter(&s, 1024*2)
 | 
						|
	zw := newZeroFillWriter(&bw)
 | 
						|
	if err := s.CreateBlockBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	firstChunk := randomContents(1024*3 + 512)
 | 
						|
	if _, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, firstChunk)
 | 
						|
	}
 | 
						|
 | 
						|
	secondChunk := randomContents(256)
 | 
						|
	padding := int64(1024 * 4)
 | 
						|
	if nn, err := zw.Write("a", "b", int64(len(firstChunk))+padding, bytes.NewReader(secondChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else if expected := int64(len(secondChunk)); expected != nn {
 | 
						|
		t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, append(firstChunk, append(make([]byte, padding), secondChunk...)...))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Test_zeroFillWrite_LiesWithinSize(t *testing.T) {
 | 
						|
	s := NewStorageSimulator()
 | 
						|
	bw := newRandomBlobWriter(&s, 1024*2)
 | 
						|
	zw := newZeroFillWriter(&bw)
 | 
						|
	if err := s.CreateBlockBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	firstChunk := randomContents(1024 * 3)
 | 
						|
	if _, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, firstChunk)
 | 
						|
	}
 | 
						|
 | 
						|
	// in this case, zerofill won't be used
 | 
						|
	secondChunk := randomContents(256)
 | 
						|
	if nn, err := zw.Write("a", "b", 0, bytes.NewReader(secondChunk)); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else if expected := int64(len(secondChunk)); expected != nn {
 | 
						|
		t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected)
 | 
						|
	}
 | 
						|
	if out, err := s.GetBlob("a", "b"); err != nil {
 | 
						|
		t.Fatal(err)
 | 
						|
	} else {
 | 
						|
		assertBlobContents(t, out, append(secondChunk, firstChunk[len(secondChunk):]...))
 | 
						|
	}
 | 
						|
}
 |