github.phpd.cn/thought-machine/please@v12.2.0+incompatible/tools/release_signer/signer/signer_test.go (about)

     1  package signer
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/assert"
     8  	"golang.org/x/crypto/openpgp"
     9  )
    10  
    11  const (
    12  	pubKey  = "tools/release_signer/signer/test_data/pub.gpg"
    13  	secKey  = "tools/release_signer/signer/test_data/sec.gpg"
    14  	testTxt = "tools/release_signer/signer/test_data/test.txt"
    15  	badTxt  = "tools/release_signer/signer/test_data/bad.txt"
    16  )
    17  
    18  func must(err error) {
    19  	if err != nil {
    20  		panic(err)
    21  	}
    22  }
    23  
    24  func verifyFile(signed, signature, keyring string) bool {
    25  	f1, err := os.Open(signed)
    26  	must(err)
    27  	f2, err := os.Open(signature)
    28  	must(err)
    29  	f3, err := os.Open(keyring)
    30  	must(err)
    31  	entities, err := openpgp.ReadArmoredKeyRing(f3)
    32  	must(err)
    33  	_, err = openpgp.CheckArmoredDetachedSignature(entities, f1, f2)
    34  	return err == nil
    35  }
    36  
    37  func TestSignFile(t *testing.T) {
    38  	assert.NoError(t, SignFile(testTxt, "test.txt.asc", secKey, "test@please.build", "testtest"))
    39  	assert.True(t, verifyFile(testTxt, "test.txt.asc", pubKey))
    40  }
    41  
    42  func TestSignFileBadPassphrase(t *testing.T) {
    43  	assert.Error(t, SignFile(testTxt, "test.txt.asc", secKey, "test@please.build", "nope"))
    44  }
    45  
    46  func TestSignFileBadSignature(t *testing.T) {
    47  	assert.NoError(t, SignFile(testTxt, "test.txt.asc", secKey, "test@please.build", "testtest"))
    48  	assert.False(t, verifyFile(badTxt, "test.txt.asc", pubKey))
    49  }
    50  
    51  func TestSignFileUnknownUser(t *testing.T) {
    52  	assert.Error(t, SignFile(testTxt, "test.txt.asc", secKey, "not@please.build", "testtest"))
    53  }
    54  
    55  func TestSignFileMissingKeyring(t *testing.T) {
    56  	assert.Error(t, SignFile(testTxt, "test.txt.asc", "doesnt_exist", "test@please.build", "testtest"))
    57  }
    58  
    59  func TestSignFileBadKeyring(t *testing.T) {
    60  	assert.Error(t, SignFile(testTxt, "test.txt.asc", badTxt, "test@please.build", "testtest"))
    61  }
    62  
    63  func TestSignFileMissingInput(t *testing.T) {
    64  	assert.Error(t, SignFile("doesnt_exist", "test.txt.asc", secKey, "test@please.build", "testtest"))
    65  }
    66  
    67  func TestSignFileCantOutput(t *testing.T) {
    68  	assert.Error(t, SignFile(testTxt, "dir/doesnt/exist", secKey, "test@please.build", "testtest"))
    69  }