Skip to content

Commit c2bc9b1

Browse files
committed
Use a factory function for network config
1 parent 7307c32 commit c2bc9b1

File tree

3 files changed

+211
-180
lines changed

3 files changed

+211
-180
lines changed

bwe_test.go

Lines changed: 112 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"log/slog"
1515
"os"
1616
"path/filepath"
17+
"strings"
1718
"testing"
1819
"testing/synctest"
1920
"time"
@@ -24,6 +25,8 @@ import (
2425

2526
var logDir string
2627

28+
type vnetFactory func(*testing.T) *virtualNetwork
29+
2730
func TestMain(m *testing.M) {
2831
logDir = os.Getenv("BWE_LOG_DIR")
2932
if logDir == "" {
@@ -63,111 +66,121 @@ func TestMain(m *testing.M) {
6366
}
6467

6568
func TestBWE(t *testing.T) {
66-
synctest.Test(t, func(t *testing.T) {
67-
t.Helper()
68-
69-
logger, cleanup := testLogger(t)
70-
defer cleanup()
71-
72-
onTrack := make(chan struct{})
73-
connected := make(chan struct{})
74-
done := make(chan struct{})
75-
76-
network := createVirtualNetwork(t)
77-
receiver, err := newPeer(
78-
registerDefaultCodecs(),
79-
setVNet(network.left, []string{"10.0.1.1"}),
80-
registerTWCC(),
81-
onRemoteTrack(func(track *webrtc.TrackRemote) {
82-
close(onTrack)
83-
go func() {
84-
buf := make([]byte, 1500)
85-
for {
86-
select {
87-
case <-done:
88-
return
89-
default:
90-
_, _, err := track.Read(buf)
91-
if errors.Is(err, io.EOF) {
92-
return
69+
networks := map[string]vnetFactory{
70+
"constant_capacity": createVirtualNetwork(),
71+
}
72+
for name, vnf := range networks {
73+
t.Run(name, func(t *testing.T) {
74+
synctest.Test(t, func(t *testing.T) {
75+
t.Helper()
76+
77+
logger, cleanup := testLogger(t)
78+
defer cleanup()
79+
80+
onTrack := make(chan struct{})
81+
connected := make(chan struct{})
82+
done := make(chan struct{})
83+
84+
network := vnf(t)
85+
86+
receiver, err := newPeer(
87+
registerDefaultCodecs(),
88+
setVNet(network.left, []string{"10.0.1.1"}),
89+
registerTWCC(),
90+
onRemoteTrack(func(track *webrtc.TrackRemote) {
91+
close(onTrack)
92+
go func() {
93+
buf := make([]byte, 1500)
94+
for {
95+
select {
96+
case <-done:
97+
return
98+
default:
99+
_, _, err := track.Read(buf)
100+
if errors.Is(err, io.EOF) {
101+
return
102+
}
103+
assert.NoError(t, err)
104+
}
93105
}
94-
assert.NoError(t, err)
95-
}
96-
}
106+
}()
107+
}),
108+
registerPacketLogger(logger.With("vantage-point", "receiver")),
109+
registerCCFB(),
110+
)
111+
assert.NoError(t, err)
112+
113+
err = receiver.addRemoteTrack()
114+
assert.NoError(t, err)
115+
116+
var codec *perfectCodec
117+
sender, err := newPeer(
118+
registerDefaultCodecs(),
119+
onConnected(func() { close(connected) }),
120+
setVNet(network.right, []string{"10.0.2.1"}),
121+
registerPacketLogger(logger.With("vantage-point", "sender")),
122+
registerRTPFB(),
123+
initGCC(func(rate int) {
124+
logger.Info("setting codec target bitrate", "rate", rate)
125+
codec.setTargetBitrate(rate)
126+
}),
127+
)
128+
assert.NoError(t, err)
129+
130+
track, err := sender.addLocalTrack()
131+
assert.NoError(t, err)
132+
133+
codec = newPerfectCodec(track, 1_000_000)
134+
go func() {
135+
<-connected
136+
codec.start()
97137
}()
98-
}),
99-
registerPacketLogger(logger.With("vantage-point", "receiver")),
100-
registerCCFB(),
101-
)
102-
assert.NoError(t, err)
103-
104-
err = receiver.addRemoteTrack()
105-
assert.NoError(t, err)
106-
107-
var codec *perfectCodec
108-
sender, err := newPeer(
109-
registerDefaultCodecs(),
110-
onConnected(func() { close(connected) }),
111-
setVNet(network.right, []string{"10.0.2.1"}),
112-
registerPacketLogger(logger.With("vantage-point", "sender")),
113-
registerRTPFB(),
114-
initGCC(func(rate int) {
115-
logger.Info("setting codec target bitrate", "rate", rate)
116-
codec.setTargetBitrate(rate)
117-
}),
118-
)
119-
assert.NoError(t, err)
120-
121-
track, err := sender.addLocalTrack()
122-
assert.NoError(t, err)
123-
124-
codec = newPerfectCodec(track, 1_000_000)
125-
go func() {
126-
<-connected
127-
codec.start()
128-
}()
129-
130-
offer, err := sender.createOffer()
131-
assert.NoError(t, err)
132-
133-
err = receiver.setRemoteDescription(offer)
134-
assert.NoError(t, err)
135-
136-
answer, err := receiver.createAnswer()
137-
assert.NoError(t, err)
138-
139-
err = sender.setRemoteDescription(answer)
140-
assert.NoError(t, err)
141-
142-
synctest.Wait()
143-
select {
144-
case <-onTrack:
145-
case <-time.After(time.Second):
146-
assert.Fail(t, "on track not called")
147-
}
148-
time.Sleep(100 * time.Second)
149-
close(done)
150-
151-
err = codec.Close()
152-
assert.NoError(t, err)
153-
154-
err = sender.pc.Close()
155-
assert.NoError(t, err)
156-
157-
err = receiver.pc.Close()
158-
assert.NoError(t, err)
159-
160-
err = network.Close()
161-
assert.NoError(t, err)
162-
163-
synctest.Wait()
164-
})
138+
139+
offer, err := sender.createOffer()
140+
assert.NoError(t, err)
141+
142+
err = receiver.setRemoteDescription(offer)
143+
assert.NoError(t, err)
144+
145+
answer, err := receiver.createAnswer()
146+
assert.NoError(t, err)
147+
148+
err = sender.setRemoteDescription(answer)
149+
assert.NoError(t, err)
150+
151+
synctest.Wait()
152+
153+
select {
154+
case <-onTrack:
155+
case <-time.After(time.Second):
156+
assert.Fail(t, "on track not called")
157+
}
158+
159+
time.Sleep(100 * time.Second)
160+
close(done)
161+
162+
err = codec.Close()
163+
assert.NoError(t, err)
164+
165+
err = sender.pc.Close()
166+
assert.NoError(t, err)
167+
168+
err = receiver.pc.Close()
169+
assert.NoError(t, err)
170+
171+
err = network.Close()
172+
assert.NoError(t, err)
173+
174+
synctest.Wait()
175+
})
176+
})
177+
}
165178
}
166179

167180
func testLogger(t *testing.T) (*slog.Logger, func()) {
168181
t.Helper()
169-
170-
filename := filepath.Join(logDir, fmt.Sprintf("%s.jsonl", t.Name()))
182+
name := strings.ReplaceAll(t.Name(), "/", "-")
183+
filename := filepath.Join(logDir, fmt.Sprintf("%s.jsonl", name))
171184
file, err := os.Create(filename)
172185
if err != nil {
173186
t.Fatalf("failed to create log file %q: %v", filename, err)

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,5 @@ require (
3232
golang.org/x/sys v0.30.0 // indirect
3333
gopkg.in/yaml.v3 v3.0.1 // indirect
3434
)
35+
36+
replace github.com/pion/transport/v3 v3.0.8 => ../transport

0 commit comments

Comments
 (0)