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  }