Files
git.stella-ops.org/src/__Libraries/StellaOps.HybridLogicalClock.Tests/HybridLogicalClockTests.Initialize.cs

58 lines
2.2 KiB
C#

// <copyright file="HybridLogicalClockTests.Initialize.cs" company="StellaOps">
// Copyright (c) StellaOps. Licensed under BUSL-1.1.
// </copyright>
using FluentAssertions;
using System.Threading;
using Xunit;
namespace StellaOps.HybridLogicalClock.Tests;
public sealed partial class HybridLogicalClockTests
{
[Fact]
public async Task InitializeFromStateAsync_NoState_ReturnsFalseAsync()
{
var timeProvider = CreateTimeProvider(FixedTime);
var clock = CreateClock(timeProvider);
var result = await clock.InitializeFromStateAsync(CancellationToken.None);
result.Should().BeFalse();
clock.Current.PhysicalTime.Should().Be(0);
clock.Current.LogicalCounter.Should().Be(0);
}
[Fact]
public async Task InitializeFromStateAsync_PersistedAhead_UsesPersistedTimeAsync()
{
var timeProvider = CreateTimeProvider(FixedTime);
var stateStore = new InMemoryHlcStateStore();
var persisted = CreateRemoteTimestamp(FixedTime.AddMilliseconds(10), 3, TestNodeId);
await stateStore.SaveAsync(persisted, CancellationToken.None);
var clock = CreateClock(timeProvider, store: stateStore);
var result = await clock.InitializeFromStateAsync(CancellationToken.None);
result.Should().BeTrue();
clock.Current.PhysicalTime.Should().Be(persisted.PhysicalTime);
clock.Current.LogicalCounter.Should().Be(persisted.LogicalCounter + 1);
}
[Fact]
public async Task InitializeFromStateAsync_PhysicalNowAhead_ResetsCounterAsync()
{
var physicalNow = FixedTime.AddMilliseconds(50);
var timeProvider = CreateTimeProvider(physicalNow);
var stateStore = new InMemoryHlcStateStore();
var persisted = CreateRemoteTimestamp(FixedTime, 7, TestNodeId);
await stateStore.SaveAsync(persisted, CancellationToken.None);
var clock = CreateClock(timeProvider, store: stateStore);
var result = await clock.InitializeFromStateAsync(CancellationToken.None);
result.Should().BeTrue();
clock.Current.PhysicalTime.Should().Be(physicalNow.ToUnixTimeMilliseconds());
clock.Current.LogicalCounter.Should().Be(0);
}
}