// Add one assertion to the batch. func (b *Batch) Add(a asserts.Assertion) error { if err := b.bs.Put(a.Type(), a); err != nil { if revErr, ok := err.(*asserts.RevisionError); ok { if revErr.Current >= a.Revision() { // we already got something more recent return nil } } return err } b.refs = append(b.refs, a.Ref()) return nil }
func (mbss *memBackstoreSuite) TestSearchFormat(c *C) { bs := asserts.NewMemoryBackstore() af0, err := asserts.Decode([]byte("type: test-only-2\n" + "authority-id: auth-id1\n" + "pk1: foo\n" + "pk2: bar\n" + "sign-key-sha3-384: Jv8_JiHiIzJVcO9M55pPdqSDWUvuhfDIBJUS-3VW7F_idjix7Ffn5qMxB21ZQuij" + "\n\n" + "AXNpZw==")) c.Assert(err, IsNil) af1, err := asserts.Decode([]byte("type: test-only-2\n" + "authority-id: auth-id1\n" + "pk1: foo\n" + "pk2: bar\n" + "format: 1\n" + "revision: 1\n" + "sign-key-sha3-384: Jv8_JiHiIzJVcO9M55pPdqSDWUvuhfDIBJUS-3VW7F_idjix7Ffn5qMxB21ZQuij" + "\n\n" + "AXNpZw==")) c.Assert(err, IsNil) af2, err := asserts.Decode([]byte("type: test-only-2\n" + "authority-id: auth-id1\n" + "pk1: foo\n" + "pk2: baz\n" + "format: 2\n" + "revision: 1\n" + "sign-key-sha3-384: Jv8_JiHiIzJVcO9M55pPdqSDWUvuhfDIBJUS-3VW7F_idjix7Ffn5qMxB21ZQuij" + "\n\n" + "AXNpZw==")) c.Assert(err, IsNil) err = bs.Put(asserts.TestOnly2Type, af0) c.Assert(err, IsNil) queries := []map[string]string{ {"pk1": "foo", "pk2": "bar"}, {"pk1": "foo"}, {"pk2": "bar"}, } for _, q := range queries { var a asserts.Assertion foundCb := func(a1 asserts.Assertion) { a = a1 } err := bs.Search(asserts.TestOnly2Type, q, foundCb, 1) c.Assert(err, IsNil) c.Check(a.Revision(), Equals, 0) } err = bs.Put(asserts.TestOnly2Type, af1) c.Assert(err, IsNil) for _, q := range queries { var a asserts.Assertion foundCb := func(a1 asserts.Assertion) { a = a1 } err := bs.Search(asserts.TestOnly2Type, q, foundCb, 1) c.Assert(err, IsNil) c.Check(a.Revision(), Equals, 1) err = bs.Search(asserts.TestOnly2Type, q, foundCb, 0) c.Assert(err, IsNil) c.Check(a.Revision(), Equals, 0) } err = bs.Put(asserts.TestOnly2Type, af2) c.Assert(err, IsNil) var as []asserts.Assertion foundCb := func(a1 asserts.Assertion) { as = append(as, a1) } err = bs.Search(asserts.TestOnly2Type, map[string]string{ "pk1": "foo", }, foundCb, 1) // will not find af2 c.Assert(err, IsNil) c.Check(as, HasLen, 1) c.Check(as[0].Revision(), Equals, 1) }