Repair connectivity correctly v1
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import { expect, type Page } from '@playwright/test';
|
||||
import { test, type Client } from '../../fixtures/multi-client';
|
||||
import {
|
||||
closeOpenDataChannels,
|
||||
dumpRtcDiagnostics,
|
||||
installAutoResumeAudioContext,
|
||||
installWebRTCTracking,
|
||||
@@ -8,6 +9,7 @@ import {
|
||||
waitForAudioFlow,
|
||||
waitForAudioStatsPresent,
|
||||
waitForConnectedPeerCount,
|
||||
waitForOpenDataChannelCount,
|
||||
waitForInboundVideoFlow,
|
||||
waitForOutboundVideoFlow,
|
||||
waitForPeerConnected
|
||||
@@ -371,6 +373,35 @@ test.describe('Direct private calls', () => {
|
||||
});
|
||||
});
|
||||
|
||||
test('keeps private-call audio flowing after the data channel closes', async ({ createClient }) => {
|
||||
const scenario = await createDirectCallScenario(createClient);
|
||||
|
||||
await test.step('Alice starts a private call and Bob joins', async () => {
|
||||
await startCallFromSearch(scenario.alice.page, scenario.bobUserId, 'Bob');
|
||||
await scenario.bob.page.getByRole('button', { name: 'Open private call' }).click();
|
||||
await expect(scenario.bob.page).toHaveURL(/\/call\//, { timeout: 20_000 });
|
||||
await scenario.bob.page.getByRole('button', { name: 'Join call' }).click();
|
||||
await expect(scenario.bob.page.getByRole('button', { name: 'Leave call' })).toBeVisible({ timeout: 20_000 });
|
||||
|
||||
await waitForConnectedPeerCount(scenario.alice.page, 1, 45_000);
|
||||
await waitForConnectedPeerCount(scenario.bob.page, 1, 45_000);
|
||||
await waitForOpenDataChannelCount(scenario.alice.page, 1, 45_000);
|
||||
await waitForOpenDataChannelCount(scenario.bob.page, 1, 45_000);
|
||||
await waitForAllPeerAudioFlow(scenario.alice.page, 1, 45_000);
|
||||
await waitForAllPeerAudioFlow(scenario.bob.page, 1, 45_000);
|
||||
});
|
||||
|
||||
await test.step('Data-channel recovery keeps the call audible', async () => {
|
||||
const closed = await closeOpenDataChannels(scenario.alice.page);
|
||||
|
||||
expect(closed).toBeGreaterThan(0);
|
||||
await waitForOpenDataChannelCount(scenario.alice.page, 1, 60_000);
|
||||
await waitForOpenDataChannelCount(scenario.bob.page, 1, 60_000);
|
||||
await waitForAllPeerAudioFlow(scenario.alice.page, 1, 60_000);
|
||||
await waitForAllPeerAudioFlow(scenario.bob.page, 1, 60_000);
|
||||
});
|
||||
});
|
||||
|
||||
test('missing and ended private calls do not leave stale call controls behind', async ({ createClient }) => {
|
||||
const scenario = await createDirectCallScenario(createClient);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user