github.com/qiniu/go-sdk/v7@v7.27.0/internal/io/compatible_test.go (about)

     1  //go:build unit
     2  // +build unit
     3  
     4  package io_test
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  	"os"
    10  	"testing"
    11  
    12  	internal_io "github.com/qiniu/go-sdk/v7/internal/io"
    13  )
    14  
    15  func TestMakeReadSeekCloserFromReader(t *testing.T) {
    16  	file, err := os.CreateTemp("", "")
    17  	if err != nil {
    18  		t.Fatal(err)
    19  	}
    20  	defer os.Remove(file.Name())
    21  	defer file.Close()
    22  
    23  	for i := 0; i < 16; i++ {
    24  		if _, err = file.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil {
    25  			t.Fatal(err)
    26  		}
    27  	}
    28  	if _, err = file.Seek(0, io.SeekStart); err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	buf := make([]byte, 16)
    33  
    34  	reader := internal_io.MakeReadSeekCloserFromReader(file)
    35  	if n, err := reader.Read(buf); err != nil {
    36  		t.Fatal(err)
    37  	} else if !bytes.Equal(buf[:n], []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) {
    38  		t.Fatal("unexpected read content")
    39  	}
    40  	if _, err = reader.Seek(8, io.SeekStart); err != nil {
    41  		t.Fatal(err)
    42  	}
    43  	if n, err := reader.Read(buf); err != nil {
    44  		t.Fatal(err)
    45  	} else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7}) {
    46  		t.Fatal("unexpected read content")
    47  	}
    48  	if _, err = reader.Seek(-8, io.SeekEnd); err != nil {
    49  		t.Fatal(err)
    50  	}
    51  	if n, err := reader.Read(buf); err != nil {
    52  		t.Fatal(err)
    53  	} else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) {
    54  		t.Fatal("unexpected read content")
    55  	}
    56  	if err = reader.Close(); err != nil {
    57  		t.Fatal(err)
    58  	}
    59  }
    60  
    61  func MakeReadSeekCloserFromLimitedReader(t *testing.T) {
    62  	file, err := os.CreateTemp("", "")
    63  	if err != nil {
    64  		t.Fatal(err)
    65  	}
    66  	defer os.Remove(file.Name())
    67  	defer file.Close()
    68  
    69  	for i := 0; i < 16; i++ {
    70  		if _, err = file.Write([]byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}); err != nil {
    71  			t.Fatal(err)
    72  		}
    73  	}
    74  
    75  	buf := make([]byte, 16)
    76  
    77  	reader := internal_io.MakeReadSeekCloserFromLimitedReader(file, 16)
    78  	if n, err := reader.Read(buf); err != nil {
    79  		t.Fatal(err)
    80  	} else if !bytes.Equal(buf[:n], []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) {
    81  		t.Fatal("unexpected read content")
    82  	}
    83  
    84  	if _, err = reader.Seek(8, io.SeekStart); err != nil {
    85  		t.Fatal(err)
    86  	}
    87  	if n, err := reader.Read(buf); err != nil {
    88  		t.Fatal(err)
    89  	} else if !bytes.Equal(buf[:n], []byte{0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF}) {
    90  		t.Fatal("unexpected read content")
    91  	}
    92  
    93  	if err = reader.Close(); err != nil {
    94  		t.Fatal(err)
    95  	}
    96  }