public void EnsureThreadPoolInstanceIsTheOneRegisteredWithMetricsPublisherAndThreadPoolCache() { HystrixPlugins.RegisterMetricsPublisher(new MyHystrixMetricsPublisher()); IHystrixThreadPoolKey threadPoolKey = HystrixThreadPoolKeyDefault.AsKey("threadPoolFactoryConcurrencyTest"); IHystrixThreadPool poolOne = new HystrixThreadPoolDefault( threadPoolKey, HystrixThreadPoolOptionsTest.GetUnitTestPropertiesBuilder()); IHystrixThreadPool poolTwo = new HystrixThreadPoolDefault( threadPoolKey, HystrixThreadPoolOptionsTest.GetUnitTestPropertiesBuilder()); Assert.Equal(poolOne.GetScheduler(), poolTwo.GetScheduler()); // Now that we get the threadPool from the metrics object, this will always be equal HystrixMetricsPublisherThreadPoolContainer hystrixMetricsPublisherThreadPool = (HystrixMetricsPublisherThreadPoolContainer)HystrixMetricsPublisherFactory .CreateOrRetrievePublisherForThreadPool(threadPoolKey, null, null); IHystrixTaskScheduler threadPoolExecutor = hystrixMetricsPublisherThreadPool.HystrixThreadPoolMetrics.TaskScheduler; // assert that both HystrixThreadPools share the same ThreadPoolExecutor as the one in HystrixMetricsPublisherThreadPool Assert.True(threadPoolExecutor.Equals(poolOne.GetScheduler()) && threadPoolExecutor.Equals(poolTwo.GetScheduler())); Assert.False(threadPoolExecutor.IsShutdown); // Now the HystrixThreadPool ALWAYS has the same reference to the ThreadPoolExecutor so that it no longer matters which // wins to be inserted into the HystrixThreadPool.Factory.threadPools cache. poolOne.Dispose(); poolTwo.Dispose(); }
public override IHystrixThreadPoolOptions GetThreadPoolOptions(IHystrixThreadPoolKey threadPoolKey, IHystrixThreadPoolOptions builder) { if (builder == null) { builder = HystrixThreadPoolOptionsTest.GetUnitTestPropertiesBuilder(); } return(builder); }
public void TestShutdown() { // other unit tests will probably have run before this so get the count int count = HystrixThreadPoolFactory.threadPools.Count; IHystrixThreadPool pool = HystrixThreadPoolFactory.GetInstance(HystrixThreadPoolKeyDefault.AsKey("threadPoolFactoryTest"), HystrixThreadPoolOptionsTest.GetUnitTestPropertiesBuilder()); Assert.Equal(count + 1, HystrixThreadPoolFactory.threadPools.Count); Assert.False(pool.GetScheduler().IsShutdown); HystrixThreadPoolFactory.Shutdown(); // ensure all pools were removed from the cache Assert.Equal(0, HystrixThreadPoolFactory.threadPools.Count); Assert.True(pool.GetScheduler().IsShutdown); }