Search in sources :

Example 11 with QueryException

use of org.apache.druid.query.QueryException in project druid by druid-io.

the class AsyncQueryForwardingServletTest method testHandleExceptionWithFilterEnabledButMessageMatchAllowedRegex.

@Test
public void testHandleExceptionWithFilterEnabledButMessageMatchAllowedRegex() throws Exception {
    String errorMessage = "test exception message";
    ObjectMapper mockMapper = Mockito.mock(ObjectMapper.class);
    HttpServletResponse response = Mockito.mock(HttpServletResponse.class);
    ServletOutputStream outputStream = Mockito.mock(ServletOutputStream.class);
    Mockito.when(response.getOutputStream()).thenReturn(outputStream);
    final AsyncQueryForwardingServlet servlet = new AsyncQueryForwardingServlet(new MapQueryToolChestWarehouse(ImmutableMap.of()), mockMapper, TestHelper.makeSmileMapper(), null, null, null, new NoopServiceEmitter(), new NoopRequestLogger(), new DefaultGenericQueryMetricsFactory(), new AuthenticatorMapper(ImmutableMap.of()), new Properties(), new ServerConfig() {

        @Override
        public boolean isShowDetailedJettyErrors() {
            return true;
        }

        @Override
        public ErrorResponseTransformStrategy getErrorResponseTransformStrategy() {
            return new AllowedRegexErrorResponseTransformStrategy(ImmutableList.of("test .*"));
        }
    });
    Exception testException = new IllegalStateException(errorMessage);
    servlet.handleException(response, mockMapper, testException);
    ArgumentCaptor<Exception> captor = ArgumentCaptor.forClass(Exception.class);
    Mockito.verify(mockMapper).writeValue(ArgumentMatchers.eq(outputStream), captor.capture());
    Assert.assertTrue(captor.getValue() instanceof QueryException);
    Assert.assertEquals(QueryInterruptedException.UNKNOWN_EXCEPTION, ((QueryException) captor.getValue()).getErrorCode());
    Assert.assertEquals(errorMessage, captor.getValue().getMessage());
    Assert.assertNull(((QueryException) captor.getValue()).getErrorClass());
    Assert.assertNull(((QueryException) captor.getValue()).getHost());
}
Also used : ServletOutputStream(javax.servlet.ServletOutputStream) HttpServletResponse(javax.servlet.http.HttpServletResponse) NoopRequestLogger(org.apache.druid.server.log.NoopRequestLogger) NoopServiceEmitter(org.apache.druid.server.metrics.NoopServiceEmitter) Properties(java.util.Properties) QueryException(org.apache.druid.query.QueryException) QueryInterruptedException(org.apache.druid.query.QueryInterruptedException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) IOException(java.io.IOException) AuthenticatorMapper(org.apache.druid.server.security.AuthenticatorMapper) ServerConfig(org.apache.druid.server.initialization.ServerConfig) QueryException(org.apache.druid.query.QueryException) ErrorResponseTransformStrategy(org.apache.druid.common.exception.ErrorResponseTransformStrategy) AllowedRegexErrorResponseTransformStrategy(org.apache.druid.common.exception.AllowedRegexErrorResponseTransformStrategy) MapQueryToolChestWarehouse(org.apache.druid.query.MapQueryToolChestWarehouse) AllowedRegexErrorResponseTransformStrategy(org.apache.druid.common.exception.AllowedRegexErrorResponseTransformStrategy) DefaultGenericQueryMetricsFactory(org.apache.druid.query.DefaultGenericQueryMetricsFactory) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) BaseJettyTest(org.apache.druid.server.initialization.BaseJettyTest) Test(org.junit.Test)

Example 12 with QueryException

use of org.apache.druid.query.QueryException in project druid by druid-io.

the class ITSqlCancelTest method testCancelValidQuery.

