...

Source file src/github.com/Azure/azure-sdk-for-go/storage/appendblob_test.go

Documentation: github.com/Azure/azure-sdk-for-go/storage

     1  package storage
     2  
     3  // Copyright (c) Microsoft Corporation. All rights reserved.
     4  // Licensed under the MIT License. See License.txt in the project root for license information.
     5  
     6  import (
     7  	"io/ioutil"
     8  
     9  	chk "gopkg.in/check.v1"
    10  )
    11  
    12  type AppendBlobSuite struct{}
    13  
    14  var _ = chk.Suite(&AppendBlobSuite{})
    15  
    16  func (s *AppendBlobSuite) TestPutAppendBlob(c *chk.C) {
    17  	cli := getBlobClient(c)
    18  	rec := cli.client.appendRecorder(c)
    19  	defer rec.Stop()
    20  
    21  	cnt := cli.GetContainerReference(containerName(c))
    22  	b := cnt.GetBlobReference(blobName(c))
    23  	c.Assert(cnt.Create(nil), chk.IsNil)
    24  	defer cnt.Delete(nil)
    25  
    26  	c.Assert(b.PutAppendBlob(nil), chk.IsNil)
    27  
    28  	// Verify
    29  	err := b.GetProperties(nil)
    30  	c.Assert(err, chk.IsNil)
    31  	c.Assert(b.Properties.ContentLength, chk.Equals, int64(0))
    32  	c.Assert(b.Properties.BlobType, chk.Equals, BlobTypeAppend)
    33  }
    34  
    35  func (s *AppendBlobSuite) TestPutAppendBlobAppendBlocks(c *chk.C) {
    36  	cli := getBlobClient(c)
    37  	rec := cli.client.appendRecorder(c)
    38  	defer rec.Stop()
    39  
    40  	cnt := cli.GetContainerReference(containerName(c))
    41  	b := cnt.GetBlobReference(blobName(c))
    42  	c.Assert(cnt.Create(nil), chk.IsNil)
    43  	defer cnt.Delete(nil)
    44  
    45  	c.Assert(b.PutAppendBlob(nil), chk.IsNil)
    46  
    47  	chunk1 := content(1024)
    48  	chunk2 := content(512)
    49  
    50  	// Append first block
    51  	c.Assert(b.AppendBlock(chunk1, nil), chk.IsNil)
    52  
    53  	// Verify contents
    54  	options := GetBlobRangeOptions{
    55  		Range: &BlobRange{
    56  			Start: 0,
    57  			End:   uint64(len(chunk1) - 1),
    58  		},
    59  	}
    60  	out, err := b.GetRange(&options)
    61  	c.Assert(err, chk.IsNil)
    62  	defer out.Close()
    63  	blobContents, err := ioutil.ReadAll(out)
    64  	c.Assert(err, chk.IsNil)
    65  	c.Assert(blobContents, chk.DeepEquals, chunk1)
    66  
    67  	// Append second block
    68  	op := AppendBlockOptions{
    69  		ContentMD5: true,
    70  	}
    71  	c.Assert(b.AppendBlock(chunk2, &op), chk.IsNil)
    72  
    73  	// Verify contents
    74  	options.Range.End = uint64(len(chunk1) + len(chunk2) - 1)
    75  	out, err = b.GetRange(&options)
    76  	c.Assert(err, chk.IsNil)
    77  	defer out.Close()
    78  	blobContents, err = ioutil.ReadAll(out)
    79  	c.Assert(err, chk.IsNil)
    80  	c.Assert(blobContents, chk.DeepEquals, append(chunk1, chunk2...))
    81  }
    82  
    83  func (s *StorageBlobSuite) TestPutAppendBlobSpecialChars(c *chk.C) {
    84  	cli := getBlobClient(c)
    85  	rec := cli.client.appendRecorder(c)
    86  	defer rec.Stop()
    87  
    88  	cnt := cli.GetContainerReference(containerName(c))
    89  	b := cnt.GetBlobReference(blobName(c))
    90  	c.Assert(cnt.Create(nil), chk.IsNil)
    91  	defer cnt.Delete(nil)
    92  
    93  	c.Assert(b.PutAppendBlob(nil), chk.IsNil)
    94  
    95  	// Verify metadata
    96  	err := b.GetProperties(nil)
    97  	c.Assert(err, chk.IsNil)
    98  	c.Assert(b.Properties.ContentLength, chk.Equals, int64(0))
    99  	c.Assert(b.Properties.BlobType, chk.Equals, BlobTypeAppend)
   100  
   101  	chunk1 := content(1024)
   102  	chunk2 := content(512)
   103  
   104  	// Append first block
   105  	c.Assert(b.AppendBlock(chunk1, nil), chk.IsNil)
   106  
   107  	// Verify contents
   108  	options := GetBlobRangeOptions{
   109  		Range: &BlobRange{
   110  			Start: 0,
   111  			End:   uint64(len(chunk1) - 1),
   112  		},
   113  	}
   114  	out, err := b.GetRange(&options)
   115  	c.Assert(err, chk.IsNil)
   116  	defer out.Close()
   117  	blobContents, err := ioutil.ReadAll(out)
   118  	c.Assert(err, chk.IsNil)
   119  	c.Assert(blobContents, chk.DeepEquals, chunk1)
   120  
   121  	// Append second block
   122  	c.Assert(b.AppendBlock(chunk2, nil), chk.IsNil)
   123  
   124  	// Verify contents
   125  	options.Range.End = uint64(len(chunk1) + len(chunk2) - 1)
   126  	out, err = b.GetRange(&options)
   127  	c.Assert(err, chk.IsNil)
   128  	defer out.Close()
   129  	blobContents, err = ioutil.ReadAll(out)
   130  	c.Assert(err, chk.IsNil)
   131  	c.Assert(blobContents, chk.DeepEquals, append(chunk1, chunk2...))
   132  }
   133  

View as plain text