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 TestDifferentIpcProvidersWithMemoizationReturnClientsWithExclusiveConnection() { using (var provider1 = new IpcProviderWithMemoization(new MultiplexingSocketBasedIpcProvider())) using (var provider2 = new IpcProviderWithMemoization(new MultiplexingSocketBasedIpcProvider())) { var connectionString = provider1.CreateNewConnectionString(); var config1 = new ClientConfig { MaxConnectRetries = 1 }; var config2 = new ClientConfig { MaxConnectRetries = 2 }; var client1 = provider1.GetClient(connectionString, config1); var client2 = provider2.GetClient(connectionString, config2); Assert.Equal(config1, client1.Config); Assert.Equal(config2, client2.Config); } }
public void TestIpcProviderWithMemoizationReturnsSameClientsForSameMoniker() { using (var provider = new IpcProviderWithMemoization(new MultiplexingSocketBasedIpcProvider())) { var connectionString = provider.CreateNewConnectionString(); var config1 = new ClientConfig { MaxConnectRetries = 1 }; var config2 = new ClientConfig { MaxConnectRetries = 2 }; var client1 = provider.GetClient(connectionString, config1); var client2 = provider.GetClient(connectionString, config2); Assert.Equal(config1, client1.Config); Assert.Equal(config1, client2.Config); Assert.Equal(client1, client2); } }
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); } }
public void TestLoadMoniker() { var mockProvider = new MockProvider(); using (var provider = new IpcProviderWithMemoization(mockProvider)) { // load some monikers var id = Guid.NewGuid().ToString(); var moniker1 = provider.LoadOrCreateMoniker(id); var moniker2 = provider.LoadOrCreateMoniker(id); // assert they are equal and that no underlying moniker was created Assert.Equal(moniker1, moniker2); Assert.Equal(0, mockProvider.NumCreateMonikerCalls); // serialize those monikers provider.RenderConnectionString(moniker1); provider.RenderConnectionString(moniker2); // assert that exactly 1 underlying moniker was created Assert.Equal(1, mockProvider.NumCreateMonikerCalls); Assert.Equal(1, mockProvider.NumRenderConnectionStringCalls); } }