use of com.amazon.dataprepper.model.plugin.PluginFactory in project data-prepper by opensearch-project.
the class HTTPSourceTest method testHTTPJsonResponse415.
@Test
public void testHTTPJsonResponse415() {
// Prepare
final int testMaxPendingRequests = 1;
final int testThreadCount = 1;
final int serverTimeoutInMillis = 500;
when(sourceConfig.getRequestTimeoutInMillis()).thenReturn(serverTimeoutInMillis);
when(sourceConfig.getMaxPendingRequests()).thenReturn(testMaxPendingRequests);
when(sourceConfig.getThreadCount()).thenReturn(testThreadCount);
HTTPSourceUnderTest = new HTTPSource(sourceConfig, pluginMetrics, pluginFactory);
// Start the source
HTTPSourceUnderTest.start(testBuffer);
refreshMeasurements();
final RequestHeaders testRequestHeaders = RequestHeaders.builder().scheme(SessionProtocol.HTTP).authority("127.0.0.1:2021").method(HttpMethod.POST).path("/log/ingest").contentType(MediaType.JSON_UTF_8).build();
final HttpData testHttpData = HttpData.ofUtf8("[{\"log\": \"somelog\"}]");
// Fill in the buffer
WebClient.of().execute(testRequestHeaders, testHttpData).aggregate().whenComplete((i, ex) -> assertSecureResponseWithStatusCode(i, HttpStatus.OK)).join();
// Disable client timeout
WebClient testWebClient = WebClient.builder().responseTimeoutMillis(0).build();
// When/Then
testWebClient.execute(testRequestHeaders, testHttpData).aggregate().whenComplete((i, ex) -> assertSecureResponseWithStatusCode(i, HttpStatus.REQUEST_TIMEOUT)).join();
// verify metrics
final Measurement requestReceivedCount = MetricsTestUtil.getMeasurementFromList(requestsReceivedMeasurements, Statistic.COUNT);
Assertions.assertEquals(2.0, requestReceivedCount.getValue());
final Measurement successRequestsCount = MetricsTestUtil.getMeasurementFromList(successRequestsMeasurements, Statistic.COUNT);
Assertions.assertEquals(1.0, successRequestsCount.getValue());
final Measurement requestTimeoutsCount = MetricsTestUtil.getMeasurementFromList(requestTimeoutsMeasurements, Statistic.COUNT);
Assertions.assertEquals(1.0, requestTimeoutsCount.getValue());
final Measurement requestProcessDurationMax = MetricsTestUtil.getMeasurementFromList(requestProcessDurationMeasurements, Statistic.MAX);
final double maxDurationInMillis = 1000 * requestProcessDurationMax.getValue();
Assertions.assertTrue(maxDurationInMillis > serverTimeoutInMillis);
}
use of com.amazon.dataprepper.model.plugin.PluginFactory in project data-prepper by opensearch-project.
the class DataPrepperServerConfigurationTest method testGivenPluginFactoryAndPluginSettingsThenCreateAuthenticationProvider.
@Test
public void testGivenPluginFactoryAndPluginSettingsThenCreateAuthenticationProvider() {
final PluginFactory pluginFactory = mock(PluginFactory.class);
final PluginSetting pluginSetting = mock(PluginSetting.class);
final DataPrepperCoreAuthenticationProvider expected = mock(DataPrepperCoreAuthenticationProvider.class);
when(pluginFactory.loadPlugin(eq(DataPrepperCoreAuthenticationProvider.class), eq(pluginSetting))).thenReturn(expected);
final DataPrepperCoreAuthenticationProvider authenticationProvider = serverConfiguration.authenticationProvider(pluginFactory, pluginSetting);
assertThat(authenticationProvider, is(expected));
}
use of com.amazon.dataprepper.model.plugin.PluginFactory in project data-prepper by opensearch-project.
the class PluginArgumentsContextTest method createArguments_with_pluginFactory_should_return_the_instance_from_the_builder.
@Test
void createArguments_with_pluginFactory_should_return_the_instance_from_the_builder() {
final PluginFactory pluginFactory = mock(PluginFactory.class);
final PluginArgumentsContext objectUnderTest = new PluginArgumentsContext.Builder().withPluginSetting(pluginSetting).withPluginFactory(pluginFactory).build();
assertThat(objectUnderTest.createArguments(new Class[] { PluginFactory.class }), equalTo(new Object[] { pluginFactory }));
}
use of com.amazon.dataprepper.model.plugin.PluginFactory in project data-prepper by opensearch-project.
the class HTTPSourceTest method setUp.
@BeforeEach
public void setUp() {
lenient().when(serverBuilder.annotatedService(any())).thenReturn(serverBuilder);
lenient().when(serverBuilder.http(anyInt())).thenReturn(serverBuilder);
lenient().when(serverBuilder.https(anyInt())).thenReturn(serverBuilder);
lenient().when(serverBuilder.build()).thenReturn(server);
lenient().when(server.start()).thenReturn(completableFuture);
sourceConfig = mock(HTTPSourceConfig.class);
lenient().when(sourceConfig.getPort()).thenReturn(2021);
lenient().when(sourceConfig.getRequestTimeoutInMillis()).thenReturn(10_000);
lenient().when(sourceConfig.getThreadCount()).thenReturn(200);
lenient().when(sourceConfig.getMaxConnectionCount()).thenReturn(500);
lenient().when(sourceConfig.getMaxPendingRequests()).thenReturn(1024);
lenient().when(sourceConfig.hasHealthCheckService()).thenReturn(true);
MetricsTestUtil.initMetrics();
pluginMetrics = PluginMetrics.fromNames(PLUGIN_NAME, TEST_PIPELINE_NAME);
pluginFactory = mock(PluginFactory.class);
final ArmeriaHttpAuthenticationProvider authenticationProvider = mock(ArmeriaHttpAuthenticationProvider.class);
when(pluginFactory.loadPlugin(eq(ArmeriaHttpAuthenticationProvider.class), any(PluginSetting.class))).thenReturn(authenticationProvider);
testBuffer = getBuffer();
HTTPSourceUnderTest = new HTTPSource(sourceConfig, pluginMetrics, pluginFactory);
}
use of com.amazon.dataprepper.model.plugin.PluginFactory in project data-prepper by opensearch-project.
the class HTTPSourceTest method testHTTPJsonResponse429.
@Test
public void testHTTPJsonResponse429() throws InterruptedException {
// Prepare
final Map<String, Object> settings = new HashMap<>();
final int testMaxPendingRequests = 1;
final int testThreadCount = 1;
final int clientTimeoutInMillis = 100;
final int serverTimeoutInMillis = (testMaxPendingRequests + testThreadCount + 1) * clientTimeoutInMillis;
when(sourceConfig.getRequestTimeoutInMillis()).thenReturn(serverTimeoutInMillis);
when(sourceConfig.getMaxPendingRequests()).thenReturn(testMaxPendingRequests);
when(sourceConfig.getThreadCount()).thenReturn(testThreadCount);
HTTPSourceUnderTest = new HTTPSource(sourceConfig, pluginMetrics, pluginFactory);
// Start the source
HTTPSourceUnderTest.start(testBuffer);
refreshMeasurements();
final RequestHeaders testRequestHeaders = RequestHeaders.builder().scheme(SessionProtocol.HTTP).authority("127.0.0.1:2021").method(HttpMethod.POST).path("/log/ingest").contentType(MediaType.JSON_UTF_8).build();
final HttpData testHttpData = HttpData.ofUtf8("[{\"log\": \"somelog\"}]");
// Fill in the buffer
WebClient.of().execute(testRequestHeaders, testHttpData).aggregate().whenComplete((i, ex) -> assertSecureResponseWithStatusCode(i, HttpStatus.OK)).join();
// Send requests to throttle the server when buffer is full
// Set the client timeout to be less than source serverTimeoutInMillis / (testMaxPendingRequests + testThreadCount)
WebClient testWebClient = WebClient.builder().responseTimeoutMillis(clientTimeoutInMillis).build();
for (int i = 0; i < testMaxPendingRequests + testThreadCount; i++) {
CompletionException actualException = Assertions.assertThrows(CompletionException.class, () -> testWebClient.execute(testRequestHeaders, testHttpData).aggregate().join());
assertThat(actualException.getCause(), instanceOf(ResponseTimeoutException.class));
}
// When/Then
testWebClient.execute(testRequestHeaders, testHttpData).aggregate().whenComplete((i, ex) -> assertSecureResponseWithStatusCode(i, HttpStatus.TOO_MANY_REQUESTS)).join();
// Wait until source server timeout a request processing thread
Thread.sleep(serverTimeoutInMillis);
// New request should timeout instead of being rejected
CompletionException actualException = Assertions.assertThrows(CompletionException.class, () -> testWebClient.execute(testRequestHeaders, testHttpData).aggregate().join());
assertThat(actualException.getCause(), instanceOf(ResponseTimeoutException.class));
// verify metrics
final Measurement requestReceivedCount = MetricsTestUtil.getMeasurementFromList(requestsReceivedMeasurements, Statistic.COUNT);
Assertions.assertEquals(testMaxPendingRequests + testThreadCount + 2, requestReceivedCount.getValue());
final Measurement successRequestsCount = MetricsTestUtil.getMeasurementFromList(successRequestsMeasurements, Statistic.COUNT);
Assertions.assertEquals(1.0, successRequestsCount.getValue());
final Measurement rejectedRequestsCount = MetricsTestUtil.getMeasurementFromList(rejectedRequestsMeasurements, Statistic.COUNT);
Assertions.assertEquals(1.0, rejectedRequestsCount.getValue());
}
Aggregations