krz/gitbay

A CLI-first git forge.

clone: git clone https://gitbay.org/krz/gitbay.git

repo-descriptions: internal/sig/commit_test.go · raw

 1package sig
 2
 3import (
 4	"bytes"
 5	"testing"
 6)
 7
 8var signedCommit = []byte("tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\n" +
 9	"parent 0123456789012345678901234567890123456789\n" +
10	"author T <a@example.test> 1700000000 +0000\n" +
11	"committer T <c@example.test> 1700000000 +0000\n" +
12	"gpgsig -----BEGIN PGP SIGNATURE-----\n" +
13	" \n" +
14	" base64base64\n" +
15	" =abcd\n" +
16	" -----END PGP SIGNATURE-----\n" +
17	"\n" +
18	"subject line\n\nbody\n")
19
20func TestParseCommitSigned(t *testing.T) {
21	c, err := ParseCommit(signedCommit)
22	if err != nil {
23		t.Fatal(err)
24	}
25	wantPayload := []byte("tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\n" +
26		"parent 0123456789012345678901234567890123456789\n" +
27		"author T <a@example.test> 1700000000 +0000\n" +
28		"committer T <c@example.test> 1700000000 +0000\n" +
29		"\n" +
30		"subject line\n\nbody\n")
31	if !bytes.Equal(c.Payload, wantPayload) {
32		t.Errorf("payload not byte-exact:\ngot  %q\nwant %q", c.Payload, wantPayload)
33	}
34	wantSig := "-----BEGIN PGP SIGNATURE-----\n\nbase64base64\n=abcd\n-----END PGP SIGNATURE-----"
35	if string(c.Signature) != wantSig {
36		t.Errorf("signature reconstruction:\ngot  %q\nwant %q", c.Signature, wantSig)
37	}
38	if c.AuthorEmail != "a@example.test" || c.CommitterEmail != "c@example.test" ||
39		c.Subject != "subject line" || c.AuthorUnix != 1700000000 {
40		t.Errorf("fields: %+v", c)
41	}
42	if KindOf(c.Signature) != SigOpenPGP {
43		t.Errorf("kind = %v", KindOf(c.Signature))
44	}
45}
46
47func TestParseCommitUnsigned(t *testing.T) {
48	raw := []byte("tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904\n" +
49		"author T <a@example.test> 1700000000 +0000\n" +
50		"committer T <a@example.test> 1700000000 +0000\n" +
51		"\nsubject\n")
52	c, err := ParseCommit(raw)
53	if err != nil {
54		t.Fatal(err)
55	}
56	if c.Signature != nil {
57		t.Errorf("unsigned commit has signature %q", c.Signature)
58	}
59	if !bytes.Equal(c.Payload, raw) {
60		t.Errorf("unsigned payload must equal raw object")
61	}
62}