2022-08-29 14:25:30 +00:00
|
|
|
// stm: #unit
|
2021-05-19 11:22:07 +00:00
|
|
|
package gateway
|
2020-10-07 09:26:15 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"sync"
|
|
|
|
"testing"
|
|
|
|
"time"
|
2023-11-14 00:06:11 +00:00
|
|
|
|
2021-05-19 16:30:06 +00:00
|
|
|
"github.com/ipfs/go-cid"
|
2020-10-07 09:26:15 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
2023-11-14 00:06:11 +00:00
|
|
|
|
2020-10-07 09:26:15 +00:00
|
|
|
"github.com/filecoin-project/go-address"
|
|
|
|
"github.com/filecoin-project/go-state-types/abi"
|
2021-05-19 16:30:06 +00:00
|
|
|
"github.com/filecoin-project/go-state-types/network"
|
2023-11-14 00:06:11 +00:00
|
|
|
|
2021-05-19 16:30:06 +00:00
|
|
|
"github.com/filecoin-project/lotus/api"
|
|
|
|
"github.com/filecoin-project/lotus/build"
|
|
|
|
"github.com/filecoin-project/lotus/chain/types"
|
|
|
|
"github.com/filecoin-project/lotus/chain/types/mock"
|
2021-05-19 11:22:07 +00:00
|
|
|
)
|
|
|
|
|
2020-10-07 09:26:15 +00:00
|
|
|
func TestGatewayAPIChainGetTipSetByHeight(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
|
|
|
|
2021-05-19 16:30:06 +00:00
|
|
|
lookbackTimestamp := uint64(time.Now().Unix()) - uint64(DefaultLookbackCap.Seconds())
|
2020-10-07 09:26:15 +00:00
|
|
|
type args struct {
|
|
|
|
h abi.ChainEpoch
|
|
|
|
tskh abi.ChainEpoch
|
|
|
|
genesisTS uint64
|
|
|
|
}
|
|
|
|
tests := []struct {
|
|
|
|
name string
|
|
|
|
args args
|
|
|
|
expErr bool
|
|
|
|
}{{
|
|
|
|
name: "basic",
|
|
|
|
args: args{
|
|
|
|
h: abi.ChainEpoch(1),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
name: "genesis",
|
|
|
|
args: args{
|
|
|
|
h: abi.ChainEpoch(0),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
name: "same epoch as tipset",
|
|
|
|
args: args{
|
|
|
|
h: abi.ChainEpoch(5),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
},
|
|
|
|
}, {
|
|
|
|
name: "tipset too old",
|
|
|
|
args: args{
|
|
|
|
// Tipset height is 5, genesis is at LookbackCap - 10 epochs.
|
|
|
|
// So resulting tipset height will be 5 epochs earlier than LookbackCap.
|
|
|
|
h: abi.ChainEpoch(1),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
genesisTS: lookbackTimestamp - build.BlockDelaySecs*10,
|
|
|
|
},
|
|
|
|
expErr: true,
|
|
|
|
}, {
|
|
|
|
name: "lookup height too old",
|
|
|
|
args: args{
|
|
|
|
// Tipset height is 5, lookup height is 1, genesis is at LookbackCap - 3 epochs.
|
|
|
|
// So
|
|
|
|
// - lookup height will be 2 epochs earlier than LookbackCap.
|
|
|
|
// - tipset height will be 2 epochs later than LookbackCap.
|
|
|
|
h: abi.ChainEpoch(1),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
genesisTS: lookbackTimestamp - build.BlockDelaySecs*3,
|
|
|
|
},
|
|
|
|
expErr: true,
|
|
|
|
}, {
|
|
|
|
name: "tipset and lookup height within acceptable range",
|
|
|
|
args: args{
|
|
|
|
// Tipset height is 5, lookup height is 1, genesis is at LookbackCap.
|
|
|
|
// So
|
|
|
|
// - lookup height will be 1 epoch later than LookbackCap.
|
|
|
|
// - tipset height will be 5 epochs later than LookbackCap.
|
|
|
|
h: abi.ChainEpoch(1),
|
|
|
|
tskh: abi.ChainEpoch(5),
|
|
|
|
genesisTS: lookbackTimestamp,
|
|
|
|
},
|
|
|
|
}}
|
|
|
|
for _, tt := range tests {
|
|
|
|
tt := tt
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
2020-10-07 11:59:32 +00:00
|
|
|
mock := &mockGatewayDepsAPI{}
|
2023-01-16 14:28:55 +00:00
|
|
|
a := NewNode(mock, nil, DefaultLookbackCap, DefaultStateWaitLookbackLimit, 0, time.Minute)
|
2020-10-07 09:26:15 +00:00
|
|
|
|
|
|
|
// Create tipsets from genesis up to tskh and return the highest
|
|
|
|
ts := mock.createTipSets(tt.args.tskh, tt.args.genesisTS)
|
|
|
|
|
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
|
|
|
//stm: @GATEWAY_NODE_GET_TIPSET_BY_HEIGHT_001
|
2020-10-07 09:26:15 +00:00
|
|
|
got, err := a.ChainGetTipSetByHeight(ctx, tt.args.h, ts.Key())
|
|
|
|
if tt.expErr {
|
|
|
|
require.Error(t, err)
|
|
|
|
} else {
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, tt.args.h, got.Height())
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
type mockGatewayDepsAPI struct {
|
2020-10-07 09:26:15 +00:00
|
|
|
lk sync.RWMutex
|
|
|
|
tipsets []*types.TipSet
|
2020-10-15 20:54:58 +00:00
|
|
|
|
2021-05-19 11:22:07 +00:00
|
|
|
TargetAPI // satisfies all interface requirements but will panic if
|
2020-10-15 20:54:58 +00:00
|
|
|
// methods are called. easier than filling out with panic stubs IMO
|
2020-10-07 09:26:15 +00:00
|
|
|
}
|
|
|
|
|
2020-10-15 10:15:21 +00:00
|
|
|
func (m *mockGatewayDepsAPI) ChainHasObj(context.Context, cid.Cid) (bool, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-09 11:41:09 +00:00
|
|
|
func (m *mockGatewayDepsAPI) ChainGetMessage(ctx context.Context, mc cid.Cid) (*types.Message, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) ChainReadObj(ctx context.Context, c cid.Cid) ([]byte, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateDealProviderCollateralBounds(ctx context.Context, size abi.PaddedPieceSize, verified bool, tsk types.TipSetKey) (api.DealCollateralBounds, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateListMiners(ctx context.Context, tsk types.TipSetKey) ([]address.Address, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateMarketBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (api.MarketBalance, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateMarketStorageDeal(ctx context.Context, dealId abi.DealID, tsk types.TipSetKey) (*api.MarketDeal, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2022-04-20 21:34:28 +00:00
|
|
|
func (m *mockGatewayDepsAPI) StateMinerInfo(ctx context.Context, actor address.Address, tsk types.TipSetKey) (api.MinerInfo, error) {
|
2020-10-09 11:41:09 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateNetworkVersion(ctx context.Context, key types.TipSetKey) (network.Version, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) ChainHead(ctx context.Context) (*types.TipSet, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
m.lk.RLock()
|
|
|
|
defer m.lk.RUnlock()
|
|
|
|
|
|
|
|
return m.tipsets[len(m.tipsets)-1], nil
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) ChainGetTipSet(ctx context.Context, tsk types.TipSetKey) (*types.TipSet, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
m.lk.RLock()
|
|
|
|
defer m.lk.RUnlock()
|
|
|
|
|
|
|
|
for _, ts := range m.tipsets {
|
|
|
|
if ts.Key() == tsk {
|
|
|
|
return ts, nil
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// createTipSets creates tipsets from genesis up to tskh and returns the highest
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) createTipSets(h abi.ChainEpoch, genesisTimestamp uint64) *types.TipSet {
|
2020-10-07 09:26:15 +00:00
|
|
|
m.lk.Lock()
|
|
|
|
defer m.lk.Unlock()
|
|
|
|
|
|
|
|
targeth := h + 1 // add one for genesis block
|
|
|
|
if genesisTimestamp == 0 {
|
|
|
|
genesisTimestamp = uint64(time.Now().Unix()) - build.BlockDelaySecs*uint64(targeth)
|
|
|
|
}
|
|
|
|
var currts *types.TipSet
|
|
|
|
for currh := abi.ChainEpoch(0); currh < targeth; currh++ {
|
|
|
|
blks := mock.MkBlock(currts, 1, 1)
|
|
|
|
if currh == 0 {
|
|
|
|
blks.Timestamp = genesisTimestamp
|
|
|
|
}
|
|
|
|
currts = mock.TipSet(blks)
|
|
|
|
m.tipsets = append(m.tipsets, currts)
|
|
|
|
}
|
|
|
|
|
|
|
|
return m.tipsets[len(m.tipsets)-1]
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) ChainGetTipSetByHeight(ctx context.Context, h abi.ChainEpoch, tsk types.TipSetKey) (*types.TipSet, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
m.lk.Lock()
|
|
|
|
defer m.lk.Unlock()
|
|
|
|
|
|
|
|
return m.tipsets[h], nil
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) GasEstimateMessageGas(ctx context.Context, msg *types.Message, spec *api.MessageSendSpec, tsk types.TipSetKey) (*types.Message, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) MpoolPushUntrusted(ctx context.Context, sm *types.SignedMessage) (cid.Cid, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 16:14:12 +00:00
|
|
|
func (m *mockGatewayDepsAPI) MsigGetAvailableBalance(ctx context.Context, addr address.Address, tsk types.TipSetKey) (types.BigInt, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) MsigGetVested(ctx context.Context, addr address.Address, start types.TipSetKey, end types.TipSetKey) (types.BigInt, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) StateAccountKey(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) StateGetActor(ctx context.Context, actor address.Address, ts types.TipSetKey) (*types.Actor, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) StateLookupID(ctx context.Context, addr address.Address, tsk types.TipSetKey) (address.Address, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
|
|
|
|
2020-10-07 11:59:32 +00:00
|
|
|
func (m *mockGatewayDepsAPI) StateWaitMsgLimited(ctx context.Context, msg cid.Cid, confidence uint64, h abi.ChainEpoch) (*api.MsgLookup, error) {
|
2020-10-07 09:26:15 +00:00
|
|
|
panic("implement me")
|
|
|
|
}
|
2020-10-13 21:23:08 +00:00
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) StateReadState(ctx context.Context, act address.Address, ts types.TipSetKey) (*api.ActorState, error) {
|
|
|
|
panic("implement me")
|
|
|
|
}
|
2021-06-28 17:00:49 +00:00
|
|
|
|
|
|
|
func (m *mockGatewayDepsAPI) Version(context.Context) (api.APIVersion, error) {
|
|
|
|
return api.APIVersion{
|
|
|
|
APIVersion: api.FullAPIVersion1,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGatewayVersion(t *testing.T) {
|
feat: Add additional test annotations (#8272)
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate repub and selection tests
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
* Fix markset annotations
* doc: test annotations for the markets dagstore wrapper
* Annotate miner_api test in dagstore
* Annotate more test files
* Remove bad annotations from fsrepo
* Annotate wdpost system
* Remove bad annotations
* Renamce "conformance" to "chaos_actor" tests
* doc: stm annotations for blockheader & election proof tests
* Annotate remaining "A" tests
* annotate: stm for error_test
* memrepo_test.go
* Annotate "b" file tests
* message_test.go
* doc: stm annotate for fsrepo_test
* Annotate "c" file tests
* Annotate "D" test files
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate u,v,wl tests
* doc: stm annotations for various test files
* Annotate "T" test files
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add mempool unit tests
* Add two more memPool Add tests
* Update submodules
* Add check function tests
* Add stm annotations, refactor test helper
* Annotate api,proxy_util,blockstore_badger, policy tests
* Annotate splitstore: bsbadger / markset
solving merge conflicts
* Annotate splitstore feature
* Annotate union/timed blockstore tests
* Annotate openrpc, diff_adt tests
* Annotate error,drand,events tests
* Annotate predicates_test
* Fix annotations
* Annotate tscache, gen tests
* Annotate fundmanager test
* Annotate statetree_test
* Annotate forks_test
* Annotate searchwait_test.go
* Fix duplicated @@ symbols
* Annotate chain stmgr/store tests
* Annotate more (types) tests
* More tests annotated
* Annotate conformance chaos actor tests
* Annotate more integration tests
* Annotate journal system tests
* Annotate more tests.
* Annotate gas,head buffer behaviors
solve merge conflict
* Fix markset annotations
* Annotate miner_api test in dagstore
* Annotate more test files
* doc: test annotations for the markets dagstore wrapper
* Annotate wdpost system
* Renamce "conformance" to "chaos_actor" tests
* Annotate remaining "A" tests
* doc: stm annotations for blockheader & election proof tests
* annotate: stm for error_test
* Annotate "b" file tests
* memrepo_test.go
* Annotate "c" file tests
* message_test.go
* Annotate "D" test files
* doc: stm annotate for fsrepo_test
* Annotate u,v,wl tests
* message_test.go
* doc: stm annotate for chain, node/config & client
* docs: stm annotate node_test
* Annotate "T" test files
* doc: stm annotations for various test files
* Add mempool unit tests
solve merge conflict
* doc: stm annotate for proxy_util_test & policy_test
* doc: stm annotate for various tests
* doc: final few stm annotations
* Add two more memPool Add tests
* Update submodules
* Add check function tests
solve conflict
* Add stm annotations, refactor test helper
solve merge conflict
* Change CLI test kinds to "unit"
* Fix double merged test
* Fix ccupgrade_test merge
* Fix lint issues
* Add stm annotation to types_Test
* Test vectors submodule
* Add file annotation to burn_test
Co-authored-by: Nikola Divic <divicnikola@gmail.com>
Co-authored-by: TheMenko <themenkoprojects@gmail.com>
2022-03-16 17:37:34 +00:00
|
|
|
//stm: @GATEWAY_NODE_GET_VERSION_001
|
2021-06-28 17:00:49 +00:00
|
|
|
ctx := context.Background()
|
|
|
|
mock := &mockGatewayDepsAPI{}
|
2023-01-16 14:28:55 +00:00
|
|
|
a := NewNode(mock, nil, DefaultLookbackCap, DefaultStateWaitLookbackLimit, 0, time.Minute)
|
2021-06-28 17:00:49 +00:00
|
|
|
|
|
|
|
v, err := a.Version(ctx)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, api.FullAPIVersion1, v.APIVersion)
|
|
|
|
}
|
2022-04-28 07:45:34 +00:00
|
|
|
|
|
|
|
func TestGatewayLimitTokensAvailable(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
|
|
|
mock := &mockGatewayDepsAPI{}
|
|
|
|
tokens := 3
|
2023-01-16 14:28:55 +00:00
|
|
|
a := NewNode(mock, nil, DefaultLookbackCap, DefaultStateWaitLookbackLimit, int64(tokens), time.Minute)
|
2022-05-02 15:30:56 +00:00
|
|
|
require.NoError(t, a.limit(ctx, tokens), "requests should not be limited when there are enough tokens available")
|
2022-04-28 07:45:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestGatewayLimitTokensNotAvailable(t *testing.T) {
|
|
|
|
ctx := context.Background()
|
|
|
|
mock := &mockGatewayDepsAPI{}
|
|
|
|
tokens := 3
|
2023-01-16 14:28:55 +00:00
|
|
|
a := NewNode(mock, nil, DefaultLookbackCap, DefaultStateWaitLookbackLimit, int64(1), time.Millisecond)
|
2022-04-28 07:45:34 +00:00
|
|
|
var err error
|
|
|
|
// try to be rate limited
|
|
|
|
for i := 0; i <= 1000; i++ {
|
|
|
|
err = a.limit(ctx, tokens)
|
|
|
|
if err != nil {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
}
|
|
|
|
require.Error(t, err, "requiests should be rate limited when they hit limits")
|
|
|
|
}
|