init_test.go 1.69 KB
Newer Older
1
package db
2 3 4 5 6 7

import (
	"fmt"
	"io"
	"testing"

8
	"github.com/ethereum-optimism/optimism/op-service/eth"
9
	"github.com/ethereum-optimism/optimism/op-supervisor/supervisor/backend/types"
10 11 12 13 14
	"github.com/stretchr/testify/require"
)

func TestRecover(t *testing.T) {
	tests := []struct {
15 16 17
		name            string
		stubDB          *stubLogStore
		expectRewoundTo uint64
18 19
	}{
		{
20 21 22
			name:            "emptydb",
			stubDB:          &stubLogStore{closestBlockErr: fmt.Errorf("no entries: %w", io.EOF)},
			expectRewoundTo: 0,
23 24
		},
		{
25 26 27
			name:            "genesis",
			stubDB:          &stubLogStore{},
			expectRewoundTo: 0,
28 29
		},
		{
30 31 32
			name:            "with_blocks",
			stubDB:          &stubLogStore{closestBlockNumber: 15},
			expectRewoundTo: 14,
33 34 35 36 37
		},
	}
	for _, test := range tests {
		test := test
		t.Run(test.name, func(t *testing.T) {
38
			err := Resume(test.stubDB)
39 40 41 42 43 44 45 46 47 48 49 50
			require.NoError(t, err)
			require.Equal(t, test.expectRewoundTo, test.stubDB.rewoundTo)
		})
	}
}

type stubLogStore struct {
	closestBlockNumber uint64
	closestBlockErr    error
	rewoundTo          uint64
}

51
func (s *stubLogStore) ClosestBlockInfo(blockNum uint64) (uint64, types.TruncatedHash, error) {
52
	if s.closestBlockErr != nil {
53
		return 0, types.TruncatedHash{}, s.closestBlockErr
54
	}
55
	return s.closestBlockNumber, types.TruncatedHash{}, nil
56 57 58 59 60 61
}

func (s *stubLogStore) Rewind(headBlockNum uint64) error {
	s.rewoundTo = headBlockNum
	return nil
}
62 63 64 65 66 67 68 69 70 71 72 73

func (s *stubLogStore) AddLog(logHash types.TruncatedHash, block eth.BlockID, timestamp uint64, logIdx uint32, execMsg *types.ExecutingMessage) error {
	panic("not supported")
}

func (s *stubLogStore) LatestBlockNum() uint64 {
	panic("not supported")
}

func (s *stubLogStore) Close() error {
	return nil
}