diff --git a/integration/f1/config.xml b/integration/f1/config.xml
index 101b591c7..111c1607f 100644
--- a/integration/f1/config.xml
+++ b/integration/f1/config.xml
@@ -21,7 +21,7 @@
true
21025
16
- 50
+ 500
10
5
10000
diff --git a/integration/genfiles.go b/integration/genfiles.go
index 3e84c1178..b1b3fa47b 100644
--- a/integration/genfiles.go
+++ b/integration/genfiles.go
@@ -10,7 +10,8 @@ import (
"crypto/rand"
"flag"
"fmt"
- "io/ioutil"
+ "io"
+ "log"
mr "math/rand"
"os"
"path/filepath"
@@ -26,29 +27,73 @@ func name() string {
func main() {
var files int
var maxexp int
+ var srcname string
flag.IntVar(&files, "files", 1000, "Number of files")
flag.IntVar(&maxexp, "maxexp", 20, "Maximum file size (max = 2^n + 128*1024 B)")
+ flag.StringVar(&srcname, "src", "/usr/share/dict/words", "Source material")
flag.Parse()
+ fd, err := os.Open(srcname)
+ if err != nil {
+ log.Fatal(err)
+ }
+
for i := 0; i < files; i++ {
n := name()
p0 := filepath.Join(string(n[0]), n[0:2])
- os.MkdirAll(p0, 0755)
+ err = os.MkdirAll(p0, 0755)
+ if err != nil {
+ log.Fatal(err)
+ }
+
s := 1 << uint(mr.Intn(maxexp))
a := 128 * 1024
if a > s {
a = s
}
s += mr.Intn(a)
- b := make([]byte, s)
- rand.Reader.Read(b)
- p1 := filepath.Join(p0, n)
- ioutil.WriteFile(p1, b, 0644)
- os.Chmod(p1, os.FileMode(mr.Intn(0777)|0400))
+ src := io.LimitReader(&inifiteReader{fd}, int64(s))
+
+ p1 := filepath.Join(p0, n)
+ dst, err := os.Create(p1)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ _, err = io.Copy(dst, src)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ err = dst.Close()
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ err = os.Chmod(p1, os.FileMode(mr.Intn(0777)|0400))
+ if err != nil {
+ log.Fatal(err)
+ }
t := time.Now().Add(-time.Duration(mr.Intn(30*86400)) * time.Second)
- os.Chtimes(p1, t, t)
+ err = os.Chtimes(p1, t, t)
+ if err != nil {
+ log.Fatal(err)
+ }
}
}
+
+type inifiteReader struct {
+ rd io.ReadSeeker
+}
+
+func (i *inifiteReader) Read(bs []byte) (int, error) {
+ n, err := i.rd.Read(bs)
+ if err == io.EOF {
+ err = nil
+ i.rd.Seek(0, 0)
+ }
+ return n, err
+}