Unverified Commit 239b1db9 authored by Steven Allen's avatar Steven Allen Committed by GitHub

Merge pull request #23 from ipfs/fix/ci

test: avoid fuzzing while the race detector is enabled
parents 03118146 4a749cd5
version: 2.1
orbs:
ci-go: ipfs/ci-go@0.2
workflows:
version: 2
test:
jobs:
- ci-go/build
- ci-go/lint
- ci-go/test
- ci-go/test:
race: true
name: "ci-go/test/race"
os:
- linux
language: go
go:
- 1.11.x
env:
global:
- GOTFLAGS="-race"
- BUILD_DEPTYPE=gomod
# disable travis install
install:
- true
script:
- bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh)
cache:
directories:
- $GOPATH/pkg/mod
- $HOME/.cache/go-build
notifications:
email: false
//+build !race
package chunk
import (
"testing"
)
func TestFuzzBuzhashChunking(t *testing.T) {
buf := make([]byte, 1024*1024*16)
for i := 0; i < 100; i++ {
testBuzhashChunking(t, buf)
}
}
...@@ -8,50 +8,56 @@ import ( ...@@ -8,50 +8,56 @@ import (
util "github.com/ipfs/go-ipfs-util" util "github.com/ipfs/go-ipfs-util"
) )
func TestBuzhashChunking(t *testing.T) { func testBuzhashChunking(t *testing.T, buf []byte) (chunkCount int) {
data := make([]byte, 1024*1024*16) n, err := util.NewTimeSeededRand().Read(buf)
if n < len(buf) {
chunkCount := 0 t.Fatalf("expected %d bytes, got %d", len(buf), n)
rounds := 100 }
if err != nil {
for i := 0; i < rounds; i++ { t.Fatal(err)
util.NewTimeSeededRand().Read(data) }
r := NewBuzhash(bytes.NewReader(data)) r := NewBuzhash(bytes.NewReader(buf))
var chunks [][]byte var chunks [][]byte
for { for {
chunk, err := r.NextBytes() chunk, err := r.NextBytes()
if err != nil { if err != nil {
if err == io.EOF { if err == io.EOF {
break break
}
t.Fatal(err)
} }
t.Fatal(err)
chunks = append(chunks, chunk)
} }
chunkCount += len(chunks)
for i, chunk := range chunks { chunks = append(chunks, chunk)
if len(chunk) == 0 { }
t.Fatalf("chunk %d/%d is empty", i+1, len(chunks)) chunkCount += len(chunks)
}
}
for i, chunk := range chunks[:len(chunks)-1] { for i, chunk := range chunks {
if len(chunk) < buzMin { if len(chunk) == 0 {
t.Fatalf("chunk %d/%d is less than the minimum size", i+1, len(chunks)) t.Fatalf("chunk %d/%d is empty", i+1, len(chunks))
}
} }
}
unchunked := bytes.Join(chunks, nil) for i, chunk := range chunks[:len(chunks)-1] {
if !bytes.Equal(unchunked, data) { if len(chunk) < buzMin {
t.Fatal("data was chunked incorrectly") t.Fatalf("chunk %d/%d is less than the minimum size", i+1, len(chunks))
} }
} }
t.Logf("average block size: %d\n", len(data)*rounds/chunkCount)
unchunked := bytes.Join(chunks, nil)
if !bytes.Equal(unchunked, buf) {
t.Fatal("data was chunked incorrectly")
}
return chunkCount
}
func TestBuzhashChunking(t *testing.T) {
buf := make([]byte, 1024*1024*16)
count := testBuzhashChunking(t, buf)
t.Logf("average block size: %d\n", len(buf)/count)
} }
func TestBuzhashChunkReuse(t *testing.T) { func TestBuzhashChunkReuse(t *testing.T) {
......
...@@ -12,7 +12,13 @@ import ( ...@@ -12,7 +12,13 @@ import (
func TestRabinChunking(t *testing.T) { func TestRabinChunking(t *testing.T) {
data := make([]byte, 1024*1024*16) data := make([]byte, 1024*1024*16)
util.NewTimeSeededRand().Read(data) n, err := util.NewTimeSeededRand().Read(data)
if n < len(data) {
t.Fatalf("expected %d bytes, got %d", len(data), n)
}
if err != nil {
t.Fatal(err)
}
r := NewRabin(bytes.NewReader(data), 1024*256) r := NewRabin(bytes.NewReader(data), 1024*256)
...@@ -62,7 +68,13 @@ func chunkData(t *testing.T, newC newSplitter, data []byte) map[string]blocks.Bl ...@@ -62,7 +68,13 @@ func chunkData(t *testing.T, newC newSplitter, data []byte) map[string]blocks.Bl
func testReuse(t *testing.T, cr newSplitter) { func testReuse(t *testing.T, cr newSplitter) {
data := make([]byte, 1024*1024*16) data := make([]byte, 1024*1024*16)
util.NewTimeSeededRand().Read(data) n, err := util.NewTimeSeededRand().Read(data)
if n < len(data) {
t.Fatalf("expected %d bytes, got %d", len(data), n)
}
if err != nil {
t.Fatal(err)
}
ch1 := chunkData(t, cr, data[1000:]) ch1 := chunkData(t, cr, data[1000:])
ch2 := chunkData(t, cr, data) ch2 := chunkData(t, cr, data)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment