github.com/TeaOSLab/EdgeNode@v1.3.8/internal/utils/bfs/file_reader_test.go (about)

     1  // Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
     2  
     3  package bfs_test
     4  
     5  import (
     6  	"fmt"
     7  	"github.com/TeaOSLab/EdgeNode/internal/utils/bfs"
     8  	"io"
     9  	"os"
    10  	"testing"
    11  	"time"
    12  )
    13  
    14  func TestFileReader_Read_SmallBuf(t *testing.T) {
    15  	bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
    16  	if err != nil {
    17  		t.Fatal(err)
    18  	}
    19  
    20  	reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
    21  	if err != nil {
    22  		if os.IsNotExist(err) {
    23  			t.Log(err)
    24  			return
    25  		}
    26  		t.Fatal(err)
    27  	}
    28  
    29  	defer func() {
    30  		_ = reader.Close()
    31  	}()
    32  
    33  	var buf = make([]byte, 3)
    34  	for {
    35  		n, readErr := reader.Read(buf)
    36  		if n > 0 {
    37  			t.Log(string(buf[:n]))
    38  		}
    39  		if readErr != nil {
    40  			if readErr == io.EOF {
    41  				break
    42  			}
    43  			t.Fatal(readErr)
    44  		}
    45  	}
    46  }
    47  
    48  func TestFileReader_Read_LargeBuff(t *testing.T) {
    49  	bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
    50  	if err != nil {
    51  		if os.IsNotExist(err) {
    52  			t.Log(err)
    53  			return
    54  		}
    55  		t.Fatal(err)
    56  	}
    57  
    58  	reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
    59  	if err != nil {
    60  		if os.IsNotExist(err) {
    61  			t.Log(err)
    62  			return
    63  		}
    64  		t.Fatal(err)
    65  	}
    66  
    67  	defer func() {
    68  		_ = reader.Close()
    69  	}()
    70  
    71  	var buf = make([]byte, 128)
    72  	for {
    73  		n, readErr := reader.Read(buf)
    74  		if n > 0 {
    75  			t.Log(string(buf[:n]))
    76  		}
    77  		if readErr != nil {
    78  			if readErr == io.EOF {
    79  				break
    80  			}
    81  			t.Fatal(readErr)
    82  		}
    83  	}
    84  }
    85  
    86  func TestFileReader_Read_LargeFile(t *testing.T) {
    87  	bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
    88  	if err != nil {
    89  		if os.IsNotExist(err) {
    90  			t.Log(err)
    91  			return
    92  		}
    93  		t.Fatal(err)
    94  	}
    95  
    96  	reader, err := bFile.OpenFileReader(bfs.Hash("123456@LARGE"), false)
    97  	if err != nil {
    98  		if os.IsNotExist(err) {
    99  			t.Log(err)
   100  			return
   101  		}
   102  		t.Fatal(err)
   103  	}
   104  
   105  	defer func() {
   106  		_ = reader.Close()
   107  	}()
   108  
   109  	var buf = make([]byte, 16<<10)
   110  	var totalSize int64
   111  	var before = time.Now()
   112  	for {
   113  		n, readErr := reader.Read(buf)
   114  		if n > 0 {
   115  			totalSize += int64(n)
   116  		}
   117  		if readErr != nil {
   118  			if readErr == io.EOF {
   119  				break
   120  			}
   121  			t.Fatal(readErr)
   122  		}
   123  	}
   124  	t.Log("totalSize:", totalSize>>20, "MiB", "cost:", fmt.Sprintf("%.4fms", time.Since(before).Seconds()*1000))
   125  }
   126  
   127  func TestFileReader_ReadAt(t *testing.T) {
   128  	bFile, err := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
   129  	if err != nil {
   130  		if os.IsNotExist(err) {
   131  			t.Log(err)
   132  			return
   133  		}
   134  		t.Fatal(err)
   135  	}
   136  
   137  	reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
   138  	if err != nil {
   139  		if os.IsNotExist(err) {
   140  			t.Log(err)
   141  			return
   142  		}
   143  		t.Fatal(err)
   144  	}
   145  
   146  	defer func() {
   147  		_ = reader.Close()
   148  	}()
   149  
   150  	{
   151  		var buf = make([]byte, 3)
   152  		n, readErr := reader.ReadAt(buf, 0)
   153  		if n > 0 {
   154  			t.Log(string(buf[:n]))
   155  		}
   156  		if readErr != nil && readErr != io.EOF {
   157  			t.Fatal(readErr)
   158  		}
   159  	}
   160  
   161  	{
   162  		var buf = make([]byte, 3)
   163  		n, readErr := reader.ReadAt(buf, 3)
   164  		if n > 0 {
   165  			t.Log(string(buf[:n]))
   166  		}
   167  		if readErr != nil && readErr != io.EOF {
   168  			t.Fatal(readErr)
   169  		}
   170  	}
   171  
   172  	{
   173  		var buf = make([]byte, 11)
   174  		n, readErr := reader.ReadAt(buf, 3)
   175  		if n > 0 {
   176  			t.Log(string(buf[:n]))
   177  		}
   178  		if readErr != nil && readErr != io.EOF {
   179  			t.Fatal(readErr)
   180  		}
   181  	}
   182  
   183  	{
   184  		var buf = make([]byte, 3)
   185  		n, readErr := reader.ReadAt(buf, 11)
   186  		if n > 0 {
   187  			t.Log(string(buf[:n]))
   188  		}
   189  		if readErr != nil && readErr != io.EOF {
   190  			t.Fatal(readErr)
   191  		}
   192  	}
   193  
   194  	{
   195  		var buf = make([]byte, 3)
   196  		n, readErr := reader.ReadAt(buf, 1000)
   197  		if n > 0 {
   198  			t.Log(string(buf[:n]))
   199  		} else {
   200  			t.Log("EOF")
   201  		}
   202  		if readErr != nil && readErr != io.EOF {
   203  			t.Fatal(readErr)
   204  		}
   205  	}
   206  }
   207  
   208  func TestFileReader_Pool(t *testing.T) {
   209  	bFile, openErr := bfs.OpenBlocksFile("testdata/test.b", bfs.DefaultBlockFileOptions)
   210  	if openErr != nil {
   211  		if os.IsNotExist(openErr) {
   212  			t.Log(openErr)
   213  			return
   214  		}
   215  		t.Fatal(openErr)
   216  	}
   217  
   218  	for i := 0; i < 10; i++ {
   219  		reader, err := bFile.OpenFileReader(bfs.Hash("123456"), false)
   220  		if err != nil {
   221  			if os.IsNotExist(err) {
   222  				continue
   223  			}
   224  			t.Fatal(err)
   225  		}
   226  
   227  		go func() {
   228  			err = reader.Close()
   229  			if err != nil {
   230  				t.Log(err)
   231  			}
   232  		}()
   233  	}
   234  
   235  	time.Sleep(100 * time.Millisecond)
   236  	t.Log(len(bFile.TestReaderPool()))
   237  }