11/*
2- * Copyright 2023-2025 LiveKit, Inc.
2+ * Copyright 2023-2026 LiveKit, Inc.
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@ import io.livekit.android.events.ParticipantEvent
2626import io.livekit.android.events.RoomEvent
2727import io.livekit.android.room.DefaultsManager
2828import io.livekit.android.room.RTCEngine
29+ import io.livekit.android.room.RoomException
2930import io.livekit.android.room.track.LocalVideoTrack
3031import io.livekit.android.room.track.LocalVideoTrackOptions
3132import io.livekit.android.room.track.ScreenSharePresets
@@ -879,4 +880,19 @@ class LocalParticipantMockE2ETest : MockE2ETest() {
879880
880881 assertTrue(headerPacket.user.payload.toByteArray().contentEquals(data))
881882 }
883+
884+ @Test
885+ fun publishDataReturnsFailureWhenPublisherChannelIsMissing () = runTest {
886+ connect()
887+
888+ val rtcEngine = component.rtcEngine()
889+ val reliableDataChannelField = RTCEngine ::class .java.getDeclaredField(" reliableDataChannel" )
890+ reliableDataChannelField.isAccessible = true
891+ reliableDataChannelField.set(rtcEngine, null )
892+
893+ val result = room.localParticipant.publishData(" hello" .toByteArray())
894+
895+ assertTrue(result.isFailure)
896+ assertTrue(result.exceptionOrNull() is RoomException .ConnectException )
897+ }
882898}
0 commit comments