mirror of
https://github.com/pion/webrtc.git
synced 2025-10-04 14:53:05 +08:00
Fix MediaEngine Copy
Copy the entire API. Since the MediaEngine is a pointer that would destroy the MediaEngine that is used by other PeerConnections Relates to #1662
This commit is contained in:
@@ -145,7 +145,9 @@ func TestSettingEngine_SetDisableMediaEngineCopy(t *testing.T) {
|
||||
m := &MediaEngine{}
|
||||
assert.NoError(t, m.RegisterDefaultCodecs())
|
||||
|
||||
offerer, answerer, err := NewAPI(WithMediaEngine(m)).newPair(Configuration{})
|
||||
api := NewAPI(WithMediaEngine(m))
|
||||
|
||||
offerer, answerer, err := api.newPair(Configuration{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = offerer.AddTransceiverFromKind(RTPCodecTypeVideo)
|
||||
@@ -153,11 +155,30 @@ func TestSettingEngine_SetDisableMediaEngineCopy(t *testing.T) {
|
||||
|
||||
assert.NoError(t, signalPair(offerer, answerer))
|
||||
|
||||
// Assert that the MediaEngine the user created isn't modified
|
||||
assert.False(t, m.negotiatedVideo)
|
||||
assert.Empty(t, m.negotiatedVideoCodecs)
|
||||
|
||||
// Assert that the internal MediaEngine is modified
|
||||
assert.True(t, offerer.api.mediaEngine.negotiatedVideo)
|
||||
assert.NotEmpty(t, offerer.api.mediaEngine.negotiatedVideoCodecs)
|
||||
|
||||
assert.NoError(t, offerer.Close())
|
||||
assert.NoError(t, answerer.Close())
|
||||
|
||||
newOfferer, newAnswerer, err := api.newPair(Configuration{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Assert that the first internal MediaEngine hasn't been cleared
|
||||
assert.True(t, offerer.api.mediaEngine.negotiatedVideo)
|
||||
assert.NotEmpty(t, offerer.api.mediaEngine.negotiatedVideoCodecs)
|
||||
|
||||
// Assert that the new internal MediaEngine isn't modified
|
||||
assert.False(t, newOfferer.api.mediaEngine.negotiatedVideo)
|
||||
assert.Empty(t, newAnswerer.api.mediaEngine.negotiatedVideoCodecs)
|
||||
|
||||
assert.NoError(t, newOfferer.Close())
|
||||
assert.NoError(t, newAnswerer.Close())
|
||||
})
|
||||
|
||||
t.Run("No Copy", func(t *testing.T) {
|
||||
@@ -167,7 +188,9 @@ func TestSettingEngine_SetDisableMediaEngineCopy(t *testing.T) {
|
||||
s := SettingEngine{}
|
||||
s.DisableMediaEngineCopy(true)
|
||||
|
||||
offerer, answerer, err := NewAPI(WithMediaEngine(m), WithSettingEngine(s)).newPair(Configuration{})
|
||||
api := NewAPI(WithMediaEngine(m), WithSettingEngine(s))
|
||||
|
||||
offerer, answerer, err := api.newPair(Configuration{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = offerer.AddTransceiverFromKind(RTPCodecTypeVideo)
|
||||
@@ -175,10 +198,21 @@ func TestSettingEngine_SetDisableMediaEngineCopy(t *testing.T) {
|
||||
|
||||
assert.NoError(t, signalPair(offerer, answerer))
|
||||
|
||||
// Assert that the user MediaEngine was modified, so no copy happened
|
||||
assert.True(t, m.negotiatedVideo)
|
||||
assert.NotEmpty(t, m.negotiatedVideoCodecs)
|
||||
|
||||
assert.NoError(t, offerer.Close())
|
||||
assert.NoError(t, answerer.Close())
|
||||
|
||||
offerer, answerer, err = api.newPair(Configuration{})
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Assert that the new internal MediaEngine was modified, so no copy happened
|
||||
assert.True(t, offerer.api.mediaEngine.negotiatedVideo)
|
||||
assert.NotEmpty(t, offerer.api.mediaEngine.negotiatedVideoCodecs)
|
||||
|
||||
assert.NoError(t, offerer.Close())
|
||||
assert.NoError(t, answerer.Close())
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user