api_test.go 3.8 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/config"
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"

Will Cory's avatar
Will Cory committed
22
var apiConfig = config.ServerConfig{
Will Cory's avatar
Will Cory committed
23 24 25
	Host: "localhost",
	Port: 8080,
}
Will Cory's avatar
Will Cory committed
26
var metricsConfig = config.ServerConfig{
Will Cory's avatar
Will Cory committed
27 28 29 30
	Host: "localhost",
	Port: 7300,
}

Hamdi Allam's avatar
Hamdi Allam committed
31 32
var (
	deposit = database.L1BridgeDeposit{
Hamdi Allam's avatar
Hamdi Allam committed
33 34 35 36 37 38
		TransactionSourceHash: common.HexToHash("abc"),
		BridgeTransfer: database.BridgeTransfer{
			CrossDomainMessageHash: &common.Hash{},
			Tx:                     database.Transaction{},
			TokenPair:              database.TokenPair{},
		},
Hamdi Allam's avatar
Hamdi Allam committed
39 40 41
	}

	withdrawal = database.L2BridgeWithdrawal{
42
		TransactionWithdrawalHash: common.HexToHash("0x420"),
Hamdi Allam's avatar
Hamdi Allam committed
43 44 45 46 47
		BridgeTransfer: database.BridgeTransfer{
			CrossDomainMessageHash: &common.Hash{},
			Tx:                     database.Transaction{},
			TokenPair:              database.TokenPair{},
		},
Hamdi Allam's avatar
Hamdi Allam committed
48 49 50 51 52
	}
)

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

Hamdi Allam's avatar
Hamdi Allam committed
55
func (mbv *MockBridgeTransfersView) L1BridgeDepositWithFilter(filter database.BridgeTransfer) (*database.L1BridgeDeposit, error) {
Hamdi Allam's avatar
Hamdi Allam committed
56
	return &deposit, nil
Hamdi Allam's avatar
Hamdi Allam committed
57 58
}

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

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

67 68
func (mbv *MockBridgeTransfersView) L1BridgeDepositsByAddress(address common.Address, cursor string, limit int) (*database.L1BridgeDepositsResponse, error) {
	return &database.L1BridgeDepositsResponse{
Hamdi Allam's avatar
Hamdi Allam committed
69
		Deposits: []database.L1BridgeDepositWithTransactionHashes{
70 71 72 73
			{
				L1BridgeDeposit:   deposit,
				L1TransactionHash: common.HexToHash("0x123"),
			},
Hamdi Allam's avatar
Hamdi Allam committed
74 75
		},
	}, nil
Hamdi Allam's avatar
Hamdi Allam committed
76 77
}

78 79
func (mbv *MockBridgeTransfersView) L2BridgeWithdrawalsByAddress(address common.Address, cursor string, limit int) (*database.L2BridgeWithdrawalsResponse, error) {
	return &database.L2BridgeWithdrawalsResponse{
Hamdi Allam's avatar
Hamdi Allam committed
80
		Withdrawals: []database.L2BridgeWithdrawalWithTransactionHashes{
81 82 83 84 85 86 87
			{
				L2BridgeWithdrawal: withdrawal,
				L2TransactionHash:  common.HexToHash("0x789"),
			},
		},
	}, nil
}
88
func TestHealthz(t *testing.T) {
89
	logger := testlog.Logger(t, log.LvlInfo)
Will Cory's avatar
Will Cory committed
90
	api := NewApi(logger, &MockBridgeTransfersView{}, apiConfig, metricsConfig)
91 92 93 94 95 96 97 98 99
	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
100
func TestL1BridgeDepositsHandler(t *testing.T) {
101
	logger := testlog.Logger(t, log.LvlInfo)
Will Cory's avatar
Will Cory committed
102
	api := NewApi(logger, &MockBridgeTransfersView{}, apiConfig, metricsConfig)
103
	request, err := http.NewRequest("GET", fmt.Sprintf("/api/v0/deposits/%s", mockAddress), nil)
Will Cory's avatar
Will Cory committed
104
	assert.Nil(t, err)
105

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

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

Hamdi Allam's avatar
Hamdi Allam committed
112
func TestL2BridgeWithdrawalsByAddressHandler(t *testing.T) {
113
	logger := testlog.Logger(t, log.LvlInfo)
Will Cory's avatar
Will Cory committed
114
	api := NewApi(logger, &MockBridgeTransfersView{}, apiConfig, metricsConfig)
115
	request, err := http.NewRequest("GET", fmt.Sprintf("/api/v0/withdrawals/%s", mockAddress), nil)
Will Cory's avatar
Will Cory committed
116
	assert.Nil(t, err)
117

Will Cory's avatar
Will Cory committed
118 119
	responseRecorder := httptest.NewRecorder()
	api.Router.ServeHTTP(responseRecorder, request)
120

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