public void RegisterMachineTransitionTests() { var clusterState = new ClusterStateMachine(); var nowUtc = _clock.UtcNow; // During transition, all machines will be added forcefully without regard for the consistency of the data // structure clusterState = clusterState.ForceRegisterMachine(new MachineId(3), MachineLocation.Create("A", 0), nowUtc); clusterState.NextMachineId.Should().Be(4); clusterState = clusterState.ForceRegisterMachine(new MachineId(8), MachineLocation.Create("B", 0), nowUtc); clusterState.NextMachineId.Should().Be(9); clusterState = clusterState.ForceRegisterMachine(new MachineId(16), MachineLocation.Create("C", 0), nowUtc); clusterState.NextMachineId.Should().Be(17); clusterState = clusterState.ForceRegisterMachine(new MachineId(20), MachineLocation.Create("D", 0), nowUtc); clusterState.NextMachineId.Should().Be(21); clusterState = clusterState.ForceRegisterMachine(new MachineId(23), MachineLocation.Create("D", 0), nowUtc); clusterState.NextMachineId.Should().Be(24); // After transition, adding proceeds as usual, by appending to the end basically MachineId n1Id; (clusterState, n1Id) = clusterState.RegisterMachine(MachineLocation.Create("Machine Gets Added After Transition", 0), nowUtc); n1Id.Index.Should().Be(24); clusterState.NextMachineId.Should().Be(25); }