github.phpd.cn/thought-machine/please@v12.2.0+incompatible/src/update/verify_test.go (about) 1 package update 2 3 import ( 4 "bytes" 5 "io" 6 "io/ioutil" 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 ) 11 12 // readFile reads a file into an io.Reader 13 // It uses ioutil.ReadFile because that more closely mimics how we would do this 14 // for real (i.e. we would read to a buffer over HTTP then verify that, because we 15 // need to reuse the reader again afterwards and don't want to parse the tarball 16 // until we're sure it's OK). 17 func readFile(filename string) io.Reader { 18 b, err := ioutil.ReadFile(filename) 19 if err != nil { 20 log.Fatalf("%s", err) 21 } 22 return bytes.NewReader(b) 23 } 24 25 func TestVerifyGoodSignature(t *testing.T) { 26 signed := readFile("src/update/test_data/test.txt") 27 signature := readFile("src/update/test_data/test.txt.asc") 28 assert.True(t, verifySignature(signed, signature)) 29 } 30 31 func TestVerifyBadSignature(t *testing.T) { 32 signed := readFile("src/update/test_data/test.txt") 33 signature := readFile("src/update/test_data/bad.txt.asc") 34 assert.False(t, verifySignature(signed, signature)) 35 } 36 37 func TestVerifyBadFile(t *testing.T) { 38 signed := readFile("src/update/test_data/bad.txt") 39 signature := readFile("src/update/test_data/test.txt.asc") 40 assert.False(t, verifySignature(signed, signature)) 41 } 42 43 func TestMustVerifyGoodSignature(t *testing.T) { 44 signed := readFile("src/update/test_data/test.txt") 45 signature := readFile("src/update/test_data/test.txt.asc") 46 r := mustVerifySignature(signed, signature) 47 b, err := ioutil.ReadAll(r) 48 assert.NoError(t, err) 49 assert.EqualValues(t, []byte("Test file for verifying release signatures.\n"), b) 50 } 51 52 func TestMustVerifyBadSignature(t *testing.T) { 53 signed := readFile("src/update/test_data/test.txt") 54 signature := readFile("src/update/test_data/bad.txt.asc") 55 assert.Panics(t, func() { mustVerifySignature(signed, signature) }) 56 } 57 58 func TestMustVerifyBadFile(t *testing.T) { 59 signed := readFile("src/update/test_data/bad.txt") 60 signature := readFile("src/update/test_data/test.txt.asc") 61 assert.Panics(t, func() { mustVerifySignature(signed, signature) }) 62 }