private async Task MergeGrainResolverTestsImpl(string defaultPlacementStrategy, bool restartClient, params Type[] blackListedTypes) { SetupAndDeployCluster(defaultPlacementStrategy, blackListedTypes); var delayTimeout = refreshInterval.Add(refreshInterval); // Should fail var exception = Assert.Throws <ArgumentException>(() => this.cluster.GrainFactory.GetGrain <ITestGrain>(0)); Assert.Contains("Cannot find an implementation class for grain interface", exception.Message); // Start a new silo with TestGrain cluster.StartAdditionalSilo(); await Task.Delay(delayTimeout); if (restartClient) { // Disconnect/Reconnect the client await cluster.Client.Close(); cluster.Client.Dispose(); cluster.InitializeClient(); } else { await Task.Delay(clientRefreshDelay.Multiply(3)); } for (var i = 0; i < 5; i++) { // Success var g = this.cluster.GrainFactory.GetGrain <ITestGrain>(i); await g.SetLabel("Hello world"); } // Stop the latest silos cluster.StopSecondarySilos(); await Task.Delay(delayTimeout); if (restartClient) { // Disconnect/Reconnect the client await cluster.Client.Close(); cluster.Client.Dispose(); cluster.InitializeClient(); } else { await Task.Delay(clientRefreshDelay.Multiply(3)); } // Should fail exception = Assert.Throws <ArgumentException>(() => this.cluster.GrainFactory.GetGrain <ITestGrain>(0)); Assert.Contains("Cannot find an implementation class for grain interface", exception.Message); }