summaryrefslogtreecommitdiff
path: root/xdelta3/go/src/regtest.go
diff options
context:
space:
mode:
Diffstat (limited to 'xdelta3/go/src/regtest.go')
-rw-r--r--xdelta3/go/src/regtest.go40
1 files changed, 21 insertions, 19 deletions
diff --git a/xdelta3/go/src/regtest.go b/xdelta3/go/src/regtest.go
index adb4ae4..d762235 100644
--- a/xdelta3/go/src/regtest.go
+++ b/xdelta3/go/src/regtest.go
@@ -15,8 +15,8 @@ const (
15 seed = 1422253499919909358 15 seed = 1422253499919909358
16) 16)
17 17
18func smokeTest(r *xdelta.Runner, p *xdelta.Program) { 18func smokeTest(t *xdelta.TestGroup, p *xdelta.Program) {
19 t, g := xdelta.NewTestGroup(r) 19 g := t.Main()
20 target := "Hello world!" 20 target := "Hello world!"
21 source := "Hello world, nice to meet you!" 21 source := "Hello world, nice to meet you!"
22 22
@@ -55,32 +55,29 @@ func smokeTest(r *xdelta.Runner, p *xdelta.Program) {
55 t.Wait(g, enc, dec) 55 t.Wait(g, enc, dec)
56} 56}
57 57
58func offsetTest(r *xdelta.Runner, p *xdelta.Program, bufsize, offset, length int64) { 58func offsetTest(t *xdelta.TestGroup, p *xdelta.Program, offset, bufsize, length int64) {
59 // Note there is a strong potential to deadlock or fail due to 59 g := t.Main()
60 // a broken test in this test for several reasons: 60 eargs := []string{"-e", "-0", fmt.Sprint("-B", bufsize), "-q", fmt.Sprint("-W", winsize)}
61 // (a) decoder is not required to read the entire source file
62 // (b) decoder defers open to source file until first window received
63 // (c) open on a fifo blocks until a reader opens
64 // (d) sub-process Wait can invalidate busy file descriptors
65 t, g := xdelta.NewTestGroup(r)
66 eargs := []string{"-e", "-0", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)}
67 enc, err := t.Exec("encode", p, true, eargs) 61 enc, err := t.Exec("encode", p, true, eargs)
68 if err != nil { 62 if err != nil {
69 g.Panic(err) 63 g.Panic(err)
70 } 64 }
71 65
72 dargs := []string{"-d", fmt.Sprint("-B", bufsize), "-vv", fmt.Sprint("-W", winsize)} 66 dargs := []string{"-d", fmt.Sprint("-B", bufsize), "-q", fmt.Sprint("-W", winsize)}
73 dec, err := t.Exec("decode", p, true, dargs) 67 dec, err := t.Exec("decode", p, true, dargs)
74 if err != nil { 68 if err != nil {
75 g.Panic(err) 69 g.Panic(err)
76 } 70 }
77 71
72 // The pipe used to read the decoder output and compare
73 // against the target.
78 read, write := io.Pipe() 74 read, write := io.Pipe()
79 75
80 t.Empty(enc.Stderr, "encode") 76 t.Empty(enc.Stderr, "encode")
81 t.Empty(dec.Stderr, "decode") 77 t.Empty(dec.Stderr, "decode")
82 78
83 t.CopyStreams(enc.Stdout, dec.Stdin) 79 var encoded_size int64
80 t.CopyStreams(enc.Stdout, dec.Stdin, &encoded_size)
84 t.CompareStreams(dec.Stdout, read, length) 81 t.CompareStreams(dec.Stdout, read, length)
85 82
86 // The decoder output ("read", above) is compared with the 83 // The decoder output ("read", above) is compared with the
@@ -89,6 +86,12 @@ func offsetTest(r *xdelta.Runner, p *xdelta.Program, bufsize, offset, length int
89 t.WriteRstreams("encode", seed, offset, length, enc.Srcin, enc.Stdin) 86 t.WriteRstreams("encode", seed, offset, length, enc.Srcin, enc.Stdin)
90 t.WriteRstreams("decode", seed, offset, length, dec.Srcin, write) 87 t.WriteRstreams("decode", seed, offset, length, dec.Srcin, write)
91 t.Wait(g, enc, dec) 88 t.Wait(g, enc, dec)
89
90 expect := bufsize - offset
91 if float64(encoded_size) < (0.95 * float64(expect)) ||
92 float64(encoded_size) > (1.05 * float64(expect)) {
93 t.Fail("encoded size should be ~=", expect, ", actual ", encoded_size)
94 }
92} 95}
93 96
94func main() { 97func main() {
@@ -100,11 +103,10 @@ func main() {
100 103
101 prog := &xdelta.Program{xdelta3} 104 prog := &xdelta.Program{xdelta3}
102 105
103 smokeTest(r, prog) 106 r.RunTest("smoketest", func(tg *xdelta.TestGroup) { smokeTest(tg, prog) })
104 fmt.Println("Smoke-test pass")
105 107
106 offsetTest(r, prog, 4 << 20, 3 << 20, 5 << 20) 108 for i := uint(20); i <= 30; i += 1 {
107 fmt.Println("Offset-test pass") 109 r.RunTest(fmt.Sprint("offset", i), func(t *xdelta.TestGroup) {
108 110 offsetTest(t, prog, 1 << i, 2 << i, 3 << i) })
109 //offsetTest(r, xdelta.NewTestGroup(), prog, 1 << 31, 1 << 32, 1 << 33) 111 }
110} 112}