You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
1.9 KiB
105 lines
1.9 KiB
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) |
|
} |
|
}
|
|
|