github.com/alexflint/go-memdump@v1.1.0/delim_test.go (about)

     1  package memdump
     2  
     3  import (
     4  	"bytes"
     5  	"io"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func join(bufs ...[]byte) []byte {
    12  	return bytes.Join(bufs, nil)
    13  }
    14  
    15  func TestDelimitedReader_Simple(t *testing.T) {
    16  	data := join([]byte("abc"), delim, []byte("defggg"), delim)
    17  	r := NewDelimitedReader(bytes.NewReader(data))
    18  
    19  	seg, err := r.Next()
    20  	assert.NoError(t, err)
    21  	assert.Equal(t, "abc", string(seg))
    22  
    23  	seg, err = r.Next()
    24  	assert.NoError(t, err)
    25  	assert.Equal(t, "defggg", string(seg))
    26  
    27  	seg, err = r.Next()
    28  	assert.Equal(t, io.EOF, err)
    29  	assert.Nil(t, seg)
    30  }
    31  
    32  func TestDelimitedReader_Long(t *testing.T) {
    33  	data := make([]byte, 32768)
    34  	for i := range data {
    35  		data[i] = 0
    36  	}
    37  	copy(data[len(data)-len(delim):], delim)
    38  	r := NewDelimitedReader(bytes.NewReader(data))
    39  
    40  	seg, err := r.Next()
    41  	assert.NoError(t, err)
    42  	assert.Len(t, seg, len(data)-len(delim))
    43  
    44  	seg, err = r.Next()
    45  	assert.Equal(t, io.EOF, err)
    46  	assert.Nil(t, seg)
    47  }
    48  
    49  func TestDelimitedReader_SimpleThenEmpty(t *testing.T) {
    50  	data := join([]byte("abc"), delim, delim)
    51  	r := NewDelimitedReader(bytes.NewReader(data))
    52  
    53  	seg, err := r.Next()
    54  	assert.NoError(t, err)
    55  	assert.Equal(t, "abc", string(seg))
    56  
    57  	seg, err = r.Next()
    58  	assert.NoError(t, err)
    59  	assert.NotNil(t, seg)
    60  	assert.Equal(t, "", string(seg))
    61  
    62  	seg, err = r.Next()
    63  	assert.Equal(t, io.EOF, err)
    64  	assert.Nil(t, seg)
    65  }
    66  
    67  func TestDelimitedReader_Empty(t *testing.T) {
    68  	r := NewDelimitedReader(bytes.NewReader(nil))
    69  	seg, err := r.Next()
    70  	assert.Equal(t, io.EOF, err)
    71  	assert.Nil(t, seg)
    72  
    73  	// same thing again
    74  	seg, err = r.Next()
    75  	assert.Equal(t, io.EOF, err)
    76  	assert.Nil(t, seg)
    77  }
    78  
    79  func TestDelimitedReader_Unterminated(t *testing.T) {
    80  	r := NewDelimitedReader(bytes.NewReader([]byte("abc")))
    81  	_, err := r.Next()
    82  	assert.Equal(t, ErrUnexpectedEOF, err)
    83  }
    84  
    85  func TestDelimitedReader_ReadAfterEOF(t *testing.T) {
    86  	data := join([]byte("abc"), delim)
    87  	r := NewDelimitedReader(bytes.NewReader(data))
    88  
    89  	// first read: should not return error
    90  	_, err := r.Next()
    91  	assert.NoError(t, err)
    92  
    93  	// second read: should return EOF
    94  	_, err = r.Next()
    95  	assert.Equal(t, io.EOF, err)
    96  
    97  	// third read: should return EOF again
    98  	_, err = r.Next()
    99  	assert.Equal(t, io.EOF, err)
   100  }