Skip to content

Commit 3e9e792

Browse files
committed
✅ [client/test] Test for asynchronous channel funding
1 parent 65d51a3 commit 3e9e792

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

client/client_role_test.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,21 @@ func NewSetups(rng *rand.Rand, names []string) []ctest.RoleSetup {
3838

3939
for i := 0; i < n; i++ {
4040
acc := wtest.NewRandomAccount(rng)
41+
42+
// The use of a delayed funder simulates that channel participants may
43+
// receive their funding confirmation at different times.
44+
var funder channel.Funder
45+
if i == 0 {
46+
funder = &logFunderWithDelay{log.WithField("role", names[i])}
47+
} else {
48+
funder = &logFunder{log.WithField("role", names[i])}
49+
}
50+
4151
setup[i] = ctest.RoleSetup{
4252
Name: names[i],
4353
Identity: acc,
4454
Bus: bus,
45-
Funder: &logFunder{log.WithField("role", names[i])},
55+
Funder: funder,
4656
Adjudicator: &logAdjudicator{log.WithField("role", names[i]), sync.RWMutex{}, nil},
4757
Wallet: wtest.NewWallet(),
4858
Timeout: roleOperationTimeout,
@@ -57,6 +67,10 @@ type (
5767
log log.Logger
5868
}
5969

70+
logFunderWithDelay struct {
71+
log log.Logger
72+
}
73+
6074
logAdjudicator struct {
6175
log log.Logger
6276
mu sync.RWMutex
@@ -69,6 +83,12 @@ func (f *logFunder) Fund(_ context.Context, req channel.FundingReq) error {
6983
return nil
7084
}
7185

86+
func (f *logFunderWithDelay) Fund(_ context.Context, req channel.FundingReq) error {
87+
time.Sleep(100 * time.Millisecond)
88+
f.log.Infof("Funding: %v", req)
89+
return nil
90+
}
91+
7292
func (a *logAdjudicator) Register(_ context.Context, req channel.AdjudicatorReq) error {
7393
a.log.Infof("Register: %v", req)
7494
e := channel.NewRegisteredEvent(

client/test/alice.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,6 @@ func (r *Alice) Execute(cfg ExecConfig) {
4646
func (r *Alice) exec(_cfg ExecConfig, ch *paymentChannel) {
4747
cfg := _cfg.(*AliceBobExecConfig)
4848
we, them := r.Idxs(cfg.Peers())
49-
// 1st stage - channel controller set up
50-
r.waitStage()
5149

5250
// 1st Alice receives some updates from Bob
5351
for i := 0; i < cfg.NumPayments[them]; i++ {

client/test/bob.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ func (r *Bob) exec(_cfg ExecConfig, ch *paymentChannel, propHandler *acceptNextP
3838
cfg := _cfg.(*AliceBobExecConfig)
3939
we, them := r.Idxs(cfg.Peers())
4040

41-
// 1st stage - channel controller set up
42-
r.waitStage()
43-
4441
// 1st Bob sends some updates to Alice
4542
for i := 0; i < cfg.NumPayments[we]; i++ {
4643
ch.sendTransfer(cfg.TxAmounts[we], fmt.Sprintf("Bob#%d", i))

client/test/proposer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ func (r *Proposer) Execute(cfg ExecConfig, exec func(ExecConfig, *paymentChannel
3636
rng := pkgtest.Prng(r.t, "proposer")
3737
assert := assert.New(r.t)
3838

39+
// ignore proposal handler since Proposer doesn't accept any incoming channels
40+
_, wait := r.GoHandle(rng)
41+
defer wait()
42+
3943
prop := r.LedgerChannelProposal(rng, cfg)
4044
ch, err := r.ProposeChannel(prop)
4145
assert.NoError(err)
@@ -45,10 +49,6 @@ func (r *Proposer) Execute(cfg ExecConfig, exec func(ExecConfig, *paymentChannel
4549
}
4650
r.log.Infof("New Channel opened: %v", ch.Channel)
4751

48-
// ignore proposal handler since Proposer doesn't accept any incoming channels
49-
_, wait := r.GoHandle(rng)
50-
defer wait()
51-
5252
exec(cfg, ch)
5353

5454
ch.Close() // May or may not already be closed due to channelConn closing.

0 commit comments

Comments
 (0)