@SuppressWarnings( "unchecked" ) @Override public <T extends MetricsFactory> T createFactory( Class<T> factoryType ) { if( factoryType.equals( MetricsCounterFactory.class ) ) { return (T) createMetricsCounterFactory(); } else if( factoryType.equals( MetricsGaugeFactory.class ) ) { return (T) createMetricsGaugeFactory(); } else if( factoryType.equals( MetricsHealthCheckFactory.class ) ) { return (T) createMetricsHealthCheckFactory(); } else if( factoryType.equals( MetricsHistogramFactory.class ) ) { return (T) createMetricsHistogramFactory(); } else if( factoryType.equals( MetricsMeterFactory.class ) ) { return (T) createMetricsMeterFactory(); } else if( factoryType.equals( MetricsTimerFactory.class ) ) { return (T) createMetricsTimerFactory(); } throw new MetricsNotSupportedException( factoryType, getClass() ); }
@Test public void givenMetricsProviderWithoutSupportForHealthCheckWhenRequestingHealthCheckExpectDefaultNullImplementation() throws Exception { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsHealthCheckFactory factory = underTest.createFactory( MetricsHealthCheckFactory.class ); MetricsHealthCheck test = factory.registerHealthCheck( "test", new MetricsHealthCheck() { @Override public Result check() throws Exception { throw new RuntimeException( "Not healthy!!!" ); } } ); test.check(); // Should not throw an exception, as it should have been replaced by a null implementation. }
@SuppressWarnings( "unchecked" ) @Override public <T extends MetricsFactory> T createFactory( Class<T> factoryType ) { if( factoryType.equals( MetricsCounterFactory.class ) ) { return (T) createMetricsCounterFactory(); } else if( factoryType.equals( MetricsGaugeFactory.class ) ) { return (T) createMetricsGaugeFactory(); } else if( factoryType.equals( MetricsHealthCheckFactory.class ) ) { return (T) createMetricsHealthCheckFactory(); } else if( factoryType.equals( MetricsHistogramFactory.class ) ) { return (T) createMetricsHistogramFactory(); } else if( factoryType.equals( MetricsMeterFactory.class ) ) { return (T) createMetricsMeterFactory(); } else if( factoryType.equals( MetricsTimerFactory.class ) ) { return (T) createMetricsTimerFactory(); } throw new MetricsNotSupportedException( factoryType, getClass() ); }
@Test public void givenMetricsProviderWithoutSupportForCounterWhenRequestingCounterExpectDefaultNullImplementation() { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsCounterFactory factory = underTest.createFactory( MetricsCounterFactory.class ); MetricsCounter test = factory.createCounter( "test" ); test.increment(); test.decrement(); }
@Test public void givenMetricsProviderWithoutSupportForTimerWhenRequestingTimerExpectDefaultNullImplementation() { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsTimerFactory factory = underTest.createFactory( MetricsTimerFactory.class ); MetricsTimer test = factory.createTimer( "test" ); test.start().stop(); } }
@Test public void givenMetricsProviderWithoutSupportForHistogramWhenRequestingHistogramExpectDefaultNullImplementation() { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsHistogramFactory factory = underTest.createFactory( MetricsHistogramFactory.class ); MetricsHistogram test = factory.createHistogram( "test" ); test.update( 5L ); test.update( 5L ); test.update( 5L ); }
@Test public void givenMetricsProviderWithoutSupportForMeterWhenRequestingMeterExpectDefaultNullImplementation() { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsMeterFactory factory = underTest.createFactory( MetricsMeterFactory.class ); MetricsMeter test = factory.createMeter( "test" ); test.mark(); test.mark(); test.mark(); }
@Test public void givenMetricsProviderWithoutSupportForGaugeWhenRequestingGaugeExpectDefaultNullImplementation() { MetricsProvider underTest = new MetricsProviderAdapter(); MetricsGaugeFactory factory = underTest.createFactory( MetricsGaugeFactory.class ); MetricsGauge<Instant> test = factory.registerGauge( "test", new MetricsGauge<Instant>() { @Override public Instant value() { return SystemTime.now(); } } ); assertNull( test.value() ); }