Ejemplo n.º 1
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 = new(coordinatorParameters, NewMockRpcClient(), new CoinJoinIdStore());
        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 = new(coordinatorParameters2, NewMockRpcClient(), new CoinJoinIdStore());
        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));
    }
 public DefaultValueTimeSpanAttribute(string json) : base(TimeSpanJsonConverter.Parse(json))
 {
 }