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  }