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  }