/******************************************************************************* * Copyright 2015 Software Evolution and Architecture Lab, University of Zurich * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package eu.cloudwave.wp5.feedbackhandler.controller; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.EXPECTED_API_KEY; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.EXPECTED_APPLICATION_ID; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.EXPECTED_CLASS_NAME; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.EXPECTED_METHOD_NAME; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.INVALID_API_KEY_MSG; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.INVALID_APPLICATION_ID_MSG; import static eu.cloudwave.wp5.feedbackhandler.controller.mocks.NewRelicClientMock.UNKNOWN_METRIC_MSG; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; import eu.cloudwave.wp5.common.constants.Headers; import eu.cloudwave.wp5.common.constants.Params; import eu.cloudwave.wp5.common.constants.Urls; import eu.cloudwave.wp5.common.dto.RestRequestErrorDto; import eu.cloudwave.wp5.common.error.ErrorType; import eu.cloudwave.wp5.feedbackhandler.tests.fakes.DtoStubs; @ContextConfiguration(locations = { "/spring-newrelic-controller-integration-test.xml" }) public class NewRelicControllerIntegrationTest extends AbstractBaseControllerIntegrationTest { private static final String INVALID_API_KEY = "1"; private static final String INVALID_APPLICATION_ID = "1"; private static final String UNKNOWN_CLASS_NAME = "unknown.Class"; private static final String UNKNOWN_METHOD_NAME = "unknownMethod"; private static final String SLASH = "/"; @Test public void testSummarizeOk() throws Exception { final MockHttpServletRequestBuilder requestBuilder = getSummarizeRequestBuilder(EXPECTED_API_KEY, EXPECTED_APPLICATION_ID, EXPECTED_CLASS_NAME, EXPECTED_METHOD_NAME); assertObjectResponseOk(requestBuilder, DtoStubs.METHOD_INFO_SUMARIZED); } @Test public void testSummarizeWithInvalidApiKey() throws Exception { final MockHttpServletRequestBuilder requestBuilder = getSummarizeRequestBuilder(INVALID_API_KEY, EXPECTED_APPLICATION_ID, EXPECTED_CLASS_NAME, EXPECTED_METHOD_NAME); assertObjectResponse(requestBuilder, status().is4xxClientError(), new RestRequestErrorDto(ErrorType.NEW_RELIC__INVALID_API_KEY, INVALID_API_KEY_MSG)); } @Test public void testSummarizeWithInvalidApplicationId() throws Exception { final MockHttpServletRequestBuilder requestBuilder = getSummarizeRequestBuilder(EXPECTED_API_KEY, INVALID_APPLICATION_ID, EXPECTED_CLASS_NAME, EXPECTED_METHOD_NAME); assertObjectResponse(requestBuilder, status().is4xxClientError(), new RestRequestErrorDto(ErrorType.NEW_RELIC__INVALID_APPLICATION_ID, INVALID_APPLICATION_ID_MSG)); } @Test public void testSummarizeWithUnknownMetrics() throws Exception { // unknown class name MockHttpServletRequestBuilder requestBuilder = getSummarizeRequestBuilder(EXPECTED_API_KEY, EXPECTED_APPLICATION_ID, UNKNOWN_CLASS_NAME, EXPECTED_METHOD_NAME); assertObjectResponse(requestBuilder, status().is4xxClientError(), new RestRequestErrorDto(ErrorType.UNKNOWN_METRIC, UNKNOWN_METRIC_MSG)); // unknown method name requestBuilder = getSummarizeRequestBuilder(EXPECTED_API_KEY, EXPECTED_APPLICATION_ID, EXPECTED_CLASS_NAME, UNKNOWN_METHOD_NAME); assertObjectResponse(requestBuilder, status().is4xxClientError(), new RestRequestErrorDto(ErrorType.UNKNOWN_METRIC, UNKNOWN_METRIC_MSG)); } private MockHttpServletRequestBuilder getSummarizeRequestBuilder(final String apiKey, final String applicationId, final String className, final String methodName) { final String url = SLASH + Urls.NEW_RELIC__SUMMARIZE; return get(url).header(Headers.X_API_KEY, apiKey).param(Params.APPLICATION_ID, applicationId).param(Params.CLASS_NAME, className).param(Params.PROCEDURE_NAME, methodName); } }