diff options
-rw-r--r-- | issues/fix-error-prone-timestamp-configuration.md | 23 | ||||
-rw-r--r-- | pkg/db/trillian.go | 3 | ||||
-rw-r--r-- | pkg/db/trillian_test.go | 16 |
3 files changed, 16 insertions, 26 deletions
diff --git a/issues/fix-error-prone-timestamp-configuration.md b/issues/fix-error-prone-timestamp-configuration.md deleted file mode 100644 index 79db548..0000000 --- a/issues/fix-error-prone-timestamp-configuration.md +++ /dev/null @@ -1,23 +0,0 @@ -**Title:** Fix error-prone timestamp configuration</br> -**Date:** 2021-12-18 </br> - -# Summary -Stop relying on Trillian to update tree head timestamps. - -# Description -A sigsum log is expected to produce a new to-sign tree head every five minutes. -If no new entries were added, only the timestamp is updated to ensure freshness. - -The current sigsum-log-go implementation assumes that Trillian ensures that a -new tree head is produced every five minutes. It can be configured as follows: -``` -$ createtree --help -Usage of ./createtree: -[...] - -max_root_duration duration - Interval after which a new signed root is produced despite no submissions; zero means never (default 1h0m0s) -[...] -``` - -It would be less error-prone to configure this from sigsum-log-go instead, as -part of the `StateManager` interface based on a constant (i.e., 5 minutes). diff --git a/pkg/db/trillian.go b/pkg/db/trillian.go index ab57db6..25b2fb3 100644 --- a/pkg/db/trillian.go +++ b/pkg/db/trillian.go @@ -3,6 +3,7 @@ package db import ( "context" "fmt" + "time" "git.sigsum.org/sigsum-lib-go/pkg/requests" "git.sigsum.org/sigsum-lib-go/pkg/types" @@ -173,7 +174,7 @@ func (c *TrillianClient) GetLeaves(ctx context.Context, req *requests.Leaves) (* func treeHeadFromLogRoot(lr *trillianTypes.LogRootV1) *types.TreeHead { th := types.TreeHead{ - Timestamp: uint64(lr.TimestampNanos / 1000 / 1000 / 1000), + Timestamp: uint64(time.Now().Unix()), TreeSize: uint64(lr.TreeSize), } copy(th.RootHash[:], lr.RootHash) diff --git a/pkg/db/trillian_test.go b/pkg/db/trillian_test.go index a33458f..955fc46 100644 --- a/pkg/db/trillian_test.go +++ b/pkg/db/trillian_test.go @@ -1,10 +1,12 @@ package db import ( + "bytes" "context" "fmt" "reflect" "testing" + "time" "git.sigsum.org/sigsum-lib-go/pkg/requests" "git.sigsum.org/sigsum-lib-go/pkg/types" @@ -185,8 +187,18 @@ func TestGetTreeHead(t *testing.T) { if err != nil { return } - if got, want := th, table.wantTh; !reflect.DeepEqual(got, want) { - t.Errorf("got tree head\n\t%v\nbut wanted\n\t%v\nin test %q", got, want, table.description) + + // we would need a clock that can be mocked to make a nicer test + now := uint64(time.Now().Unix()) + if got, wantLow, wantHigh := th.Timestamp, now-5, now+5; got < wantLow || got > wantHigh { + t.Errorf("got tree head with timestamp %d but wanted between [%d, %d] in test %q", + got, wantLow, wantHigh, table.description) + } + if got, want := th.TreeSize, table.wantTh.TreeSize; got != want { + t.Errorf("got tree head with tree size %d but wanted %d in test %q", got, want, table.description) + } + if got, want := th.RootHash[:], table.wantTh.RootHash[:]; !bytes.Equal(got, want) { + t.Errorf("got root hash %x but wanted %x in test %q", got, want, table.description) } }() } |