@Test
public void testCancelValidQuery() throws Exception {
    final String queryId = "sql-cancel-test";
    final List<Future<StatusResponseHolder>> queryResponseFutures = new ArrayList<>();
    for (int i = 0; i < NUM_QUERIES; i++) {
        queryResponseFutures.add(sqlClient.queryAsync(sqlHelper.getQueryURL(config.getRouterUrl()), new SqlQuery(QUERY, null, false, false, false, ImmutableMap.of(BaseQuery.SQL_QUERY_ID, queryId), null)));
    }
    // Wait until the sqlLifecycle is authorized and registered
    Thread.sleep(1000);
    final HttpResponseStatus responseStatus = sqlClient.cancelQuery(sqlHelper.getCancelUrl(config.getRouterUrl(), queryId), 1000);
    if (!responseStatus.equals(HttpResponseStatus.ACCEPTED)) {
        throw new RE("Failed to cancel query [%s]. Response code was [%s]", queryId, responseStatus);
    }
    for (Future<StatusResponseHolder> queryResponseFuture : queryResponseFutures) {
        final StatusResponseHolder queryResponse = queryResponseFuture.get(1, TimeUnit.SECONDS);
        if (!queryResponse.getStatus().equals(HttpResponseStatus.INTERNAL_SERVER_ERROR)) {
            throw new ISE("Query is not canceled after cancel request");
        }
        QueryException queryException = jsonMapper.readValue(queryResponse.getContent(), QueryException.class);
        if (!QueryInterruptedException.QUERY_CANCELLED.equals(queryException.getErrorCode())) {
            throw new ISE("Expected error code [%s], actual [%s]", QueryInterruptedException.QUERY_CANCELLED, queryException.getErrorCode());
        }
    }
}
Also used : QueryException(org.apache.druid.query.QueryException) SqlQuery(org.apache.druid.sql.http.SqlQuery) RE(org.apache.druid.java.util.common.RE) HttpResponseStatus(org.jboss.netty.handler.codec.http.HttpResponseStatus) ArrayList(java.util.ArrayList) Future(java.util.concurrent.Future) StatusResponseHolder(org.apache.druid.java.util.http.client.response.StatusResponseHolder) ISE(org.apache.druid.java.util.common.ISE) Test(org.testng.annotations.Test)

Example 13 with QueryException

use of org.apache.druid.query.QueryException in project druid by druid-io.

the class QueryResourceTest method testResourceLimitExceeded.

@Test
public void testResourceLimitExceeded() throws IOException {
    ByteArrayInputStream badQuery = EasyMock.createMock(ByteArrayInputStream.class);
    EasyMock.expect(badQuery.read(EasyMock.anyObject(), EasyMock.anyInt(), EasyMock.anyInt())).andThrow(new ResourceLimitExceededException("You require too much of something"));
    EasyMock.replay(badQuery, testServletRequest);
    Response response = queryResource.doPost(badQuery, null, /*pretty*/
    testServletRequest);
    Assert.assertNotNull(response);
    Assert.assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus());
    QueryException e = jsonMapper.readValue((byte[]) response.getEntity(), QueryException.class);
    Assert.assertEquals(ResourceLimitExceededException.ERROR_CODE, e.getErrorCode());
    Assert.assertEquals(ResourceLimitExceededException.class.getName(), e.getErrorClass());
}
Also used : Response(javax.ws.rs.core.Response) BadJsonQueryException(org.apache.druid.query.BadJsonQueryException) QueryException(org.apache.druid.query.QueryException) ResourceLimitExceededException(org.apache.druid.query.ResourceLimitExceededException) ByteArrayInputStream(java.io.ByteArrayInputStream) Test(org.junit.Test)

Example 14 with QueryException

use of org.apache.druid.query.QueryException in project druid by druid-io.

the class QueryResourceTest method testUnsupportedQueryThrowsException.

