// MockBuiltinBaseDeclaration mocks the builtin base-declaration exposed by asserts.BuiltinBaseDeclaration. func MockBuiltinBaseDeclaration(headers []byte) (restore func()) { var prevHeaders []byte decl := asserts.BuiltinBaseDeclaration() if decl != nil { prevHeaders, _ = decl.Signature() } err := asserts.InitBuiltinBaseDeclaration(headers) if err != nil { panic(err) } return func() { err := asserts.InitBuiltinBaseDeclaration(prevHeaders) if err != nil { panic(err) } } }
func (s *baseDeclSuite) TestBuiltinInitErrors(c *C) { defer asserts.InitBuiltinBaseDeclaration(nil) tests := []struct { headers string err string }{ {"", `header entry missing ':' separator: ""`}, {"type: foo\n", `the builtin base-declaration "type" header is not set to expected value "base-declaration"`}, {"type: base-declaration", `the builtin base-declaration "authority-id" header is not set to expected value "canonical"`}, {"type: base-declaration\nauthority-id: canonical", `the builtin base-declaration "series" header is not set to expected value "16"`}, {"type: base-declaration\nauthority-id: canonical\nseries: 16\nrevision: zzz", `cannot assemble the builtin-base declaration: "revision" header is not an integer: zzz`}, {"type: base-declaration\nauthority-id: canonical\nseries: 16\nplugs: foo", `cannot assemble the builtin base-declaration: "plugs" header must be a map`}, } for _, t := range tests { err := asserts.InitBuiltinBaseDeclaration([]byte(t.headers)) c.Check(err, ErrorMatches, t.err, Commentf(t.headers)) } }
func (s *baseDeclSuite) TestBuiltin(c *C) { baseDecl := asserts.BuiltinBaseDeclaration() c.Check(baseDecl, IsNil) defer asserts.InitBuiltinBaseDeclaration(nil) const headers = ` type: base-declaration authority-id: canonical series: 16 revision: 0 plugs: network: true slots: network: allow-installation: slot-snap-type: - core ` err := asserts.InitBuiltinBaseDeclaration([]byte(headers)) c.Assert(err, IsNil) baseDecl = asserts.BuiltinBaseDeclaration() c.Assert(baseDecl, NotNil) cont, _ := baseDecl.Signature() c.Check(string(cont), Equals, strings.TrimSpace(headers)) c.Check(baseDecl.AuthorityID(), Equals, "canonical") c.Check(baseDecl.Series(), Equals, "16") c.Check(baseDecl.PlugRule("network").AllowAutoConnection[0].SlotAttributes, Equals, asserts.AlwaysMatchAttributes) c.Check(baseDecl.SlotRule("network").AllowInstallation[0].SlotSnapTypes, DeepEquals, []string{"core"}) enc := asserts.Encode(baseDecl) // it's expected that it cannot be decoded _, err = asserts.Decode(enc) c.Check(err, NotNil) }
func init() { err := asserts.InitBuiltinBaseDeclaration([]byte(baseDeclarationHeaders)) if err != nil { panic(fmt.Sprintf("cannot initialize the builtin base-declaration: %v", err)) } }