github.com/keygen-sh/go-update@v1.0.0/internal/binarydist/diff_test.go (about) 1 package binarydist 2 3 import ( 4 "bytes" 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "testing" 9 ) 10 11 var diffT = []struct { 12 old *os.File 13 new *os.File 14 }{ 15 { 16 old: mustWriteRandFile("test.old", 1e3), 17 new: mustWriteRandFile("test.new", 1e3), 18 }, 19 { 20 old: mustOpen("testdata/sample.old"), 21 new: mustOpen("testdata/sample.new"), 22 }, 23 } 24 25 func TestDiff(t *testing.T) { 26 for _, s := range diffT { 27 got, err := ioutil.TempFile("/tmp", "bspatch.") 28 if err != nil { 29 panic(err) 30 } 31 os.Remove(got.Name()) 32 33 exp, err := ioutil.TempFile("/tmp", "bspatch.") 34 if err != nil { 35 panic(err) 36 } 37 38 cmd := exec.Command("bsdiff", s.old.Name(), s.new.Name(), exp.Name()) 39 cmd.Stdout = os.Stdout 40 err = cmd.Run() 41 os.Remove(exp.Name()) 42 if err != nil { 43 panic(err) 44 } 45 46 err = Diff(s.old, s.new, got) 47 if err != nil { 48 t.Fatal("err", err) 49 } 50 51 _, err = got.Seek(0, 0) 52 if err != nil { 53 panic(err) 54 } 55 gotBuf := mustReadAll(got) 56 expBuf := mustReadAll(exp) 57 58 if !bytes.Equal(gotBuf, expBuf) { 59 t.Fail() 60 t.Logf("diff %s %s", s.old.Name(), s.new.Name()) 61 t.Logf("%s: len(got) = %d", got.Name(), len(gotBuf)) 62 t.Logf("%s: len(exp) = %d", exp.Name(), len(expBuf)) 63 i := matchlen(gotBuf, expBuf) 64 t.Logf("produced different output at pos %d; %d != %d", i, gotBuf[i], expBuf[i]) 65 } 66 } 67 }