@Test
public void testUnsupportedQueryThrowsException() throws IOException {
    String errorMessage = "This will be support in Druid 9999";
    ByteArrayInputStream badQuery = EasyMock.createMock(ByteArrayInputStream.class);
    EasyMock.expect(badQuery.read(EasyMock.anyObject(), EasyMock.anyInt(), EasyMock.anyInt())).andThrow(new QueryUnsupportedException(errorMessage));
    EasyMock.replay(badQuery);
    EasyMock.replay(testServletRequest);
    Response response = queryResource.doPost(badQuery, null, /*pretty*/
    testServletRequest);
    Assert.assertNotNull(response);
    Assert.assertEquals(QueryUnsupportedException.STATUS_CODE, response.getStatus());
    QueryException ex = jsonMapper.readValue((byte[]) response.getEntity(), QueryException.class);
    Assert.assertEquals(errorMessage, ex.getMessage());
    Assert.assertEquals(QueryUnsupportedException.ERROR_CODE, ex.getErrorCode());
}
Also used : Response(javax.ws.rs.core.Response) BadJsonQueryException(org.apache.druid.query.BadJsonQueryException) QueryException(org.apache.druid.query.QueryException) ByteArrayInputStream(java.io.ByteArrayInputStream) QueryUnsupportedException(org.apache.druid.query.QueryUnsupportedException) Test(org.junit.Test)

Example 15 with QueryException

use of org.apache.druid.query.QueryException in project druid by druid-io.

the class ErrorHandlerTest method testErrorHandlerSanitizesErrorAsExpected.

@Test
public void testErrorHandlerSanitizesErrorAsExpected() {
    ServerConfig serverConfig = Mockito.mock(ServerConfig.class);
    AllowedRegexErrorResponseTransformStrategy emptyAllowedRegexErrorResponseTransformStrategy = new AllowedRegexErrorResponseTransformStrategy(ImmutableList.of());
    Mockito.when(serverConfig.getErrorResponseTransformStrategy()).thenReturn(emptyAllowedRegexErrorResponseTransformStrategy);
    ErrorHandler errorHandler = new ErrorHandler(serverConfig);
    QueryException input = new QueryException("error", "error message", "error class", "host");
    RuntimeException output = errorHandler.sanitize(input);
    Assert.assertNull(output.getMessage());
}
Also used : ServerConfig(org.apache.druid.server.initialization.ServerConfig) QueryException(org.apache.druid.query.QueryException) AllowedRegexErrorResponseTransformStrategy(org.apache.druid.common.exception.AllowedRegexErrorResponseTransformStrategy) Test(org.junit.Test)

Aggregations

QueryException (org.apache.druid.query.QueryException)25 Test (org.junit.Test)22 UnsupportedSQLQueryException (org.apache.druid.sql.calcite.planner.UnsupportedSQLQueryException)13 IOException (java.io.IOException)9 QueryInterruptedException (org.apache.druid.query.QueryInterruptedException)9 ServerConfig (org.apache.druid.server.initialization.ServerConfig)9 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)7 Response (javax.ws.rs.core.Response)7 AllowedRegexErrorResponseTransformStrategy (org.apache.druid.common.exception.AllowedRegexErrorResponseTransformStrategy)7 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)6 Properties (java.util.Properties)6 ServletOutputStream (javax.servlet.ServletOutputStream)6 HttpServletResponse (javax.servlet.http.HttpServletResponse)6 DefaultGenericQueryMetricsFactory (org.apache.druid.query.DefaultGenericQueryMetricsFactory)6 MapQueryToolChestWarehouse (org.apache.druid.query.MapQueryToolChestWarehouse)6 QueryUnsupportedException (org.apache.druid.query.QueryUnsupportedException)6 BaseJettyTest (org.apache.druid.server.initialization.BaseJettyTest)6 NoopRequestLogger (org.apache.druid.server.log.NoopRequestLogger)6 NoopServiceEmitter (org.apache.druid.server.metrics.NoopServiceEmitter)6 AuthenticatorMapper (org.apache.druid.server.security.AuthenticatorMapper)6