public void TestWithThreads(int numServices, int numRequestsPerService) { var ipcProvider = new IpcProviderWithMemoization(IpcFactory.GetProvider()); var ipcMonikers = Enumerable .Range(0, numServices) .Select(_ => ipcProvider.RenderConnectionString(ipcProvider.CreateNewMoniker())) .ToList(); var serverThreads = ipcMonikers .Select(moniker => CreateThreadForCommand($"{StartNoDropCmd.Name} --{Moniker.LongName} " + moniker, null)) .ToList(); Start(serverThreads); Thread.Sleep(100); var clientThreads = GetClientThreads(ipcProvider, ipcMonikers, numServices, numRequestsPerService, $"{PingDaemonCmd.Name} --{Moniker.LongName} <moniker>"); Start(clientThreads); Join(clientThreads); var serverShutdownThreads = GetClientThreads(ipcProvider, ipcMonikers, numServices, 1, $"{StopDaemonCmd.Name} --{Moniker.LongName} <moniker>"); Start(serverShutdownThreads); Join(serverShutdownThreads); Join(serverThreads); }
public async Task TestWithThreadsAsync(int numServices, int numRequestsPerService) { var ipcProvider = new IpcProviderWithMemoization(IpcFactory.GetProvider()); var ipcMonikers = Enumerable .Range(0, numServices) .Select(_ => ipcProvider.RenderConnectionString(ipcProvider.CreateNewMoniker())) .ToList(); var serverTasks = ipcMonikers .Select(moniker => CreateTaskForCommand($"{StartNoDropCmd.Name} --{Moniker.LongName} " + moniker, null)) .ToList(); // make sure that the daemons are running await Task.Delay(200); var clientThreads = GetClientTasks(ipcProvider, ipcMonikers, numRequestsPerService, $"{PingDaemonCmd.Name} --{Moniker.LongName} <moniker>"); await Task.WhenAll(clientThreads); var serverShutdownThreads = GetClientTasks(ipcProvider, ipcMonikers, 1, $"{StopDaemonCmd.Name} --{Moniker.LongName} <moniker>"); await Task.WhenAll(serverShutdownThreads); await Task.WhenAll(serverTasks); }
public void TestCreateMoniker() { var mockProvider = new MockProvider(); using (var provider = new IpcProviderWithMemoization(mockProvider)) { // create some monikers var moniker1 = provider.CreateNewMoniker(); var moniker2 = provider.CreateNewMoniker(); // assert they are not equal and that no underlying moniker was created Assert.NotEqual(moniker1, moniker2); Assert.Equal(0, mockProvider.NumCreateMonikerCalls); // serialize those monikers provider.RenderConnectionString(moniker1); provider.RenderConnectionString(moniker2); // assert that exactly 2 underlying monikers were created Assert.Equal(2, mockProvider.NumCreateMonikerCalls); Assert.Equal(2, mockProvider.NumRenderConnectionStringCalls); } }