You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.3 KiB
68 lines
1.3 KiB
package binarydist
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
)
|
|
|
|
var diffT = []struct {
|
|
old *os.File
|
|
new *os.File
|
|
}{
|
|
{
|
|
old: mustWriteRandFile("test.old", 1e3),
|
|
new: mustWriteRandFile("test.new", 1e3),
|
|
},
|
|
{
|
|
old: mustOpen("testdata/sample.old"),
|
|
new: mustOpen("testdata/sample.new"),
|
|
},
|
|
}
|
|
|
|
func TestDiff(t *testing.T) {
|
|
for _, s := range diffT {
|
|
got, err := ioutil.TempFile("/tmp", "bspatch.")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
os.Remove(got.Name())
|
|
|
|
exp, err := ioutil.TempFile("/tmp", "bspatch.")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
cmd := exec.Command("bsdiff", s.old.Name(), s.new.Name(), exp.Name())
|
|
cmd.Stdout = os.Stdout
|
|
err = cmd.Run()
|
|
os.Remove(exp.Name())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
err = Diff(s.old, s.new, got)
|
|
if err != nil {
|
|
t.Fatal("err", err)
|
|
}
|
|
|
|
_, err = got.Seek(0, 0)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
gotBuf := mustReadAll(got)
|
|
expBuf := mustReadAll(exp)
|
|
|
|
if !bytes.Equal(gotBuf, expBuf) {
|
|
t.Fail()
|
|
t.Logf("diff %s %s", s.old.Name(), s.new.Name())
|
|
t.Logf("%s: len(got) = %d", got.Name(), len(gotBuf))
|
|
t.Logf("%s: len(exp) = %d", exp.Name(), len(expBuf))
|
|
i := matchlen(gotBuf, expBuf)
|
|
t.Logf("produced different output at pos %d; %d != %d", i, gotBuf[i], expBuf[i])
|
|
}
|
|
}
|
|
}
|