示例#1
0
    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);
    }
示例#2
0
    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);
    }
示例#3
0
    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);
    }
示例#4
0
    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);
    }
示例#5
0
    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;
    }
示例#6
0
    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));
    }