github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/pkg/ioutils/buffer_test.go (about)

     1  package ioutils // import "github.com/demonoid81/moby/pkg/ioutils"
     2  
     3  import (
     4  	"bytes"
     5  	"testing"
     6  )
     7  
     8  func TestFixedBufferCap(t *testing.T) {
     9  	buf := &fixedBuffer{buf: make([]byte, 0, 5)}
    10  
    11  	n := buf.Cap()
    12  	if n != 5 {
    13  		t.Fatalf("expected buffer capacity to be 5 bytes, got %d", n)
    14  	}
    15  }
    16  
    17  func TestFixedBufferLen(t *testing.T) {
    18  	buf := &fixedBuffer{buf: make([]byte, 0, 10)}
    19  
    20  	buf.Write([]byte("hello"))
    21  	l := buf.Len()
    22  	if l != 5 {
    23  		t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
    24  	}
    25  
    26  	buf.Write([]byte("world"))
    27  	l = buf.Len()
    28  	if l != 10 {
    29  		t.Fatalf("expected buffer length to be 10 bytes, got %d", l)
    30  	}
    31  
    32  	// read 5 bytes
    33  	b := make([]byte, 5)
    34  	buf.Read(b)
    35  
    36  	l = buf.Len()
    37  	if l != 5 {
    38  		t.Fatalf("expected buffer length to be 5 bytes, got %d", l)
    39  	}
    40  
    41  	n, err := buf.Write([]byte("i-wont-fit"))
    42  	if n != 0 {
    43  		t.Fatalf("expected no bytes to be written to buffer, got %d", n)
    44  	}
    45  	if err != errBufferFull {
    46  		t.Fatalf("expected errBufferFull, got %v", err)
    47  	}
    48  
    49  	l = buf.Len()
    50  	if l != 5 {
    51  		t.Fatalf("expected buffer length to still be 5 bytes, got %d", l)
    52  	}
    53  
    54  	buf.Reset()
    55  	l = buf.Len()
    56  	if l != 0 {
    57  		t.Fatalf("expected buffer length to still be 0 bytes, got %d", l)
    58  	}
    59  }
    60  
    61  func TestFixedBufferString(t *testing.T) {
    62  	buf := &fixedBuffer{buf: make([]byte, 0, 10)}
    63  
    64  	buf.Write([]byte("hello"))
    65  	buf.Write([]byte("world"))
    66  
    67  	out := buf.String()
    68  	if out != "helloworld" {
    69  		t.Fatalf("expected output to be \"helloworld\", got %q", out)
    70  	}
    71  
    72  	// read 5 bytes
    73  	b := make([]byte, 5)
    74  	buf.Read(b)
    75  
    76  	// test that fixedBuffer.String() only returns the part that hasn't been read
    77  	out = buf.String()
    78  	if out != "world" {
    79  		t.Fatalf("expected output to be \"world\", got %q", out)
    80  	}
    81  }
    82  
    83  func TestFixedBufferWrite(t *testing.T) {
    84  	buf := &fixedBuffer{buf: make([]byte, 0, 64)}
    85  	n, err := buf.Write([]byte("hello"))
    86  	if err != nil {
    87  		t.Fatal(err)
    88  	}
    89  
    90  	if n != 5 {
    91  		t.Fatalf("expected 5 bytes written, got %d", n)
    92  	}
    93  
    94  	if string(buf.buf[:5]) != "hello" {
    95  		t.Fatalf("expected \"hello\", got %q", string(buf.buf[:5]))
    96  	}
    97  
    98  	n, err = buf.Write(bytes.Repeat([]byte{1}, 64))
    99  	if n != 59 {
   100  		t.Fatalf("expected 59 bytes written before buffer is full, got %d", n)
   101  	}
   102  	if err != errBufferFull {
   103  		t.Fatalf("expected errBufferFull, got %v - %v", err, buf.buf[:64])
   104  	}
   105  }
   106  
   107  func TestFixedBufferRead(t *testing.T) {
   108  	buf := &fixedBuffer{buf: make([]byte, 0, 64)}
   109  	if _, err := buf.Write([]byte("hello world")); err != nil {
   110  		t.Fatal(err)
   111  	}
   112  
   113  	b := make([]byte, 5)
   114  	n, err := buf.Read(b)
   115  	if err != nil {
   116  		t.Fatal(err)
   117  	}
   118  
   119  	if n != 5 {
   120  		t.Fatalf("expected 5 bytes read, got %d - %s", n, buf.String())
   121  	}
   122  
   123  	if string(b) != "hello" {
   124  		t.Fatalf("expected \"hello\", got %q", string(b))
   125  	}
   126  
   127  	n, err = buf.Read(b)
   128  	if err != nil {
   129  		t.Fatal(err)
   130  	}
   131  
   132  	if n != 5 {
   133  		t.Fatalf("expected 5 bytes read, got %d", n)
   134  	}
   135  
   136  	if string(b) != " worl" {
   137  		t.Fatalf("expected \" worl\", got %s", string(b))
   138  	}
   139  
   140  	b = b[:1]
   141  	n, err = buf.Read(b)
   142  	if err != nil {
   143  		t.Fatal(err)
   144  	}
   145  
   146  	if n != 1 {
   147  		t.Fatalf("expected 1 byte read, got %d - %s", n, buf.String())
   148  	}
   149  
   150  	if string(b) != "d" {
   151  		t.Fatalf("expected \"d\", got %s", string(b))
   152  	}
   153  }