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

import (
4
	"fmt"
Hamdi Allam's avatar
Hamdi Allam committed
5
	"math/big"
6 7 8 9
	"net/http"
	"net/http/httptest"
	"testing"

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

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

20 21
var mockAddress = "0x4204204204204204204204204204204204204204"

Hamdi Allam's avatar
Hamdi Allam committed
22 23
var (
	deposit = database.L1BridgeDeposit{
Hamdi Allam's avatar
Hamdi Allam committed
24 25 26 27
		TransactionSourceHash:     common.HexToHash("abc"),
		CrossDomainMessengerNonce: &database.U256{Int: big.NewInt(0)},
		Tx:                        database.Transaction{},
		TokenPair:                 database.TokenPair{},
Hamdi Allam's avatar
Hamdi Allam committed
28 29 30
	}

	withdrawal = database.L2BridgeWithdrawal{
31
		TransactionWithdrawalHash: common.HexToHash("0x420"),
Hamdi Allam's avatar
Hamdi Allam committed
32 33 34
		CrossDomainMessengerNonce: &database.U256{Int: big.NewInt(0)},
		Tx:                        database.Transaction{},
		TokenPair:                 database.TokenPair{},
Hamdi Allam's avatar
Hamdi Allam committed
35 36 37 38 39
	}
)

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

Hamdi Allam's avatar
Hamdi Allam committed
42 43
func (mbv *MockBridgeTransfersView) L1BridgeDepositByCrossDomainMessengerNonce(nonce *big.Int) (*database.L1BridgeDeposit, error) {
	return &deposit, nil
Hamdi Allam's avatar
Hamdi Allam committed
44 45
}

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

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

Hamdi Allam's avatar
Hamdi Allam committed
59 60
func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalByCrossDomainMessengerNonce(nonce *big.Int) (*database.L2BridgeWithdrawal, error) {
	return &withdrawal, nil
Hamdi Allam's avatar
Hamdi Allam committed
61 62
}

Hamdi Allam's avatar
Hamdi Allam committed
63 64 65 66 67 68 69
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
70 71
}

72
func TestHealthz(t *testing.T) {
73 74
	logger := testlog.Logger(t, log.LvlInfo)
	api := NewApi(&MockBridgeTransfersView{}, logger)
75 76 77 78 79 80 81 82 83
	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
84
func TestL1BridgeDepositsHandler(t *testing.T) {
85 86 87
	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
88
	assert.Nil(t, err)
89

Will Cory's avatar
Will Cory committed
90 91
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
92

Will Cory's avatar
Will Cory committed
93 94
	assert.Equal(t, http.StatusOK, responseRecorder.Code)
}
95

Hamdi Allam's avatar
Hamdi Allam committed
96
func TestL2BridgeWithdrawalsByAddressHandler(t *testing.T) {
97 98 99
	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
100
	assert.Nil(t, err)
101

Will Cory's avatar
Will Cory committed
102 103
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
104

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