Files
livekit/pkg/rtc/datatrack_test.go
cnderrauber 9746c9a9d6 Enforce subscriptio permission to data track (#4588)
* Enforce subscriptio permission to data track

* use revoke path as same as media track

* nil check
2026-06-12 16:02:12 +08:00

72 lines
2.5 KiB
Go

// Copyright 2023 LiveKit, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package rtc
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/livekit/livekit-server/pkg/rtc/types/typesfakes"
"github.com/livekit/protocol/livekit"
"github.com/livekit/protocol/logger"
"github.com/livekit/protocol/observability/roomobs"
)
func newTestDataTrackSubscriber(id livekit.ParticipantID, identity livekit.ParticipantIdentity, isRecorder bool) *typesfakes.FakeLocalParticipant {
sub := &typesfakes.FakeLocalParticipant{}
sub.IDReturns(id)
sub.IdentityReturns(identity)
sub.IsRecorderReturns(isRecorder)
sub.GetLoggerReturns(logger.GetLogger())
sub.GetReporterReturns(roomobs.NewNoopParticipantSessionReporter())
sub.GetTelemetryListenerReturns(&typesfakes.FakeParticipantTelemetryListener{})
return sub
}
func TestDataTrackRevokeDisallowedSubscribers(t *testing.T) {
dt := NewDataTrack(
DataTrackParams{
Logger: logger.GetLogger(),
ParticipantID: func() livekit.ParticipantID { return "pubID" },
ParticipantIdentity: "pub",
},
&livekit.DataTrackInfo{
PubHandle: 1,
Sid: "DTR_test",
Name: "test",
},
)
defer dt.Close()
allowed := newTestDataTrackSubscriber("allowedID", "allowed", false)
disallowed := newTestDataTrackSubscriber("disallowedID", "disallowed", false)
recorder := newTestDataTrackSubscriber("recorderID", "recorder", true)
for _, sub := range []*typesfakes.FakeLocalParticipant{allowed, disallowed, recorder} {
_, err := dt.AddSubscriber(sub)
require.NoError(t, err)
require.True(t, dt.IsSubscriber(sub.ID()))
}
revoked := dt.RevokeDisallowedSubscribers([]livekit.ParticipantIdentity{"allowed"})
require.Equal(t, []livekit.ParticipantIdentity{"disallowed"}, revoked)
// disallowed subscriber is removed, allowed and permission exempt (recorder) subscribers are kept
require.True(t, dt.IsSubscriber(allowed.ID()))
require.False(t, dt.IsSubscriber(disallowed.ID()))
require.True(t, dt.IsSubscriber(recorder.ID()))
}