@Test public void two_arg_constructor_fails_with_IllegalArgumentException_if_factory_is_null() { // when Throwable ex = catchThrowable(() -> new SignalFxEndpointMetricsHandler(null, metricRegistryMock)); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("SignalFxReporterFactory cannot be null"); }
@Test public void kitchen_sink_constructor_defaults_requestTimerDimensionConfigurator_if_passed_null() { // when SignalFxEndpointMetricsHandler instance = new SignalFxEndpointMetricsHandler( metricMetadataMock, metricRegistryMock, requestTimerBuilderMock, null ); // then assertThat(instance.requestTimerDimensionConfigurator) .isSameAs(DEFAULT_REQUEST_LATENCY_TIMER_DIMENSION_CONFIGURATOR); }
@Test public void three_arg_constructor_fails_with_IllegalArgumentException_if_reportingFrequency_is_null() { // given SignalFxReporter reporterMock = mock(SignalFxReporter.class); wireUpReporterForConstructor(reporterMock); // when Throwable ex = catchThrowable( () -> new SignalFxEndpointMetricsHandler(reporterMock, null, metricRegistryMock) ); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("reportingFrequency cannot be null"); }
@Test public void two_arg_constructor_fails_with_IllegalArgumentException_if_metricRegistry_is_null() { // given SignalFxReporterFactory reporterFactoryMock = mock(SignalFxReporterFactory.class); wireUpReporterFactoryMockForConstructor(reporterFactoryMock, metricRegistryMock); // when Throwable ex = catchThrowable(() -> new SignalFxEndpointMetricsHandler(reporterFactoryMock, null)); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("MetricRegistry cannot be null"); }
@Test public void three_arg_constructor_fails_with_IllegalArgumentException_if_reporter_is_null() { // when Throwable ex = catchThrowable( () -> new SignalFxEndpointMetricsHandler(null, Pair.of(42L, TimeUnit.DAYS), metricRegistryMock) ); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("SignalFxReporter cannot be null"); }
@Test public void three_arg_constructor_fails_with_IllegalArgumentException_if_metricRegistry_is_null() { // given SignalFxReporter reporterMock = mock(SignalFxReporter.class); wireUpReporterForConstructor(reporterMock); // when Throwable ex = catchThrowable( () -> new SignalFxEndpointMetricsHandler(reporterMock, Pair.of(42L, TimeUnit.DAYS), null) ); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("metricRegistry cannot be null"); }
@Test public void kitchen_sink_constructor_sets_fields_as_expected() { // when SignalFxEndpointMetricsHandler instance = new SignalFxEndpointMetricsHandler( metricMetadataMock, metricRegistryMock, requestTimerBuilderMock, dimensionConfiguratorMock ); // then assertThat(instance.metricMetadata).isSameAs(metricMetadataMock); assertThat(instance.metricRegistry).isSameAs(metricRegistryMock); assertThat(instance.requestTimerBuilder).isSameAs(requestTimerBuilderMock); assertThat(instance.requestTimerDimensionConfigurator).isSameAs(dimensionConfiguratorMock); }
@Before public void beforeMethod() { metricMetadataMock = mock(MetricMetadata.class); metricRegistryMock = mock(MetricRegistry.class); requestTimerBuilderMock = mock(MetricBuilder.class); dimensionConfiguratorMock = mock(MetricDimensionConfigurator.class); handler = new SignalFxEndpointMetricsHandler( metricMetadataMock, metricRegistryMock, requestTimerBuilderMock, dimensionConfiguratorMock ); requestInfoMock = mock(RequestInfo.class); responseInfoMock = mock(ResponseInfo.class); httpStateMock = mock(HttpProcessingState.class); endpointMock = mock(Endpoint.class); requestStartTime = Instant.now().minus(42, ChronoUnit.MILLIS); httpMethod = HttpMethod.PATCH; matchingPathTemplate = "/" + UUID.randomUUID().toString(); doReturn(requestStartTime).when(httpStateMock).getRequestStartTime(); doReturn(endpointMock).when(httpStateMock).getEndpointForExecution(); doReturn(httpMethod).when(requestInfoMock).getMethod(); doReturn(matchingPathTemplate).when(httpStateMock).getMatchingPathTemplate(); timerBuilderTaggerMock = mock(BuilderTagger.class); doReturn(timerBuilderTaggerMock).when(metricMetadataMock).forBuilder(requestTimerBuilderMock); doReturn(timerBuilderTaggerMock).when(dimensionConfiguratorMock).setupMetricWithDimensions( eq(timerBuilderTaggerMock), eq(requestInfoMock), eq(responseInfoMock), eq(httpStateMock), anyInt(), anyInt(), anyLong(), any(Endpoint.class), anyString(), anyString(), anyString() ); timerMock = mock(Timer.class); doReturn(timerMock).when(timerBuilderTaggerMock).createOrGet(metricRegistryMock); }
@DataProvider(value = { "true | false | false | signalFxReporterMetricMetadata cannot be null", "false | true | false | metricRegistry cannot be null", "false | false | true | requestTimerBuilder cannot be null" }, splitBy = "\\|") @Test public void kitchen_sink_constructor_fails_with_IllegalArgumentException_if_certain_args_are_null( boolean metadataIsNull, boolean registryIsNull, boolean timerBuilderIsNull, String expectedMessage ) { // given MetricMetadata metricMetadata = (metadataIsNull) ? null : metricMetadataMock; MetricRegistry registry = (registryIsNull) ? null : metricRegistryMock; MetricBuilder<Timer> timerBuilder = (timerBuilderIsNull) ? null : requestTimerBuilderMock; // when Throwable ex = catchThrowable( () -> new SignalFxEndpointMetricsHandler(metricMetadata, registry, timerBuilder, null) ); // then assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage(expectedMessage); }
@DataProvider(value = { "true | false", "false | true" }, splitBy = "\\|") @Test public void two_arg_constructor_fails_with_IllegalArgumentException_if_reporting_frequency_args_are_null( boolean amountIsNull, boolean timeUnitIsNull ) { // given SignalFxReporterFactory reporterFactoryMock = mock(SignalFxReporterFactory.class); wireUpReporterFactoryMockForConstructor(reporterFactoryMock, metricRegistryMock); if (amountIsNull) doReturn(null).when(reporterFactoryMock).getInterval(); if (timeUnitIsNull) doReturn(null).when(reporterFactoryMock).getTimeUnit(); // when Throwable ex = catchThrowable(() -> new SignalFxEndpointMetricsHandler(reporterFactoryMock, metricRegistryMock)); // then if (amountIsNull) { assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("reportingFrequency amount cannot be null"); } if (timeUnitIsNull) { assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("reportingFrequency TimeUnit cannot be null"); } }
@DataProvider(value = { "true | false", "false | true" }, splitBy = "\\|") @Test public void three_arg_constructor_fails_with_IllegalArgumentException_if_reporting_frequency_args_are_null( boolean amountIsNull, boolean timeUnitIsNull ) { // given SignalFxReporter reporterMock = mock(SignalFxReporter.class); wireUpReporterForConstructor(reporterMock); Long amount = (amountIsNull) ? null : 42L; TimeUnit timeUnit = (timeUnitIsNull) ? null : TimeUnit.DAYS; // when Throwable ex = catchThrowable( () -> new SignalFxEndpointMetricsHandler(reporterMock, Pair.of(amount, timeUnit), metricRegistryMock) ); // then if (amountIsNull) { assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("reportingFrequency amount cannot be null"); } if (timeUnitIsNull) { assertThat(ex).isInstanceOf(IllegalArgumentException.class) .hasMessage("reportingFrequency TimeUnit cannot be null"); } }
@Test public void three_arg_constructor_sets_fields_as_expected() { // given SignalFxReporter reporterMock = mock(SignalFxReporter.class); MetricMetadata expectedMetricMetadata = wireUpReporterForConstructor(reporterMock); Pair<Long, TimeUnit> reportingFrequency = Pair.of(42L, TimeUnit.DAYS); // when SignalFxEndpointMetricsHandler instance = new SignalFxEndpointMetricsHandler(reporterMock, reportingFrequency, metricRegistryMock); // then assertThat(instance.metricMetadata).isSameAs(expectedMetricMetadata); assertThat(instance.metricRegistry).isSameAs(metricRegistryMock); assertThat(instance.requestTimerBuilder).isInstanceOf(RollingWindowTimerBuilder.class); RollingWindowTimerBuilder rwtb = (RollingWindowTimerBuilder) instance.requestTimerBuilder; assertThat(rwtb.amount).isEqualTo(reportingFrequency.getLeft()); assertThat(rwtb.timeUnit).isEqualTo(reportingFrequency.getRight()); assertThat(instance.requestTimerDimensionConfigurator) .isSameAs(DEFAULT_REQUEST_LATENCY_TIMER_DIMENSION_CONFIGURATOR); }
@Test public void two_arg_constructor_sets_fields_as_expected() { // given SignalFxReporterFactory reporterFactoryMock = mock(SignalFxReporterFactory.class); Pair<Pair<SignalFxReporter, MetricMetadata>, Pair<Long, TimeUnit>> wiredUpMocksAndData = wireUpReporterFactoryMockForConstructor(reporterFactoryMock, metricRegistryMock); MetricMetadata expectedMetricMetadata = wiredUpMocksAndData.getLeft().getRight(); long expectedReportingInterval = wiredUpMocksAndData.getRight().getLeft(); TimeUnit expectedReportingTimeUnit = wiredUpMocksAndData.getRight().getRight(); // when SignalFxEndpointMetricsHandler instance = new SignalFxEndpointMetricsHandler(reporterFactoryMock, metricRegistryMock); // then assertThat(instance.metricMetadata).isSameAs(expectedMetricMetadata); assertThat(instance.metricRegistry).isSameAs(metricRegistryMock); assertThat(instance.requestTimerBuilder).isInstanceOf(RollingWindowTimerBuilder.class); RollingWindowTimerBuilder rwtb = (RollingWindowTimerBuilder) instance.requestTimerBuilder; assertThat(rwtb.amount).isEqualTo(expectedReportingInterval); assertThat(rwtb.timeUnit).isEqualTo(expectedReportingTimeUnit); assertThat(instance.requestTimerDimensionConfigurator) .isSameAs(DEFAULT_REQUEST_LATENCY_TIMER_DIMENSION_CONFIGURATOR); }