Browse Source

Genfiles use actual source data

Jakob Borg 11 years ago
parent
commit
5bf7d372f6
2 changed files with 53 additions and 8 deletions
  1. 1 1
      integration/f1/config.xml
  2. 52 7
      integration/genfiles.go

+ 1 - 1
integration/f1/config.xml

@@ -21,7 +21,7 @@
         <localAnnounceEnabled>true</localAnnounceEnabled>
         <localAnnouncePort>21025</localAnnouncePort>
         <parallelRequests>16</parallelRequests>
-        <maxSendKbps>50</maxSendKbps>
+        <maxSendKbps>500</maxSendKbps>
         <rescanIntervalS>10</rescanIntervalS>
         <reconnectionIntervalS>5</reconnectionIntervalS>
         <maxChangeKbps>10000</maxChangeKbps>

+ 52 - 7
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)
+
+		src := io.LimitReader(&inifiteReader{fd}, int64(s))
+
 		p1 := filepath.Join(p0, n)
-		ioutil.WriteFile(p1, b, 0644)
+		dst, err := os.Create(p1)
+		if err != nil {
+			log.Fatal(err)
+		}
+
+		_, err = io.Copy(dst, src)
+		if err != nil {
+			log.Fatal(err)
+		}
 
-		os.Chmod(p1, os.FileMode(mr.Intn(0777)|0400))
+		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
 }