github.com/scottcagno/storage@v1.8.0/pkg/_junk/bfile/bfile_test.go (about)

     1  package bfile
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/scottcagno/storage/pkg/util"
     6  	"io"
     7  	"os"
     8  	"strings"
     9  	"testing"
    10  	"unsafe"
    11  )
    12  
    13  const count = 25
    14  
    15  func Test_bfile_headerSize(t *testing.T) {
    16  	fmt.Printf("header{}, size=%d\n", unsafe.Sizeof(header{}))
    17  }
    18  
    19  func Test_bfile_write(t *testing.T) {
    20  
    21  	// init path
    22  	path := "testing/test-001.txt"
    23  
    24  	// open
    25  	f := setup(path, t)
    26  
    27  	// read all
    28  	doReadAll := true
    29  	if doReadAll {
    30  		//readAll(f, t)
    31  		//readAllRaw(f, t)
    32  		readAllAtIndex(f, t)
    33  	}
    34  
    35  	// write
    36  	doWrite := false
    37  	if doWrite {
    38  		// init offsets
    39  		var offsets []int64
    40  
    41  		// write
    42  		for i := 0; i < count; i++ {
    43  			data := []byte(fmt.Sprintf("record-%.8d data lives here", i))
    44  			// write data
    45  			off, err := f.write(data)
    46  			checkErr(err, t)
    47  			// add offsets to offset list
    48  			offsets = append(offsets, off)
    49  		}
    50  
    51  		// print offsets
    52  		for i := range offsets {
    53  			fmt.Printf("record %d, offset=%d\n", i, offsets[i])
    54  		}
    55  
    56  		// rewind
    57  		err := f.rewind()
    58  		checkErr(err, t)
    59  	}
    60  
    61  	// read all
    62  	if doReadAll {
    63  		readAll(f, t)
    64  	}
    65  
    66  	// read at
    67  	doReadAt := false
    68  	if doReadAt {
    69  		blocks := []int{0, 3, 7, 5, 11, 13, 21, 17}
    70  		for i := range blocks {
    71  			readAt(f, blocks[i], t)
    72  		}
    73  	}
    74  
    75  	// close
    76  	teardown(f, true, t)
    77  
    78  }
    79  
    80  func readAllAtIndex(f *bfile, t *testing.T) {
    81  	// read all records
    82  	for i := 0; i < f.count(); i++ {
    83  		data, err := f.readAtIndex(i)
    84  		if err != nil {
    85  			if err == io.EOF {
    86  				break
    87  			}
    88  			checkErr(err, t)
    89  		}
    90  		fmt.Printf("readAtIndex[%d]: %q\n", i, data)
    91  	}
    92  }
    93  
    94  func readAllRaw(f *bfile, t *testing.T) {
    95  	// read all records
    96  	for {
    97  		rec, err := f.readRaw()
    98  		if err != nil {
    99  			if err == io.EOF {
   100  				break
   101  			}
   102  			checkErr(err, t)
   103  		}
   104  		fmt.Printf("%s\n", rec)
   105  	}
   106  }
   107  
   108  func readAll(f *bfile, t *testing.T) {
   109  	// read all
   110  	for {
   111  		data, err := f.read()
   112  		if err != nil {
   113  			if err == io.EOF {
   114  				break
   115  			}
   116  			checkErr(err, t)
   117  		}
   118  		fmt.Printf("read data: %q\n", data)
   119  	}
   120  }
   121  
   122  func readAt(f *bfile, block int, t *testing.T) {
   123  	// read at
   124  	fmt.Printf("reading at block %d (offset: %d): ", block, at(block))
   125  	data, err := f.readAt(at(block))
   126  	fmt.Printf("data=%q\n", data)
   127  	checkErr(err, t)
   128  }
   129  
   130  func Test_getWords(t *testing.T) {
   131  	for i := 0; i < 15; i++ {
   132  		n := util.RandIntn(1, 5)
   133  		w := getWords(n)
   134  		fmt.Printf("getting %d words: %q\n", n, w)
   135  	}
   136  }
   137  
   138  var words = strings.Fields(util.WaltWhitmanText)
   139  
   140  func getWords(n int) []byte {
   141  	if n < 1 {
   142  		n = 1
   143  	}
   144  	at := util.RandIntn(0, len(words)-n)
   145  	if n > 1 {
   146  		return []byte(strings.Join(words[at:at+n], " "))
   147  	}
   148  	return []byte(words[at])
   149  }
   150  
   151  func setup(path string, t *testing.T) *bfile {
   152  	// open file
   153  	f, err := openBFile(path)
   154  	checkErr(err, t)
   155  	// return file
   156  	return f
   157  }
   158  
   159  func teardown(f *bfile, clean bool, t *testing.T) {
   160  	// get path
   161  	path := f.path
   162  
   163  	// close file
   164  	err := f.close()
   165  	checkErr(err, t)
   166  
   167  	// clean up
   168  	if clean {
   169  		os.RemoveAll(path)
   170  	}
   171  }
   172  
   173  func checkErr(err error, t *testing.T) {
   174  	if err != nil {
   175  		t.Errorf("error >>> %+v\n", err)
   176  	}
   177  }