api_test.go 3.39 KB
Newer Older
1
package api
2 3

import (
4
	"fmt"
5 6 7 8
	"net/http"
	"net/http/httptest"
	"testing"

Will Cory's avatar
Will Cory committed
9
	"github.com/ethereum-optimism/optimism/indexer/database"
10
	"github.com/ethereum-optimism/optimism/op-node/testlog"
Will Cory's avatar
Will Cory committed
11
	"github.com/ethereum/go-ethereum/common"
12
	"github.com/ethereum/go-ethereum/log"
13 14 15
	"github.com/stretchr/testify/assert"
)

Hamdi Allam's avatar
Hamdi Allam committed
16 17
// MockBridgeTransfersView mocks the BridgeTransfersView interface
type MockBridgeTransfersView struct{}
18

19 20
var mockAddress = "0x4204204204204204204204204204204204204204"

Hamdi Allam's avatar
Hamdi Allam committed
21 22
var (
	deposit = database.L1BridgeDeposit{
Hamdi Allam's avatar
Hamdi Allam committed
23 24 25 26 27 28
		TransactionSourceHash: common.HexToHash("abc"),
		BridgeTransfer: database.BridgeTransfer{
			CrossDomainMessageHash: &common.Hash{},
			Tx:                     database.Transaction{},
			TokenPair:              database.TokenPair{},
		},
Hamdi Allam's avatar
Hamdi Allam committed
29 30 31
	}

	withdrawal = database.L2BridgeWithdrawal{
32
		TransactionWithdrawalHash: common.HexToHash("0x420"),
Hamdi Allam's avatar
Hamdi Allam committed
33 34 35 36 37
		BridgeTransfer: database.BridgeTransfer{
			CrossDomainMessageHash: &common.Hash{},
			Tx:                     database.Transaction{},
			TokenPair:              database.TokenPair{},
		},
Hamdi Allam's avatar
Hamdi Allam committed
38 39 40 41 42
	}
)

func (mbv *MockBridgeTransfersView) L1BridgeDeposit(hash common.Hash) (*database.L1BridgeDeposit, error) {
	return &deposit, nil
Hamdi Allam's avatar
Hamdi Allam committed
43 44
}

Hamdi Allam's avatar
Hamdi Allam committed
45
func (mbv *MockBridgeTransfersView) L1BridgeDepositWithFilter(filter database.BridgeTransfer) (*database.L1BridgeDeposit, error) {
Hamdi Allam's avatar
Hamdi Allam committed
46
	return &deposit, nil
Hamdi Allam's avatar
Hamdi Allam committed
47 48
}

Hamdi Allam's avatar
Hamdi Allam committed
49 50
func (mbv *MockBridgeTransfersView) L1BridgeDepositsByAddress(address common.Address) ([]*database.L1BridgeDepositWithTransactionHashes, error) {
	return []*database.L1BridgeDepositWithTransactionHashes{
51
		{
Hamdi Allam's avatar
Hamdi Allam committed
52 53
			L1BridgeDeposit:   deposit,
			L1TransactionHash: common.HexToHash("0x123"),
54
		},
Will Cory's avatar
Will Cory committed
55 56
	}, nil
}
57

Hamdi Allam's avatar
Hamdi Allam committed
58
func (mbv *MockBridgeTransfersView) L2BridgeWithdrawal(address common.Hash) (*database.L2BridgeWithdrawal, error) {
Hamdi Allam's avatar
Hamdi Allam committed
59
	return &withdrawal, nil
Hamdi Allam's avatar
Hamdi Allam committed
60 61
}

Hamdi Allam's avatar
Hamdi Allam committed
62
func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalWithFilter(filter database.BridgeTransfer) (*database.L2BridgeWithdrawal, error) {
Hamdi Allam's avatar
Hamdi Allam committed
63
	return &withdrawal, nil
Hamdi Allam's avatar
Hamdi Allam committed
64 65
}

Hamdi Allam's avatar
Hamdi Allam committed
66 67 68 69 70 71 72
func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalsByAddress(address common.Address) ([]*database.L2BridgeWithdrawalWithTransactionHashes, error) {
	return []*database.L2BridgeWithdrawalWithTransactionHashes{
		{
			L2BridgeWithdrawal: withdrawal,
			L2TransactionHash:  common.HexToHash("0x789"),
		},
	}, nil
Hamdi Allam's avatar
Hamdi Allam committed
73 74
}

75
func TestHealthz(t *testing.T) {
76 77
	logger := testlog.Logger(t, log.LvlInfo)
	api := NewApi(&MockBridgeTransfersView{}, logger)
78 79 80 81 82 83 84 85 86
	request, err := http.NewRequest("GET", "/healthz", nil)
	assert.Nil(t, err)

	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)

	assert.Equal(t, http.StatusOK, responseRecorder.Code)
}

Hamdi Allam's avatar
Hamdi Allam committed
87
func TestL1BridgeDepositsHandler(t *testing.T) {
88 89 90
	logger := testlog.Logger(t, log.LvlInfo)
	api := NewApi(&MockBridgeTransfersView{}, logger)
	request, err := http.NewRequest("GET", fmt.Sprintf("/api/v0/deposits/%s", mockAddress), nil)
Will Cory's avatar
Will Cory committed
91
	assert.Nil(t, err)
92

Will Cory's avatar
Will Cory committed
93 94
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
95

Will Cory's avatar
Will Cory committed
96 97
	assert.Equal(t, http.StatusOK, responseRecorder.Code)
}
98

Hamdi Allam's avatar
Hamdi Allam committed
99
func TestL2BridgeWithdrawalsByAddressHandler(t *testing.T) {
100 101 102
	logger := testlog.Logger(t, log.LvlInfo)
	api := NewApi(&MockBridgeTransfersView{}, logger)
	request, err := http.NewRequest("GET", fmt.Sprintf("/api/v0/withdrawals/%s", mockAddress), nil)
Will Cory's avatar
Will Cory committed
103
	assert.Nil(t, err)
104

Will Cory's avatar
Will Cory committed
105 106
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
107

Will Cory's avatar
Will Cory committed
108
	assert.Equal(t, http.StatusOK, responseRecorder.Code)
109
}