[InlineData(3, 0, 3)] // We have 0 locations public void BinManagerFromOther(int prevLocationsPerBin, int amountOfLocations, int currLocationsPerBin) { var(manager, locations) = CreateAndValidate(prevLocationsPerBin, amountOfLocations); var bytes = manager.Serialize(); var deserializedManager = BinManager.CreateFromSerialized(bytes, currLocationsPerBin, _clock, TimeSpan.FromHours(1)); ValidateBalanced(deserializedManager, locations); }
[InlineData(3, 1000, 10)] // Start with large amount of machines public void BinManagerSerializeDeserialize(int locationsPerBin, int initialAmountOfLocations, int locationsToAdd) { var(manager, locations) = CreateAndValidate(locationsPerBin, initialAmountOfLocations); AddLocationsAndValidate(manager, locations, locationsToAdd); var bytes = manager.Serialize(); var deserializedManager = BinManager.CreateFromSerialized(bytes, locationsPerBin, _clock, TimeSpan.FromHours(1)); VerifyMappingsAreEqual(manager, deserializedManager); }
public async Task StressTestForSerializationAsync() { var startLocations = Enumerable.Range(1, 10).Select(i => new MachineId(i)).ToArray(); var locationsToRemove = Enumerable.Range(1, 5).Select(i => new MachineId(i)).ToArray(); for (var repetition = 0; repetition < 10; repetition++) { var manager = new BinManager(locationsPerBin: 3, startLocations, _clock, expiryTime: TimeSpan.FromSeconds(1)); var tasks = locationsToRemove.Select(i => Task.Run(() => manager.RemoveLocation(i))).ToArray(); var serialized = manager.Serialize(); BinManager.CreateFromSerialized(serialized, locationsPerBin: 3, _clock, TimeSpan.FromSeconds(1)); // We want to make sure that deserialization does not fail. await Task.WhenAll(tasks); } }