forked from TrueCloudLab/distribution
65b0d73cb7
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>
126 lines
3.6 KiB
Go
126 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):]...))
|
|
}
|
|
}
|