diff options
Diffstat (limited to 'xdelta3/go/src/regtest.go')
-rw-r--r-- | xdelta3/go/src/regtest.go | 40 |
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 | ||
18 | func smokeTest(r *xdelta.Runner, p *xdelta.Program) { | 18 | func 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 | ||
58 | func offsetTest(r *xdelta.Runner, p *xdelta.Program, bufsize, offset, length int64) { | 58 | func 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 | ||
94 | func main() { | 97 | func 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 | } |