63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package peer
|
|
|
|
import (
|
|
"context"
|
|
"github.com/anyproto/any-sync/net/transport/mock_transport"
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
var ctx = context.Background()
|
|
|
|
func TestPeer_AcquireDrpcConn(t *testing.T) {
|
|
fx := newFixture(t, "p1")
|
|
defer fx.finish()
|
|
in, out := net.Pipe()
|
|
defer out.Close()
|
|
fx.mc.EXPECT().Open(gomock.Any()).Return(in, nil)
|
|
dc, err := fx.AcquireDrpcConn(ctx)
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, dc)
|
|
defer dc.Close()
|
|
|
|
assert.Len(t, fx.active, 1)
|
|
assert.Len(t, fx.inactive, 0)
|
|
|
|
fx.ReleaseDrpcConn(dc)
|
|
|
|
assert.Len(t, fx.active, 0)
|
|
assert.Len(t, fx.inactive, 1)
|
|
|
|
dc, err = fx.AcquireDrpcConn(ctx)
|
|
require.NoError(t, err)
|
|
assert.NotEmpty(t, dc)
|
|
assert.Len(t, fx.active, 1)
|
|
assert.Len(t, fx.inactive, 0)
|
|
}
|
|
|
|
func newFixture(t *testing.T, peerId string) *fixture {
|
|
fx := &fixture{
|
|
ctrl: gomock.NewController(t),
|
|
}
|
|
fx.mc = mock_transport.NewMockMultiConn(fx.ctrl)
|
|
ctx := CtxWithPeerId(context.Background(), peerId)
|
|
fx.mc.EXPECT().Context().Return(ctx).AnyTimes()
|
|
p, err := NewPeer(fx.mc)
|
|
require.NoError(t, err)
|
|
fx.peer = p.(*peer)
|
|
return fx
|
|
}
|
|
|
|
type fixture struct {
|
|
*peer
|
|
ctrl *gomock.Controller
|
|
mc *mock_transport.MockMultiConn
|
|
}
|
|
|
|
func (fx *fixture) finish() {
|
|
fx.ctrl.Finish()
|
|
}
|