github.com/kubiko/snapd@v0.0.0-20201013125620-d4f3094d9ddf/cmd/snap/cmd_sign_build_test.go (about) 1 // -*- Mode: Go; indent-tabs-mode: t -*- 2 3 /* 4 * Copyright (C) 2016 Canonical Ltd 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 3 as 8 * published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 17 * 18 */ 19 20 package main_test 21 22 import ( 23 "fmt" 24 "io/ioutil" 25 "os" 26 "path/filepath" 27 28 . "gopkg.in/check.v1" 29 30 "github.com/snapcore/snapd/asserts" 31 snap "github.com/snapcore/snapd/cmd/snap" 32 ) 33 34 type SnapSignBuildSuite struct { 35 BaseSnapSuite 36 } 37 38 var _ = Suite(&SnapSignBuildSuite{}) 39 40 func (s *SnapSignBuildSuite) TestSignBuildMandatoryFlags(c *C) { 41 _, err := snap.Parser(snap.Client()).ParseArgs([]string{"sign-build", "foo_1_amd64.snap"}) 42 c.Assert(err, NotNil) 43 c.Check(err.Error(), Equals, "the required flags `--developer-id' and `--snap-id' were not specified") 44 c.Check(s.Stdout(), Equals, "") 45 c.Check(s.Stderr(), Equals, "") 46 } 47 48 func (s *SnapSignBuildSuite) TestSignBuildMissingSnap(c *C) { 49 _, err := snap.Parser(snap.Client()).ParseArgs([]string{"sign-build", "foo_1_amd64.snap", "--developer-id", "dev-id1", "--snap-id", "snap-id-1"}) 50 c.Assert(err, NotNil) 51 c.Check(err.Error(), Equals, "cannot compute snap \"foo_1_amd64.snap\" digest: open foo_1_amd64.snap: no such file or directory") 52 c.Check(s.Stdout(), Equals, "") 53 c.Check(s.Stderr(), Equals, "") 54 } 55 56 func (s *SnapSignBuildSuite) TestSignBuildMissingKey(c *C) { 57 snapFilename := "foo_1_amd64.snap" 58 _err := ioutil.WriteFile(snapFilename, []byte("sample"), 0644) 59 c.Assert(_err, IsNil) 60 defer os.Remove(snapFilename) 61 62 tempdir := c.MkDir() 63 os.Setenv("SNAP_GNUPG_HOME", tempdir) 64 defer os.Unsetenv("SNAP_GNUPG_HOME") 65 66 _, err := snap.Parser(snap.Client()).ParseArgs([]string{"sign-build", snapFilename, "--developer-id", "dev-id1", "--snap-id", "snap-id-1"}) 67 c.Assert(err, NotNil) 68 c.Check(err.Error(), Equals, "cannot use \"default\" key: cannot find key named \"default\" in GPG keyring") 69 c.Check(s.Stdout(), Equals, "") 70 c.Check(s.Stderr(), Equals, "") 71 } 72 73 func (s *SnapSignBuildSuite) TestSignBuildWorks(c *C) { 74 snapFilename := "foo_1_amd64.snap" 75 snapContent := []byte("sample") 76 _err := ioutil.WriteFile(snapFilename, snapContent, 0644) 77 c.Assert(_err, IsNil) 78 defer os.Remove(snapFilename) 79 80 tempdir := c.MkDir() 81 for _, fileName := range []string{"pubring.gpg", "secring.gpg", "trustdb.gpg"} { 82 data, err := ioutil.ReadFile(filepath.Join("test-data", fileName)) 83 c.Assert(err, IsNil) 84 err = ioutil.WriteFile(filepath.Join(tempdir, fileName), data, 0644) 85 c.Assert(err, IsNil) 86 } 87 os.Setenv("SNAP_GNUPG_HOME", tempdir) 88 defer os.Unsetenv("SNAP_GNUPG_HOME") 89 90 _, err := snap.Parser(snap.Client()).ParseArgs([]string{"sign-build", snapFilename, "--developer-id", "dev-id1", "--snap-id", "snap-id-1"}) 91 c.Assert(err, IsNil) 92 93 assertion, err := asserts.Decode([]byte(s.Stdout())) 94 c.Assert(err, IsNil) 95 c.Check(assertion.Type(), Equals, asserts.SnapBuildType) 96 c.Check(assertion.Revision(), Equals, 0) 97 c.Check(assertion.HeaderString("authority-id"), Equals, "dev-id1") 98 c.Check(assertion.HeaderString("developer-id"), Equals, "dev-id1") 99 c.Check(assertion.HeaderString("grade"), Equals, "stable") 100 c.Check(assertion.HeaderString("snap-id"), Equals, "snap-id-1") 101 c.Check(assertion.HeaderString("snap-size"), Equals, fmt.Sprintf("%d", len(snapContent))) 102 c.Check(assertion.HeaderString("snap-sha3-384"), Equals, "jyP7dUgb8HiRNd1SdYPp_il-YNrl6P6PgNAe-j6_7WytjKslENhMD3Of5XBU5bQK") 103 104 // check for valid signature ?! 105 c.Check(s.Stderr(), Equals, "") 106 } 107 108 func (s *SnapSignBuildSuite) TestSignBuildWorksDevelGrade(c *C) { 109 snapFilename := "foo_1_amd64.snap" 110 snapContent := []byte("sample") 111 _err := ioutil.WriteFile(snapFilename, snapContent, 0644) 112 c.Assert(_err, IsNil) 113 defer os.Remove(snapFilename) 114 115 tempdir := c.MkDir() 116 for _, fileName := range []string{"pubring.gpg", "secring.gpg", "trustdb.gpg"} { 117 data, err := ioutil.ReadFile(filepath.Join("test-data", fileName)) 118 c.Assert(err, IsNil) 119 err = ioutil.WriteFile(filepath.Join(tempdir, fileName), data, 0644) 120 c.Assert(err, IsNil) 121 } 122 os.Setenv("SNAP_GNUPG_HOME", tempdir) 123 defer os.Unsetenv("SNAP_GNUPG_HOME") 124 125 _, err := snap.Parser(snap.Client()).ParseArgs([]string{"sign-build", snapFilename, "--developer-id", "dev-id1", "--snap-id", "snap-id-1", "--grade", "devel"}) 126 c.Assert(err, IsNil) 127 assertion, err := asserts.Decode([]byte(s.Stdout())) 128 c.Assert(err, IsNil) 129 c.Check(assertion.Type(), Equals, asserts.SnapBuildType) 130 c.Check(assertion.HeaderString("grade"), Equals, "devel") 131 132 // check for valid signature ?! 133 c.Check(s.Stderr(), Equals, "") 134 }