func (s *imageSuite) TestModelAssertionReservedHeaders(c *C) { const mod = `type: model authority-id: brand series: 16 brand-id: brand model: baz-3000 architecture: armhf gadget: brand-gadget kernel: kernel timestamp: 2016-01-02T10:00:00-05:00 sign-key-sha3-384: Jv8_JiHiIzJVcO9M55pPdqSDWUvuhfDIBJUS-3VW7F_idjix7Ffn5qMxB21ZQuij AXNpZw== ` reserved := []string{ "core", "os", "class", "allowed-modes", } for _, rsvd := range reserved { tweaked := strings.Replace(mod, "kernel: kernel\n", fmt.Sprintf("kernel: kernel\n%s: stuff\n", rsvd), 1) fn := filepath.Join(c.MkDir(), "model.assertion") err := ioutil.WriteFile(fn, []byte(tweaked), 0644) c.Assert(err, IsNil) _, err = image.DecodeModelAssertion(&image.Options{ ModelFile: fn, }) c.Check(err, ErrorMatches, fmt.Sprintf("model assertion cannot have reserved/unsupported header %q set", rsvd)) } }
func (s *imageSuite) TestIncorrectModelAssertions(c *C) { fn := filepath.Join(c.MkDir(), "broken-model.assertion") err := ioutil.WriteFile(fn, nil, 0644) c.Assert(err, IsNil) _, err = image.DecodeModelAssertion(&image.Options{ ModelFile: fn, }) c.Assert(err, ErrorMatches, fmt.Sprintf(`cannot decode model assertion "%s": assertion content/signature separator not found`, fn)) }
func (s *imageSuite) TestHappyDecodeModelAssertion(c *C) { fn := filepath.Join(c.MkDir(), "model.assertion") err := ioutil.WriteFile(fn, asserts.Encode(s.model), 0644) c.Assert(err, IsNil) a, err := image.DecodeModelAssertion(&image.Options{ ModelFile: fn, }) c.Assert(err, IsNil) c.Check(a.Type(), Equals, asserts.ModelType) }
func (s *imageSuite) TestValidButDifferentAssertion(c *C) { var differentAssertion = []byte(`type: snap-declaration authority-id: canonical series: 16 snap-id: snap-id-1 snap-name: first publisher-id: dev-id1 timestamp: 2016-01-02T10:00:00-05:00 sign-key-sha3-384: Jv8_JiHiIzJVcO9M55pPdqSDWUvuhfDIBJUS-3VW7F_idjix7Ffn5qMxB21ZQuij AXNpZw== `) fn := filepath.Join(c.MkDir(), "different.assertion") err := ioutil.WriteFile(fn, differentAssertion, 0644) c.Assert(err, IsNil) _, err = image.DecodeModelAssertion(&image.Options{ ModelFile: fn, }) c.Assert(err, ErrorMatches, fmt.Sprintf(`assertion in "%s" is not a model assertion`, fn)) }
func (s *imageSuite) TestMissingModelAssertions(c *C) { _, err := image.DecodeModelAssertion(&image.Options{}) c.Assert(err, ErrorMatches, "cannot read model assertion: open : no such file or directory") }