123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package diskqueue
- import (
- "crypto/rand"
- "io"
- "os"
- "reflect"
- "testing"
- )
- func Test_membucket(t *testing.T) {
- cap := int32(16)
- data := make([]byte, _blockByte*cap)
- mb := &memBucket{
- cap: cap,
- data: data,
- }
- t.Run("test push & pop small data", func(t *testing.T) {
- p := []byte("hello world")
- err := mb.push(p)
- if err != nil {
- t.Error(err)
- }
- ret, err := mb.pop()
- if err != nil {
- t.Error(err)
- } else {
- if !reflect.DeepEqual(ret, p) {
- t.Errorf("%s not equal %s", ret, p)
- }
- }
- })
- t.Run("test push & pop big data", func(t *testing.T) {
- p := make([]byte, 1890)
- rand.Read(p)
- err := mb.push(p)
- if err != nil {
- t.Error(err)
- }
- ret, err := mb.pop()
- if err != nil {
- t.Error(err)
- } else {
- if !reflect.DeepEqual(ret, p) {
- t.Logf("buf: %v", mb.data)
- t.Errorf("%v not equal %v", ret, p)
- }
- }
- })
- t.Run("push big data", func(t *testing.T) {
- p := make([]byte, _blockByte*cap*2)
- err := mb.push(p)
- if err != errBucketFull {
- t.Errorf("expect err == errBucketFull get: %v", err)
- }
- })
- t.Run("pop io.EOF", func(t *testing.T) {
- _, err := mb.pop()
- if err != io.EOF {
- t.Errorf("expect err == io.EOF get: %v", err)
- }
- })
- }
- func Test_fileBucket(t *testing.T) {
- fpath := "bucket.bin"
- defer os.RemoveAll(fpath)
- cap := int32(16)
- data := make([]byte, _blockByte*cap)
- mb := &memBucket{
- cap: cap,
- data: data,
- }
- d1 := []byte("hello world")
- for i := 0; i < 10; i++ {
- mb.push(d1)
- }
- fp, err := os.OpenFile(fpath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
- if err != nil {
- t.Fatal(err)
- }
- mb.dump(fp)
- fp.Close()
- fb, err := newFileBucket(fpath)
- if err != nil {
- t.Fatal(err)
- }
- count := 0
- for {
- ret, err := fb.pop()
- if err != nil {
- if err != io.EOF {
- t.Error(err)
- }
- break
- }
- count++
- if !reflect.DeepEqual(ret, d1) {
- t.Errorf("%v not equal %v", ret, d1)
- }
- }
- if count != 10 {
- t.Errorf("expect 10 data get %d", count)
- }
- }
|