From 6c8bfdbe4e8259999f6204f9253d754ebbddb7b4 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Tue, 20 Jul 2021 22:21:18 +0000 Subject: [PATCH 1/3] feat: Add ActiveConnections function tto track usage --- wsnet/dial.go | 11 +++++++++++ wsnet/dial_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/wsnet/dial.go b/wsnet/dial.go index 97d49827..050bc574 100644 --- a/wsnet/dial.go +++ b/wsnet/dial.go @@ -232,6 +232,17 @@ func (d *Dialer) Closed() <-chan struct{} { return d.closedChan } +// ActiveConnections returns the amount of active connections. +// DialContext opens a connection, and close will end it. +func (d *Dialer) ActiveConnections() int { + stats, ok := d.rtc.GetStats().GetConnectionStats(d.rtc) + if !ok { + return -1 + } + // Subtract 1 for the control channel. + return int(stats.DataChannelsRequested-stats.DataChannelsClosed) - 1 +} + // Close closes the RTC connection. // All data channels dialed will be closed. func (d *Dialer) Close() error { diff --git a/wsnet/dial_test.go b/wsnet/dial_test.go index 91b7d0a2..aa5ee165 100644 --- a/wsnet/dial_test.go +++ b/wsnet/dial_test.go @@ -12,6 +12,7 @@ import ( "testing" "time" + "cdr.dev/slog/sloggers/slogtest/assert" "github.com/pion/ice/v2" "github.com/pion/webrtc/v3" ) @@ -301,6 +302,37 @@ func TestDial(t *testing.T) { t.Error("didn't close in time") } }) + + t.Run("Active Connections", func(t *testing.T) { + t.Parallel() + + listener, err := net.Listen("tcp", "0.0.0.0:0") + if err != nil { + t.Error(err) + return + } + go func() { + _, _ = listener.Accept() + }() + connectAddr, listenAddr := createDumbBroker(t) + _, err = Listen(context.Background(), listenAddr, "") + if err != nil { + t.Error(err) + return + } + dialer, err := DialWebsocket(context.Background(), connectAddr, nil) + if err != nil { + t.Error(err) + } + conn, _ := dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) + assert.Equal(t, "one active connection", 1, dialer.ActiveConnections()) + _ = conn.Close() + assert.Equal(t, "no active connections", 0, dialer.ActiveConnections()) + _, err = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) + conn, err = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) + assert.Equal(t, "two active connections", 2, dialer.ActiveConnections()) + _ = conn.Close() + }) } func BenchmarkThroughput(b *testing.B) { From eff3e3e73dbbeaa3b33b33f6b4d364f0d9c0b049 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Tue, 20 Jul 2021 22:40:50 +0000 Subject: [PATCH 2/3] Fix linting errors --- wsnet/dial_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wsnet/dial_test.go b/wsnet/dial_test.go index aa5ee165..182bfc07 100644 --- a/wsnet/dial_test.go +++ b/wsnet/dial_test.go @@ -328,10 +328,11 @@ func TestDial(t *testing.T) { assert.Equal(t, "one active connection", 1, dialer.ActiveConnections()) _ = conn.Close() assert.Equal(t, "no active connections", 0, dialer.ActiveConnections()) - _, err = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) - conn, err = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) + _, _ = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) + conn, _ = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) assert.Equal(t, "two active connections", 2, dialer.ActiveConnections()) _ = conn.Close() + assert.Equal(t, "one active connection", 1, dialer.ActiveConnections()) }) } From bbeffa14562cab8b536e8eb4ab909e1d01a67851 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Tue, 20 Jul 2021 22:48:22 +0000 Subject: [PATCH 3/3] Fix syntax err --- wsnet/dial_test.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/wsnet/dial_test.go b/wsnet/dial_test.go index 815f0b40..a5d33b96 100644 --- a/wsnet/dial_test.go +++ b/wsnet/dial_test.go @@ -12,7 +12,6 @@ import ( "time" "cdr.dev/slog/sloggers/slogtest" - "cdr.dev/slog/sloggers/slogtest/assert" "github.com/pion/ice/v2" "github.com/pion/webrtc/v3" "github.com/stretchr/testify/assert" @@ -257,7 +256,7 @@ func TestDial(t *testing.T) { _, _ = listener.Accept() }() connectAddr, listenAddr := createDumbBroker(t) - _, err = Listen(context.Background(), listenAddr, "") + _, err = Listen(context.Background(), slogtest.Make(t, nil), listenAddr, "") if err != nil { t.Error(err) return @@ -267,14 +266,14 @@ func TestDial(t *testing.T) { t.Error(err) } conn, _ := dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) - assert.Equal(t, "one active connection", 1, dialer.ActiveConnections()) + assert.Equal(t, 1, dialer.ActiveConnections()) _ = conn.Close() - assert.Equal(t, "no active connections", 0, dialer.ActiveConnections()) + assert.Equal(t, 0, dialer.ActiveConnections()) _, _ = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) conn, _ = dialer.DialContext(context.Background(), listener.Addr().Network(), listener.Addr().String()) - assert.Equal(t, "two active connections", 2, dialer.ActiveConnections()) + assert.Equal(t, 2, dialer.ActiveConnections()) _ = conn.Close() - assert.Equal(t, "one active connection", 1, dialer.ActiveConnections()) + assert.Equal(t, 1, dialer.ActiveConnections()) }) }