public async Task LoadsConfigAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); // Create the config first with default value. using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator.StartAsync(CancellationToken.None); await coordinator.StopAsync(CancellationToken.None); // Change the file. var configPath = Path.Combine(workDir, "WabiSabiConfig.json"); WabiSabiConfig configChanger = new(configPath); configChanger.LoadOrCreateDefaultFile(); var newTarget = 729u; configChanger.ConfirmationTarget = newTarget; Assert.NotEqual(newTarget, coordinator.Config.ConfirmationTarget); configChanger.ToFile(); // Assert the new value is loaded and not the default one. using WabiSabiCoordinator coordinator2 = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator2.StartAsync(CancellationToken.None); Assert.Equal(newTarget, coordinator2.Config.ConfirmationTarget); await coordinator2.StopAsync(CancellationToken.None); }
public async Task ChecksConfigChangesAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator.StartAsync(CancellationToken.None); var configPath = Path.Combine(workDir, "WabiSabiConfig.json"); WabiSabiConfig configChanger = new(configPath); configChanger.LoadOrCreateDefaultFile(); var newTarget = 729u; configChanger.ConfirmationTarget = newTarget; Assert.NotEqual(newTarget, coordinator.Config.ConfirmationTarget); configChanger.ToFile(); var configWatcher = coordinator.ConfigWatcher; await configWatcher.TriggerAndWaitRoundAsync(TimeSpan.FromSeconds(7)); Assert.Equal(newTarget, coordinator.Config.ConfirmationTarget); // Do it one more time. newTarget = 372; configChanger.ConfirmationTarget = newTarget; Assert.NotEqual(newTarget, coordinator.Config.ConfirmationTarget); configChanger.ToFile(); await configWatcher.TriggerAndWaitRoundAsync(TimeSpan.FromSeconds(7)); Assert.Equal(newTarget, coordinator.Config.ConfirmationTarget); await coordinator.StopAsync(CancellationToken.None); }
public async Task CanLiveAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator.StartAsync(CancellationToken.None); await coordinator.StopAsync(CancellationToken.None); }
public async Task CreatesConfigAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator.StartAsync(CancellationToken.None); Assert.True(File.Exists(Path.Combine(workDir, "WabiSabiConfig.json"))); await coordinator.StopAsync(CancellationToken.None); }
public async Task CanCancelAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); using CancellationTokenSource cts = new(); cts.Cancel(); await coordinator.StartAsync(cts.Token); await coordinator.StopAsync(CancellationToken.None); using WabiSabiCoordinator coordinator2 = new(coordinatorParameters, NewMockRpcClient(), new CoinJoinIdStore(), new CoinJoinScriptStore()); using CancellationTokenSource cts2 = new(); await coordinator2.StartAsync(cts2.Token); cts2.Cancel(); await coordinator2.StopAsync(CancellationToken.None); using WabiSabiCoordinator coordinator3 = new(coordinatorParameters, NewMockRpcClient(), new CoinJoinIdStore(), new CoinJoinScriptStore()); using CancellationTokenSource cts3 = new(); var t = coordinator3.StartAsync(cts3.Token); cts3.Cancel(); await t; await coordinator3.StopAsync(CancellationToken.None); using WabiSabiCoordinator coordinator4 = new(coordinatorParameters, NewMockRpcClient(), new CoinJoinIdStore(), new CoinJoinScriptStore()); await coordinator4.StartAsync(CancellationToken.None); using CancellationTokenSource cts4 = new(); cts4.Cancel(); await coordinator4.StopAsync(cts4.Token); using WabiSabiCoordinator coordinator5 = new(coordinatorParameters, NewMockRpcClient(), new CoinJoinIdStore(), new CoinJoinScriptStore()); await coordinator5.StartAsync(CancellationToken.None); using CancellationTokenSource cts5 = new(); t = coordinator5.StopAsync(cts5.Token); cts5.Cancel(); await t; }
public async Task LoadsIncompleteConfigAsync() { var workDir = Common.GetWorkDir(); await IoHelpers.TryDeleteDirectoryAsync(workDir); CoordinatorParameters coordinatorParameters = new(workDir); // Create the config first with default value. using WabiSabiCoordinator coordinator = CreateWabiSabiCoordinator(coordinatorParameters); await coordinator.StartAsync(CancellationToken.None); await coordinator.StopAsync(CancellationToken.None); // Remove a line. var configPath = Path.Combine(workDir, "WabiSabiConfig.json"); var lines = File.ReadAllLines(configPath); var incompleteLines = lines.Where(x => !x.Contains("ReleaseUtxoFromPrisonAfter", StringComparison.Ordinal)).ToArray(); Assert.NotEqual(lines.Length, incompleteLines.Length); File.WriteAllLines(configPath, incompleteLines); // Assert the new default value is loaded. CoordinatorParameters coordinatorParameters2 = new(workDir); using WabiSabiCoordinator coordinator2 = CreateWabiSabiCoordinator(coordinatorParameters2); await coordinator2.StartAsync(CancellationToken.None); var defaultValue = TimeSpanJsonConverter.Parse("0d 3h 0m 0s"); Assert.Equal(TimeSpan.FromHours(3), defaultValue); Assert.Equal(defaultValue, coordinator2.Config.ReleaseUtxoFromPrisonAfter); await coordinator2.StopAsync(CancellationToken.None); // Assert the new default value is serialized. lines = File.ReadAllLines(configPath); Assert.Contains(lines, x => x.Contains("\"ReleaseUtxoFromPrisonAfter\": \"0d 3h 0m 0s\"", StringComparison.Ordinal)); }