AmazonChimeSDK/AmazonChimeSDKTests/internal/audio/DefaultAudioClientObserverTests.swift (1,587 lines of code) (raw):
//
// DefaultAudioClientObserverTests.swift
// AmazonChimeSDK
//
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
//
@testable import AmazonChimeSDK
import AmazonChimeSDKMedia
import Mockingbird
import XCTest
class DefaultAudioClientObserverTests: XCTestCase {
var config: MeetingSessionConfiguration!
let externalMeetingId = "external-meeting-id"
let audioFallbackUrl = "audioFallbackUrl"
let audioHostUrl = "audioHostUrl"
let signalingUrl = "signalingUrl"
let turnControlUrl = "turnControlUrl"
let mediaRegion = "us-east-1"
let meetingId = "meeting-id"
let attendeeId = "attendee-id"
let externalUserId = "externalUserId"
let joinToken = "join-token"
let timestampMs: Int64 = 1632087029249
let transcriptionRegion = "us-east-1"
let transcriptionConfiguration = "transcription-configuration"
let failedMessage = "Internal server error"
var audioClientMock: AudioClientProtocolMock!
var clientMetricsCollectorMock: ClientMetricsCollectorMock!
var audioSessionMock: AudioSessionMock!
var audioLockMock: AudioLockMock!
var eventAnalyticsControllerMock: EventAnalyticsControllerMock!
var loggerMock: LoggerMock!
var defaultAudioClientObserver: DefaultAudioClientObserver!
var mockAudioVideoObserver: AudioVideoObserverMock!
var mockRealTimeObserver: RealtimeObserverMock!
var meetingStatsCollectorMock: MeetingStatsCollectorMock!
var transcriptEventObserverMock: TranscriptEventObserverMock!
let defaultTimeout = 1.0
override func setUp() {
mockAudioVideoObserver = mock(AudioVideoObserver.self)
mockRealTimeObserver = mock(RealtimeObserver.self)
audioClientMock = mock(AudioClientProtocol.self)
clientMetricsCollectorMock = mock(ClientMetricsCollector.self)
eventAnalyticsControllerMock = mock(EventAnalyticsController.self)
audioLockMock = mock(AudioLock.self)
meetingStatsCollectorMock = mock(MeetingStatsCollector.self)
transcriptEventObserverMock = mock(TranscriptEventObserver.self)
loggerMock = mock(Logger.self)
given(meetingStatsCollectorMock.getMeetingStats()).will { [AnyHashable: Any]() }
let mediaPlacementMock: MediaPlacementMock = mock(MediaPlacement.self)
.initialize(audioFallbackUrl: audioFallbackUrl,
audioHostUrl: audioHostUrl,
signalingUrl: signalingUrl,
turnControlUrl: turnControlUrl,
eventIngestionUrl: nil)
let meetingFeaturesMock: MeetingFeaturesMock = mock(MeetingFeatures.self)
.initialize(videoMaxResolution: VideoResolution.videoResolutionHD,
contentMaxResolution: VideoResolution.videoResolutionFHD)
let meetingMock: MeetingMock = mock(Meeting.self).initialize(externalMeetingId: externalMeetingId,
mediaPlacement: mediaPlacementMock,
meetingFeatures: meetingFeaturesMock,
mediaRegion: mediaRegion,
meetingId: meetingId,
primaryMeetingId: nil)
let createMeetingResponseMock: CreateMeetingResponseMock = mock(CreateMeetingResponse.self)
.initialize(meeting: meetingMock)
let attendeeMock: AttendeeMock = mock(Attendee.self).initialize(attendeeId: attendeeId,
externalUserId: externalUserId,
joinToken: joinToken)
let createAttendeeResponseMock: CreateAttendeeResponseMock = mock(CreateAttendeeResponse.self)
.initialize(attendee: attendeeMock)
let clientConfig = MeetingEventClientConfiguration(eventClientJoinToken: joinToken, meetingId: meetingId, attendeeId: attendeeId)
config = mock(MeetingSessionConfiguration.self).initialize(createMeetingResponse: createMeetingResponseMock,
createAttendeeResponse: createAttendeeResponseMock,
urlRewriter: URLRewriterUtils.defaultUrlRewriter)
defaultAudioClientObserver = DefaultAudioClientObserver(audioClient: audioClientMock,
clientMetricsCollector: clientMetricsCollectorMock,
audioClientLock: audioLockMock,
configuration: config,
logger: loggerMock,
eventAnalyticsController: eventAnalyticsControllerMock,
meetingStatsCollector: meetingStatsCollectorMock)
defaultAudioClientObserver.subscribeToAudioClientStateChange(observer: mockAudioVideoObserver)
defaultAudioClientObserver.subscribeToRealTimeEvents(observer: mockRealTimeObserver)
defaultAudioClientObserver.subscribeToTranscriptEvent(observer: transcriptEventObserverMock)
given(audioClientMock.stopSession()).willReturn(0)
DefaultAudioClientController.state = .started
}
// MARK: - Audio Client State Changed Tests
// Client state change tests -- Common sense tests
func testAudioClientStateChanged_Connected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(0))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(0))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidStart(reconnecting: false)).wasCalled()
}
wait(for: [expect], timeout: 1.0)
}
func testAudioClientStateChanged_Reconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidStart(reconnecting: true)).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_ConnectionRecover() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.connectionDidRecover()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_ConnectionBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.connectionDidBecomePoor()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_ConnectionDrop() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidDrop()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_ConnectionCancelReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidCancelReconnect()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_ConnectionFailedFromConnecting() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnected)
}
func testAudioClientStateChanged_ConnectionFailedFromConnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnected)
}
func testAudioClientStateChanged_ConnectionFailedFromReconnecting() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidCancelReconnect()).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingFailed, attributes: any())).wasCalled()
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any(MeetingSessionStatus.self,
where: { $0.statusCode.rawValue == MeetingSessionStatusCode.audioDisconnected.rawValue}))).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_FinishDisconnectingFromConnecting() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_FinishDisconnectingFromConnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_FinishDisconnectingFromReconnecting() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidCancelReconnect()).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingEnded, attributes: any())).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_FinishDisconnectingFromConnected_WhenJoinedFromAnotherDevice() {
given(audioClientMock.stopSession()).willReturn(0)
DefaultAudioClientController.state = .started
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_FinishDisconnectingFromConnecting_WhenJoinedFromAnotherDevice() {
given(audioClientMock.stopSession()).willReturn(0)
DefaultAudioClientController.state = .started
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_FinishDisconnectingFromReconnecting_WhenJoinedFromAnotherDevice() {
given(audioClientMock.stopSession()).willReturn(0)
DefaultAudioClientController.state = .started
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any(MeetingSessionStatus.self,
where: { $0.statusCode.rawValue == MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue}))).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingEnded, attributes: any())).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
verify(mockAudioVideoObserver.audioSessionDidCancelReconnect()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_NotifiesOfInputDeviceFailure() {
let statusCode = MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(statusCode))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInputDeviceNotResponding)
}
func testAudioClientStateChanged_NotifiesOfOutputDeviceFailure() {
let statusCode = MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(statusCode))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioOutputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectionCancelledReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidCancelReconnect()).wasCalled()
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any(MeetingSessionStatus.self,
where: { $0.statusCode.rawValue == MeetingSessionStatusCode.audioDisconnected.rawValue}))).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingFailed, attributes: any())).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAudioClientStateChanged_SameStateStatusNoop() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
// Client state change tests -- Remaining combinations of state and status from connected state with ok status
func testAudioClientStateChanged_ConnectedOkToUnknownOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToFailedOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.ok)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.ok)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupOk() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.ok)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnected)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnected)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioDisconnected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnected)
}
func testAudioClientStateChanged_ConnectedOkToUnknownConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.connectionHealthReconnect)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.connectionHealthReconnect)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupConnectionHealthReconnect() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.connectionHealthReconnect.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.connectionHealthReconnect)
}
func testAudioClientStateChanged_ConnectedOkToUnknownNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.networkBecomePoor)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.networkBecomePoor)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupNetworkBecomePoor() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.networkBecomePoor.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.networkBecomePoor)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToInitAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioServerHungup() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServerHungup.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioServerHungup)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToInitAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioJoinedFromAnotherDevice() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioJoinedFromAnotherDevice.rawValue))
verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode.audioJoinedFromAnotherDevice)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInternalServerError)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInternalServerError)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioInternalServerError() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInternalServerError.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInternalServerError)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioAuthenticationRejected)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioAuthenticationRejected)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioAuthenticationRejected() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioAuthenticationRejected.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioAuthenticationRejected)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallAtCapacity)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallAtCapacity)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioCallAtCapacity() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallAtCapacity.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallAtCapacity)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnectAudio)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnectAudio)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioDisconnectAudio() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioDisconnectAudio.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioDisconnectAudio)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallEnded)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallEnded)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioCallEnded() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioCallEnded.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioCallEnded)
}
func testAudioClientStateChanged_ConnectedOkToUnknownVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupVideoServiceUnavailable() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoServiceUnavailable.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoServiceUnavailable)
}
func testAudioClientStateChanged_ConnectedOkToUnknownUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.unknown)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.unknown)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupUnknown() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.unknown.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.unknown)
}
func testAudioClientStateChanged_ConnectedOkToUnknownVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoAtCapacityViewOnly)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoAtCapacityViewOnly)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupVideoAtCapacityViewOnly() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.videoAtCapacityViewOnly.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.videoAtCapacityViewOnly)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioInputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioInputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioInputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectedOkToUnknownAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_UNKNOWN,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToInitAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_INIT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToConnectingAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToReconnectingAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_RECONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateChangedToReconnecting()
}
func testAudioClientStateChanged_ConnectedOkToFailedAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_FAILED_TO_CONNECT,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioOutputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectedOkToDisconnectingAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTING,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedNormalAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_NORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateNoop()
}
func testAudioClientStateChanged_ConnectedOkToDisconnectedAbnormalAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_DISCONNECTED_ABNORMAL,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioOutputDeviceNotResponding)
}
func testAudioClientStateChanged_ConnectedOkToServerHungupAudioOutputDeviceNotResponding() {
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_CONNECTED,
status: audio_client_status_t.init(MeetingSessionStatusCode.ok.rawValue))
defaultAudioClientObserver.audioClientStateChanged(AUDIO_CLIENT_STATE_SERVER_HUNGUP,
status: audio_client_status_t.init(MeetingSessionStatusCode.audioOutputDeviceNotResponding.rawValue))
verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode.audioOutputDeviceNotResponding)
}
func verifyAudioClientStateChangedToReconnecting() {
verifyAudioClientStateNoop()
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidDrop()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func verifyAudioClientStateMeetingFailed(statusCode: MeetingSessionStatusCode) {
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any(MeetingSessionStatus.self,
where: { $0.statusCode.rawValue == statusCode.rawValue}))).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingFailed, attributes: any())).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func verifyAudioClientStateMeetingEnded(statusCode: MeetingSessionStatusCode) {
let expect = eventually {
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any(MeetingSessionStatus.self,
where: { $0.statusCode.rawValue == statusCode.rawValue}))).wasCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: .meetingEnded, attributes: any())).wasCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func verifyAudioClientStateNoop() {
verify(mockAudioVideoObserver.audioSessionDidStopWithStatus(sessionStatus: any())).wasNeverCalled()
verify(eventAnalyticsControllerMock.publishEvent(name: any(), attributes: any())).wasNeverCalled()
verify(meetingStatsCollectorMock.resetMeetingStats()).wasNeverCalled()
}
// MARK: - Audio Metric Changed Tests
func testAudioMetricChanged_processAudioClientMetrics() {
var metrics = [AnyHashable: Any]()
metrics[ObservableMetric.audioSendPacketLossPercent] = 50
defaultAudioClientObserver.audioMetricsChanged(metrics)
verify(clientMetricsCollectorMock.processAudioClientMetrics(metrics: any())).wasCalled()
}
}
// MARK: - Signal Strength Tests
extension DefaultAudioClientObserverTests{
func testSignalStrengthChanged_signalStrengthDidChange() {
let signals = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 0)]
defaultAudioClientObserver.signalStrengthChanged(signals as [Any])
let expect = eventually {
verify(mockRealTimeObserver.signalStrengthDidChange(signalUpdates: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testSignalStrengthChanged_signalStrengthDidChange_noDuplicate() {
let signals = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 0)]
defaultAudioClientObserver.signalStrengthChanged(signals as [Any])
defaultAudioClientObserver.signalStrengthChanged(signals as [Any])
let expect = eventually {
verify(mockRealTimeObserver.signalStrengthDidChange(signalUpdates: any())).wasCalled(1)
}
wait(for: [expect], timeout: defaultTimeout)
}
func testSignalStrengthChanged_signalStrengthDidChange_differentSignalLevel() {
let signals = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 0)]
let signals2 = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
defaultAudioClientObserver.signalStrengthChanged(signals as [Any])
defaultAudioClientObserver.signalStrengthChanged(signals2 as [Any])
let expect = eventually {
verify(mockRealTimeObserver.signalStrengthDidChange(signalUpdates: any())).wasCalled(2)
}
wait(for: [expect], timeout: defaultTimeout)
}
}
// MARK: - Volume State Tests
extension DefaultAudioClientObserverTests{
func testVolumeStateChanged_volumeDidChange() {
let volumes = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 2)]
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
let expect = eventually {
verify(mockRealTimeObserver.volumeDidChange(volumeUpdates: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testVolumeStateChanged_volumeDidChange_noDuplicate() {
let volumes = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 2)]
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
let expect = eventually {
verify(mockRealTimeObserver.volumeDidChange(volumeUpdates: any())).wasCalled(1)
}
wait(for: [expect], timeout: defaultTimeout)
}
func testVolumeStateChanged_volumeDidChange_differentVolumeLevel() {
let volumes = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 2)]
let volumes2 = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
defaultAudioClientObserver.volumeStateChanged(volumes2 as [Any])
let expect = eventually {
verify(mockRealTimeObserver.volumeDidChange(volumeUpdates: any())).wasCalled(2)
}
wait(for: [expect], timeout: defaultTimeout)
}
func testVolumeStateChanged_attendeesDidMute() {
let volumes = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: -1)]
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidMute(attendeeInfo: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testVolumeStateChanged_attendeesDidUnMute() {
let volumes = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: -1)]
let volumes2 = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 2)]
defaultAudioClientObserver.volumeStateChanged(volumes as [Any])
defaultAudioClientObserver.volumeStateChanged(volumes2 as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidMute(attendeeInfo: any())).wasCalled()
verify(mockRealTimeObserver.attendeesDidUnmute(attendeeInfo: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
}
// MARK: - Attendees Presence Tests
extension DefaultAudioClientObserverTests{
func testAttendeesPresenceChanged_attendeesDidJoin() {
let attendees = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
defaultAudioClientObserver.attendeesPresenceChanged(attendees as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidJoin(attendeeInfo: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAttendeesPresenceChanged_attendeesDidJoinDuplicate() {
let attendees = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
defaultAudioClientObserver.attendeesPresenceChanged(attendees as [Any])
defaultAudioClientObserver.attendeesPresenceChanged(attendees as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidJoin(attendeeInfo: any())).wasCalled(1)
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAttendeesPresenceChanged_attendeesDidLeave() {
let attendees = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
let attendees2 = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 2)]
defaultAudioClientObserver.attendeesPresenceChanged(attendees as [Any])
defaultAudioClientObserver.attendeesPresenceChanged(attendees2 as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidJoin(attendeeInfo: any())).wasCalled()
verify(mockRealTimeObserver.attendeesDidLeave(attendeeInfo: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testAttendeesPresenceChanged_attendeesDidDrop() {
let attendees = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 1)]
let attendees2 = [AttendeeUpdate(profileId: attendeeId, externalUserId: externalUserId, data: 3)]
defaultAudioClientObserver.attendeesPresenceChanged(attendees as [Any])
defaultAudioClientObserver.attendeesPresenceChanged(attendees2 as [Any])
let expect = eventually {
verify(mockRealTimeObserver.attendeesDidJoin(attendeeInfo: any())).wasCalled()
verify(mockRealTimeObserver.attendeesDidDrop(attendeeInfo: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
}
// MARK: - Transcript Event Tests
extension DefaultAudioClientObserverTests{
func testTranscriptEventsReceived_receivedTranscriptionStatus() {
let statusStarted = TranscriptionStatusInternal(type: TranscriptionStatusTypeInternal.started,
eventTimeMs: timestampMs,
transcriptionRegion: transcriptionRegion,
transcriptionConfiguration: transcriptionConfiguration,
message: "")
let statusFailed = TranscriptionStatusInternal(type: TranscriptionStatusTypeInternal.failed,
eventTimeMs: timestampMs,
transcriptionRegion: transcriptionRegion,
transcriptionConfiguration: transcriptionConfiguration,
message: failedMessage)
let events = [statusStarted, statusFailed]
defaultAudioClientObserver.transcriptEventsReceived(events as [Any])
let expect = eventually {
verify(transcriptEventObserverMock.transcriptEventDidReceive(transcriptEvent: any())).wasCalled(2)
}
wait(for: [expect], timeout: defaultTimeout)
}
func testTranscriptEventsReceived_receivedTranscript() {
let item = TranscriptItemInternal(type: TranscriptItemTypeInternal.pronunciation,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
attendee: AttendeeInfoInternal(attendeeId: "attendee-id",
externalUserId: "external-user-id"),
content: "test",
vocabularyFilterMatch: true,
stable: false,
confidence: 0.0)!
let alternative = TranscriptAlternativeInternal(items: [item], entities: [], transcript: "test")!
let result = TranscriptResultInternal(resultId: "result-id",
channelId: "",
isPartial: true,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
alternatives: [alternative],
languageCode: "en-US",
languageIdentification: [])!
let transcript = TranscriptInternal(results: [result])
let events = [transcript]
defaultAudioClientObserver.transcriptEventsReceived(events as [Any])
let expect = eventually {
verify(transcriptEventObserverMock.transcriptEventDidReceive(transcriptEvent: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testTranscriptEventsReceived_receivedTranscriptWithNilEntities() {
let item = TranscriptItemInternal(type: TranscriptItemTypeInternal.pronunciation,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
attendee: AttendeeInfoInternal(attendeeId: "attendee-id",
externalUserId: "external-user-id"),
content: "test",
vocabularyFilterMatch: true,
stable: false,
confidence: 0.0)!
let alternative = TranscriptAlternativeInternal(items: [item], entities: nil, transcript: "test") ?? TranscriptAlternativeInternal()
let result = TranscriptResultInternal(resultId: "result-id",
channelId: "",
isPartial: true,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
alternatives: [alternative],
languageCode: "en-US",
languageIdentification: [])!
let transcript = TranscriptInternal(results: [result])
let events = [transcript]
defaultAudioClientObserver.transcriptEventsReceived(events as [Any])
let expect = eventually {
verify(transcriptEventObserverMock.transcriptEventDidReceive(transcriptEvent: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
func testTranscriptEventsReceived_receivedTranscriptWithNilLanguageIdentification() {
let item = TranscriptItemInternal(type: TranscriptItemTypeInternal.pronunciation,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
attendee: AttendeeInfoInternal(attendeeId: "attendee-id",
externalUserId: "external-user-id"),
content: "test",
vocabularyFilterMatch: true,
stable: false,
confidence: 0.0)!
let alternative = TranscriptAlternativeInternal(items: [item], entities: [], transcript: "test")!
let result = TranscriptResultInternal(resultId: "result-id",
channelId: "",
isPartial: true,
startTimeMs: timestampMs,
endTimeMs: timestampMs,
alternatives: [alternative],
languageCode: "en-US",
languageIdentification: nil) ?? TranscriptResultInternal()
let transcript = TranscriptInternal(results: [result])
let events = [transcript]
defaultAudioClientObserver.transcriptEventsReceived(events as [Any])
let expect = eventually {
verify(transcriptEventObserverMock.transcriptEventDidReceive(transcriptEvent: any())).wasCalled()
}
wait(for: [expect], timeout: defaultTimeout)
}
}