crypto_test.go 1.27 KB
Newer Older
1 2 3 4 5 6 7
package indexer_test

import (
	"bytes"
	"errors"
	"testing"

8
	indexer "github.com/ethereum-optimism/optimism/indexer"
9 10 11 12
	"github.com/ethereum/go-ethereum/common"
	"github.com/stretchr/testify/require"
)

13
// TestParseAddress asserts that ParseAddress correctly parses
14
// 40-characater hexadecimal strings with optional 0x prefix into valid 20-byte
15 16
// addresses
func TestParseAddress(t *testing.T) {
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
	tests := []struct {
		name    string
		addr    string
		expErr  error
		expAddr common.Address
	}{
		{
			name:   "empty address",
			addr:   "",
			expErr: errors.New("invalid address: "),
		},
		{
			name:   "only 0x",
			addr:   "0x",
			expErr: errors.New("invalid address: 0x"),
		},
		{
			name:   "non hex character",
			addr:   "0xaaaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			expErr: errors.New("invalid address: 0xaaaaaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"),
		},
		{
			name:    "valid address",
			addr:    "0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
			expErr:  nil,
			expAddr: common.BytesToAddress(bytes.Repeat([]byte{170}, 20)),
		},
	}

	for _, test := range tests {
		t.Run(test.name, func(t *testing.T) {
48
			addr, err := indexer.ParseAddress(test.addr)
49 50 51 52 53 54 55 56
			require.Equal(t, err, test.expErr)
			if test.expErr != nil {
				return
			}
			require.Equal(t, addr, test.expAddr)
		})
	}
}