fix: sync protocol and discussion stability fixes
This commit is contained in:
parent
9f73dc20da
commit
aa21bd04e1
43 changed files with 7258 additions and 503 deletions
|
|
@ -3,11 +3,58 @@ package mtprotoedge
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestStopInboundRPCTaskJoinsStartedDeadlineCallback(t *testing.T) {
|
||||
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(-time.Second))
|
||||
defer cancel()
|
||||
started := make(chan struct{})
|
||||
release := make(chan struct{})
|
||||
var once sync.Once
|
||||
ticket := &inboundRPCTicket{}
|
||||
ticket.onTimeout = func() {
|
||||
once.Do(func() {
|
||||
close(started)
|
||||
<-release
|
||||
})
|
||||
}
|
||||
task := inboundRPC{
|
||||
ctx: ctx,
|
||||
ticket: ticket,
|
||||
stopTimeout: func() bool { return false }, // runtime callback already scheduled
|
||||
}
|
||||
handoff := stopInboundRPCTask(task)
|
||||
if handoff == nil {
|
||||
t.Fatal("started deadline callback did not produce handoff")
|
||||
}
|
||||
go ticket.onTimeout()
|
||||
select {
|
||||
case <-started:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("deadline callback did not start")
|
||||
}
|
||||
joined := make(chan struct{})
|
||||
go func() {
|
||||
handoff()
|
||||
close(joined)
|
||||
}()
|
||||
select {
|
||||
case <-joined:
|
||||
t.Fatal("handoff returned before in-flight callback completed")
|
||||
case <-time.After(20 * time.Millisecond):
|
||||
}
|
||||
close(release)
|
||||
select {
|
||||
case <-joined:
|
||||
case <-time.After(time.Second):
|
||||
t.Fatal("handoff did not join completed callback")
|
||||
}
|
||||
}
|
||||
|
||||
func newInboundTestConn(s *inboundRPCScheduler, maxInflight, queueSize int, timeout time.Duration) *Conn {
|
||||
c := &Conn{metrics: NopMetrics{}}
|
||||
c.startInboundRPCScheduler(s, maxInflight, queueSize, timeout)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue