Documentation ¶
Overview ¶
Package testonly holds test-specific code for Trillian storage layers.
Index ¶
- Variables
- func MustCreateNodeIDForTreeCoords(depth, index int64, maxPathBits int) storage.NodeID
- func NodeIDEq(n storage.NodeID) gomock.Matcher
- func NodeSet(nodes []storage.Node) gomock.Matcher
- type AdminStorageTester
- func (tester *AdminStorageTester) RunAllTests(t *testing.T)
- func (tester *AdminStorageTester) TestAdminTXClose(t *testing.T)
- func (tester *AdminStorageTester) TestCreateTree(t *testing.T)
- func (tester *AdminStorageTester) TestHardDeleteTree(t *testing.T)
- func (tester *AdminStorageTester) TestHardDeleteTreeErrors(t *testing.T)
- func (tester *AdminStorageTester) TestListTrees(t *testing.T)
- func (tester *AdminStorageTester) TestSoftDeleteTree(t *testing.T)
- func (tester *AdminStorageTester) TestSoftDeleteTreeErrors(t *testing.T)
- func (tester *AdminStorageTester) TestUndeleteTree(t *testing.T)
- func (tester *AdminStorageTester) TestUndeleteTreeErrors(t *testing.T)
- func (tester *AdminStorageTester) TestUpdateTree(t *testing.T)
- type FakeNodeReader
- type LeafBatch
- type MultiFakeNodeReader
- type NodeMapping
Constants ¶
This section is empty.
Variables ¶
var ( // LogTree is a valid, LOG-type trillian.Tree for tests. LogTree = &trillian.Tree{ TreeState: trillian.TreeState_ACTIVE, TreeType: trillian.TreeType_LOG, HashStrategy: trillian.HashStrategy_RFC6962_SHA256, HashAlgorithm: spb.DigitallySigned_SHA256, SignatureAlgorithm: spb.DigitallySigned_ECDSA, DisplayName: "Llamas Log", Description: "Registry of publicly-owned llamas", PrivateKey: mustMarshalAny(&keyspb.PrivateKey{ Der: ktestonly.MustMarshalPrivatePEMToDER(privateKeyPEM, privateKeyPass), }), PublicKey: &keyspb.PublicKey{ Der: ktestonly.MustMarshalPublicPEMToDER(publicKeyPEM), }, MaxRootDuration: ptypes.DurationProto(0 * time.Millisecond), } // LogTreeEmptyRootHash is the root hash of LogTree when empty. LogTreeEmptyRootHash = func() []byte { hasher, err := hash(LogTree) if err != nil { panic(err) } return hasher.New().Sum(nil) }() // MapTree is a valid, MAP-type trillian.Tree for tests. MapTree = &trillian.Tree{ TreeState: trillian.TreeState_ACTIVE, TreeType: trillian.TreeType_MAP, HashStrategy: trillian.HashStrategy_TEST_MAP_HASHER, HashAlgorithm: spb.DigitallySigned_SHA256, SignatureAlgorithm: spb.DigitallySigned_ECDSA, DisplayName: "Llamas Map", Description: "Key Transparency map for all your digital llama needs.", PrivateKey: mustMarshalAny(&keyspb.PrivateKey{ Der: ktestonly.MustMarshalPrivatePEMToDER(testonly.DemoPrivateKey, testonly.DemoPrivateKeyPass), }), PublicKey: &keyspb.PublicKey{ Der: ktestonly.MustMarshalPublicPEMToDER(testonly.DemoPublicKey), }, MaxRootDuration: ptypes.DurationProto(0 * time.Millisecond), } // MapTreeEmptyRootHash is the root hash of MapTree when 'empty' (i.e. no leaves are set). MapTreeEmptyRootHash = func() []byte { hasher, err := hash(MapTree) if err != nil { panic(err) } mh := maphasher.New(hasher) return mh.HashEmpty(0, nil, mh.BitLen()) }() )
Functions ¶
func MustCreateNodeIDForTreeCoords ¶
MustCreateNodeIDForTreeCoords creates a NodeID for the given position in the tree.
Types ¶
type AdminStorageTester ¶
type AdminStorageTester struct { // NewAdminStorage returns an AdminStorage instance pointing to a clean // test database. NewAdminStorage func() storage.AdminStorage }
AdminStorageTester runs a suite of tests against AdminStorage implementations.
func (*AdminStorageTester) RunAllTests ¶
func (tester *AdminStorageTester) RunAllTests(t *testing.T)
RunAllTests runs all AdminStorage tests.
func (*AdminStorageTester) TestAdminTXClose ¶
func (tester *AdminStorageTester) TestAdminTXClose(t *testing.T)
TestAdminTXClose verifies the behavior of Close() with and without explicit Commit() / Rollback() calls.
func (*AdminStorageTester) TestCreateTree ¶
func (tester *AdminStorageTester) TestCreateTree(t *testing.T)
TestCreateTree tests AdminStorage Tree creation.
func (*AdminStorageTester) TestHardDeleteTree ¶
func (tester *AdminStorageTester) TestHardDeleteTree(t *testing.T)
TestHardDeleteTree tests success scenarios of HardDeleteTree.
func (*AdminStorageTester) TestHardDeleteTreeErrors ¶
func (tester *AdminStorageTester) TestHardDeleteTreeErrors(t *testing.T)
TestHardDeleteTreeErrors tests error scenarios of HardDeleteTree.
func (*AdminStorageTester) TestListTrees ¶
func (tester *AdminStorageTester) TestListTrees(t *testing.T)
TestListTrees tests both ListTreeIDs and ListTrees.
func (*AdminStorageTester) TestSoftDeleteTree ¶
func (tester *AdminStorageTester) TestSoftDeleteTree(t *testing.T)
TestSoftDeleteTree tests success scenarios of SoftDeleteTree.
func (*AdminStorageTester) TestSoftDeleteTreeErrors ¶
func (tester *AdminStorageTester) TestSoftDeleteTreeErrors(t *testing.T)
TestSoftDeleteTreeErrors tests error scenarios of SoftDeleteTree.
func (*AdminStorageTester) TestUndeleteTree ¶
func (tester *AdminStorageTester) TestUndeleteTree(t *testing.T)
TestUndeleteTree tests success scenarios of UndeleteTree.
func (*AdminStorageTester) TestUndeleteTreeErrors ¶
func (tester *AdminStorageTester) TestUndeleteTreeErrors(t *testing.T)
TestUndeleteTreeErrors tests error scenarios of UndeleteTree.
func (*AdminStorageTester) TestUpdateTree ¶
func (tester *AdminStorageTester) TestUpdateTree(t *testing.T)
TestUpdateTree tests AdminStorage Tree updates.
type FakeNodeReader ¶
type FakeNodeReader struct {
// contains filtered or unexported fields
}
FakeNodeReader is an implementation of storage.NodeReader that's preloaded with a set of NodeID -> Node mappings and will return only those. Requesting any other nodes results in an error. For use in tests only, does not implement any other storage APIs.
func NewFakeNodeReader ¶
func NewFakeNodeReader(mappings []NodeMapping, treeSize, treeRevision int64) *FakeNodeReader
NewFakeNodeReader creates and returns a FakeNodeReader with the supplied nodeID -> Node mappings assuming that all the nodes are at a specified tree revision. All the nodeIDs must be distinct.
func (FakeNodeReader) GetMerkleNodes ¶
func (f FakeNodeReader) GetMerkleNodes(treeRevision int64, NodeIDs []storage.NodeID) ([]storage.Node, error)
GetMerkleNodes implements the corresponding NodeReader API.
func (FakeNodeReader) GetTreeRevisionIncludingSize ¶
func (f FakeNodeReader) GetTreeRevisionIncludingSize(treeSize int64) (int64, error)
GetTreeRevisionIncludingSize implements the corresponding NodeReader API.
type LeafBatch ¶
LeafBatch describes a set of leaves to be loaded into a MultiFakeNodeReader via a compact merkle tree. As each batch is added to the tree a set of node updates are collected and recorded in a FakeNodeReader for that revision. The expected root should be the result of calling CurrentRoot() on the compact Merkle tree encoded by hex.EncodeToString().
type MultiFakeNodeReader ¶
type MultiFakeNodeReader struct {
// contains filtered or unexported fields
}
MultiFakeNodeReader can provide nodes at multiple revisions. It delegates to a number of FakeNodeReaders, each set up to handle one revision.
func NewMultiFakeNodeReader ¶
func NewMultiFakeNodeReader(readers []FakeNodeReader) *MultiFakeNodeReader
NewMultiFakeNodeReader creates a MultiFakeNodeReader delegating to a number of FakeNodeReaders
func NewMultiFakeNodeReaderFromLeaves ¶
func NewMultiFakeNodeReaderFromLeaves(batches []LeafBatch) *MultiFakeNodeReader
NewMultiFakeNodeReaderFromLeaves uses a compact Merkle tree to set up the nodes at various revisions. It collates all node updates from a batch of leaf data into one FakeNodeReader. This has the advantage of not needing to manually create all the data structures but the disadvantage is that a bug in the compact tree could be reflected in test using this code. To help guard against this we check the tree root hash after each batch has been processed. The supplied batches should be in ascending order of tree revision.
func (MultiFakeNodeReader) GetMerkleNodes ¶
func (m MultiFakeNodeReader) GetMerkleNodes(ctx context.Context, treeRevision int64, NodeIDs []storage.NodeID) ([]storage.Node, error)
GetMerkleNodes implements the corresponding NodeReader API.
func (MultiFakeNodeReader) GetTreeRevisionIncludingSize ¶
func (m MultiFakeNodeReader) GetTreeRevisionIncludingSize(treeSize int64) (int64, int64, error)
GetTreeRevisionIncludingSize implements the corresponding NodeReader API.