aboutsummaryrefslogtreecommitdiff
path: root/internal/cryptocore/randprefetch_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/cryptocore/randprefetch_test.go')
-rw-r--r--internal/cryptocore/randprefetch_test.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/internal/cryptocore/randprefetch_test.go b/internal/cryptocore/randprefetch_test.go
new file mode 100644
index 0000000..2a568f3
--- /dev/null
+++ b/internal/cryptocore/randprefetch_test.go
@@ -0,0 +1,40 @@
+package cryptocore
+
+import (
+ "bytes"
+ "compress/flate"
+ "runtime"
+ "sync"
+ "testing"
+)
+
+// TestRandPrefetch hammers the randPrefetcher with 100 goroutines and verifies
+// that the result is incompressible
+func TestRandPrefetch(t *testing.T) {
+ runtime.GOMAXPROCS(10)
+ p := 100
+ l := 200
+ vec := make([][]byte, p)
+ var wg sync.WaitGroup
+ for i := 0; i < p; i++ {
+ wg.Add(1)
+ go func(i int) {
+ var tmp []byte
+ for x := 0; x < l; x++ {
+ tmp = append(tmp, randPrefetcher.read(l)...)
+ }
+ vec[i] = tmp
+ wg.Done()
+ }(i)
+ }
+ wg.Wait()
+ var b bytes.Buffer
+ fw, _ := flate.NewWriter(&b, flate.BestCompression)
+ for _, v := range vec {
+ fw.Write(v)
+ }
+ fw.Close()
+ if b.Len() < p*l*l {
+ t.Errorf("random data should be incompressible, but: in=%d compressed=%d\n", p*l*l, b.Len())
+ }
+}