github.com/mika/distribution@v2.2.2-0.20160108133430-a75790e3d8e0+incompatible/registry/storage/driver/azure/zerofillwriter_test.go (about) 1 package azure 2 3 import ( 4 "bytes" 5 "testing" 6 ) 7 8 func Test_zeroFillWrite_AppendNoGap(t *testing.T) { 9 s := NewStorageSimulator() 10 bw := newRandomBlobWriter(&s, 1024*1) 11 zw := newZeroFillWriter(&bw) 12 if err := s.CreateBlockBlob("a", "b"); err != nil { 13 t.Fatal(err) 14 } 15 16 firstChunk := randomContents(1024*3 + 512) 17 if nn, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil { 18 t.Fatal(err) 19 } else if expected := int64(len(firstChunk)); expected != nn { 20 t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected) 21 } 22 if out, err := s.GetBlob("a", "b"); err != nil { 23 t.Fatal(err) 24 } else { 25 assertBlobContents(t, out, firstChunk) 26 } 27 28 secondChunk := randomContents(256) 29 if nn, err := zw.Write("a", "b", int64(len(firstChunk)), bytes.NewReader(secondChunk)); err != nil { 30 t.Fatal(err) 31 } else if expected := int64(len(secondChunk)); expected != nn { 32 t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected) 33 } 34 if out, err := s.GetBlob("a", "b"); err != nil { 35 t.Fatal(err) 36 } else { 37 assertBlobContents(t, out, append(firstChunk, secondChunk...)) 38 } 39 40 } 41 42 func Test_zeroFillWrite_StartWithGap(t *testing.T) { 43 s := NewStorageSimulator() 44 bw := newRandomBlobWriter(&s, 1024*2) 45 zw := newZeroFillWriter(&bw) 46 if err := s.CreateBlockBlob("a", "b"); err != nil { 47 t.Fatal(err) 48 } 49 50 chunk := randomContents(1024 * 5) 51 padding := int64(1024*2 + 256) 52 if nn, err := zw.Write("a", "b", padding, bytes.NewReader(chunk)); err != nil { 53 t.Fatal(err) 54 } else if expected := int64(len(chunk)); expected != nn { 55 t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected) 56 } 57 if out, err := s.GetBlob("a", "b"); err != nil { 58 t.Fatal(err) 59 } else { 60 assertBlobContents(t, out, append(make([]byte, padding), chunk...)) 61 } 62 } 63 64 func Test_zeroFillWrite_AppendWithGap(t *testing.T) { 65 s := NewStorageSimulator() 66 bw := newRandomBlobWriter(&s, 1024*2) 67 zw := newZeroFillWriter(&bw) 68 if err := s.CreateBlockBlob("a", "b"); err != nil { 69 t.Fatal(err) 70 } 71 72 firstChunk := randomContents(1024*3 + 512) 73 if _, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil { 74 t.Fatal(err) 75 } 76 if out, err := s.GetBlob("a", "b"); err != nil { 77 t.Fatal(err) 78 } else { 79 assertBlobContents(t, out, firstChunk) 80 } 81 82 secondChunk := randomContents(256) 83 padding := int64(1024 * 4) 84 if nn, err := zw.Write("a", "b", int64(len(firstChunk))+padding, bytes.NewReader(secondChunk)); err != nil { 85 t.Fatal(err) 86 } else if expected := int64(len(secondChunk)); expected != nn { 87 t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected) 88 } 89 if out, err := s.GetBlob("a", "b"); err != nil { 90 t.Fatal(err) 91 } else { 92 assertBlobContents(t, out, append(firstChunk, append(make([]byte, padding), secondChunk...)...)) 93 } 94 } 95 96 func Test_zeroFillWrite_LiesWithinSize(t *testing.T) { 97 s := NewStorageSimulator() 98 bw := newRandomBlobWriter(&s, 1024*2) 99 zw := newZeroFillWriter(&bw) 100 if err := s.CreateBlockBlob("a", "b"); err != nil { 101 t.Fatal(err) 102 } 103 104 firstChunk := randomContents(1024 * 3) 105 if _, err := zw.Write("a", "b", 0, bytes.NewReader(firstChunk)); err != nil { 106 t.Fatal(err) 107 } 108 if out, err := s.GetBlob("a", "b"); err != nil { 109 t.Fatal(err) 110 } else { 111 assertBlobContents(t, out, firstChunk) 112 } 113 114 // in this case, zerofill won't be used 115 secondChunk := randomContents(256) 116 if nn, err := zw.Write("a", "b", 0, bytes.NewReader(secondChunk)); err != nil { 117 t.Fatal(err) 118 } else if expected := int64(len(secondChunk)); expected != nn { 119 t.Fatalf("wrong written bytes count: %v, expected: %v", nn, expected) 120 } 121 if out, err := s.GetBlob("a", "b"); err != nil { 122 t.Fatal(err) 123 } else { 124 assertBlobContents(t, out, append(secondChunk, firstChunk[len(secondChunk):]...)) 125 } 126 }