Persist channel DRED settings
This commit is contained in:
@@ -54,4 +54,33 @@ public sealed class AccountStoreTests
|
||||
}
|
||||
finally { Directory.Delete(directory, true); }
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void VersionTwoDatabaseMigratesDredAsDisabled()
|
||||
{
|
||||
string directory = Path.Combine(Path.GetTempPath(), "voicecat-v2-" + Guid.NewGuid().ToString("N"));
|
||||
Directory.CreateDirectory(directory);
|
||||
string path = Path.Combine(directory, "voicecat.db");
|
||||
try
|
||||
{
|
||||
using (var store = new AccountStore(path)) store.LoadChannels();
|
||||
using (var connection = new SqliteConnection(new SqliteConnectionStringBuilder { DataSource = path, Pooling = false }.ToString()))
|
||||
{
|
||||
connection.Open();
|
||||
using var command = connection.CreateCommand();
|
||||
command.CommandText = "ALTER TABLE channels DROP COLUMN audio_dred; UPDATE server_meta SET value='2' WHERE key='schema_version';";
|
||||
command.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
using (var migrated = new AccountStore(path))
|
||||
Assert.All(migrated.LoadChannels(), channel => Assert.False(channel.Audio.Dred));
|
||||
|
||||
using var verify = new SqliteConnection(new SqliteConnectionStringBuilder { DataSource = path, Pooling = false }.ToString());
|
||||
verify.Open();
|
||||
using var query = verify.CreateCommand();
|
||||
query.CommandText = "SELECT value FROM server_meta WHERE key='schema_version'";
|
||||
Assert.Equal("3", query.ExecuteScalar());
|
||||
}
|
||||
finally { Directory.Delete(directory, true); }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,4 +99,33 @@ public class ChannelManagementTests
|
||||
Assert.True(await ResultAsync(admin, new() { DeleteChannel = new() { ChannelId = child.Id } }));
|
||||
Assert.True(await ResultAsync(admin, new() { DeleteChannel = new() { ChannelId = parent.Id } }));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DredAudioSettingsRoundTripThroughEditAndDatabaseRestart()
|
||||
{
|
||||
await using var fixture = new ServerFixture();
|
||||
await using var admin = await AdminAsync(fixture);
|
||||
using (var store = new AccountStore(Path.Combine(fixture.Directory, "voicecat.db")))
|
||||
{
|
||||
Channel music = store.LoadChannels().Single(c => c.Name == "Music Room");
|
||||
music.Audio.SampleRate = 48_000;
|
||||
music.Audio.BitrateBps = 128_000;
|
||||
music.Audio.ExpectedPacketLoss = 15;
|
||||
music.Audio.Dtx = true;
|
||||
music.Audio.Fec = true;
|
||||
music.Audio.Dred = true;
|
||||
music.Audio.Complexity = 10;
|
||||
Assert.True(await ResultAsync(admin, new() { EditChannel = new() { Channel = music } }));
|
||||
}
|
||||
|
||||
using var reopened = new AccountStore(Path.Combine(fixture.Directory, "voicecat.db"));
|
||||
AudioConfig audio = reopened.LoadChannels().Single(c => c.Name == "Music Room").Audio;
|
||||
Assert.Equal(48_000U, audio.SampleRate);
|
||||
Assert.Equal(128_000U, audio.BitrateBps);
|
||||
Assert.Equal(15U, audio.ExpectedPacketLoss);
|
||||
Assert.True(audio.Dtx);
|
||||
Assert.True(audio.Fec);
|
||||
Assert.True(audio.Dred);
|
||||
Assert.Equal(10U, audio.Complexity);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,6 +78,25 @@ public class WindowsManagedClientTests
|
||||
Assert.Empty(alice.ManagedClient.LocalStreams);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task WindowsChannelEditorSettingsRoundTripFromServer()
|
||||
{
|
||||
await using var fixture = new ServerFixture();
|
||||
using (var accounts = new AccountStore(Path.Combine(fixture.Directory, "voicecat.db")))
|
||||
await accounts.CreateAccountAsync("Admin", "secret", true);
|
||||
using var client = new Client("Admin", "test", tofuStorePath: Path.Combine(fixture.Directory, "admin.pins"));
|
||||
await Login(client, fixture, true);
|
||||
ChannelInfo music = client.ListChannels().Single(c => c.Name == "Music Room");
|
||||
var expected = new AudioConfigInfo(0, true, 48_000, 128_000, 20, 1, true, 15, true, 10, true);
|
||||
var edit = new ChannelEditInfo(music.Id, music.ParentId, music.Name, music.Topic,
|
||||
music.PasswordProtected, null, music.MaxUsers, music.SortOrder, expected);
|
||||
|
||||
Assert.Equal(VcResult.Ok, client.EditChannel(edit));
|
||||
await Until(client, () => client.ListChannels().Single(c => c.Id == music.Id).Audio.Dred);
|
||||
|
||||
Assert.Equal(expected, client.ListChannels().Single(c => c.Id == music.Id).Audio);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task WindowsScreenAudioPreservesDistinctStereoChannels()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user