lotus/paychmgr/store_test.go

92 lines
2.5 KiB
Go
Raw Normal View History

2022-08-29 14:25:30 +00:00
// stm: #unit
2020-07-08 21:10:02 +00:00
package paychmgr
import (
2021-12-14 17:01:45 +00:00
"context"
2020-07-08 21:10:02 +00:00
"testing"
ds "github.com/ipfs/go-datastore"
ds_sync "github.com/ipfs/go-datastore/sync"
"github.com/stretchr/testify/require"
2022-06-14 15:00:51 +00:00
"github.com/filecoin-project/go-address"
tutils "github.com/filecoin-project/specs-actors/support/testing"
2020-07-08 21:10:02 +00:00
)
func TestStore(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: @TOKEN_PAYCH_ALLOCATE_LANE_001, @TOKEN_PAYCH_LIST_CHANNELS_001
//stm: @TOKEN_PAYCH_TRACK_CHANNEL_002, @TOKEN_PAYCH_TRACK_CHANNEL_001
2021-12-14 17:01:45 +00:00
ctx := context.Background()
2020-07-08 21:10:02 +00:00
store := NewStore(ds_sync.MutexWrap(ds.NewMapDatastore()))
2021-12-14 17:01:45 +00:00
addrs, err := store.ListChannels(ctx)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
require.Len(t, addrs, 0)
2020-07-28 23:16:47 +00:00
ch := tutils.NewIDAddr(t, 100)
2020-07-08 21:10:02 +00:00
ci := &ChannelInfo{
2020-07-28 23:16:47 +00:00
Channel: &ch,
2020-07-08 21:10:02 +00:00
Control: tutils.NewIDAddr(t, 101),
Target: tutils.NewIDAddr(t, 102),
Direction: DirOutbound,
Vouchers: []*VoucherInfo{{Voucher: nil, Proof: []byte{}}},
}
2020-07-28 23:16:47 +00:00
ch2 := tutils.NewIDAddr(t, 200)
2020-07-08 21:10:02 +00:00
ci2 := &ChannelInfo{
2020-07-28 23:16:47 +00:00
Channel: &ch2,
2020-07-08 21:10:02 +00:00
Control: tutils.NewIDAddr(t, 201),
Target: tutils.NewIDAddr(t, 202),
Direction: DirOutbound,
Vouchers: []*VoucherInfo{{Voucher: nil, Proof: []byte{}}},
}
// Track the channel
2021-12-14 17:01:45 +00:00
_, err = store.TrackChannel(ctx, ci)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
// Tracking same channel again should error
2021-12-14 17:01:45 +00:00
_, err = store.TrackChannel(ctx, ci)
2020-07-08 21:10:02 +00:00
require.Error(t, err)
// Track another channel
2021-12-14 17:01:45 +00:00
_, err = store.TrackChannel(ctx, ci2)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
// List channels should include all channels
2021-12-14 17:01:45 +00:00
addrs, err = store.ListChannels(ctx)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
require.Len(t, addrs, 2)
2020-10-06 07:43:20 +00:00
t0100, err := address.NewIDAddress(100)
require.NoError(t, err)
t0200, err := address.NewIDAddress(200)
require.NoError(t, err)
require.Contains(t, addrs, t0100)
require.Contains(t, addrs, t0200)
2020-07-08 21:10:02 +00:00
// Request vouchers for channel
2021-12-14 17:01:45 +00:00
vouchers, err := store.VouchersForPaych(ctx, *ci.Channel)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
require.Len(t, vouchers, 1)
// Requesting voucher for non-existent channel should error
2021-12-14 17:01:45 +00:00
_, err = store.VouchersForPaych(ctx, tutils.NewIDAddr(t, 300))
2020-07-08 21:10:02 +00:00
require.Equal(t, err, ErrChannelNotTracked)
// Allocate lane for channel
2021-12-14 17:01:45 +00:00
lane, err := store.AllocateLane(ctx, *ci.Channel)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
require.Equal(t, lane, uint64(0))
// Allocate next lane for channel
2021-12-14 17:01:45 +00:00
lane, err = store.AllocateLane(ctx, *ci.Channel)
2020-07-08 21:10:02 +00:00
require.NoError(t, err)
require.Equal(t, lane, uint64(1))
// Allocate next lane for non-existent channel should error
2021-12-14 17:01:45 +00:00
_, err = store.AllocateLane(ctx, tutils.NewIDAddr(t, 300))
2020-07-08 21:10:02 +00:00
require.Equal(t, err, ErrChannelNotTracked)
}