diff --git a/apm-webapp/pom.xml b/apm-webapp/pom.xml index 508130066..727acafa9 100644 --- a/apm-webapp/pom.xml +++ b/apm-webapp/pom.xml @@ -37,6 +37,7 @@ 4.5.3 Edgware.SR1 1.6 + 1.2.3 ${project.parent.basedir}/skywalking-ui @@ -94,6 +95,13 @@ ${spring.boot.version} test + + + ch.qos.logback + logback-classic + ${logback-classic.version} + test + diff --git a/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/ApplicationContextTest.java b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/ApplicationContextTest.java new file mode 100644 index 000000000..288daec2e --- /dev/null +++ b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/ApplicationContextTest.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.skywalking.apm.webapp; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * @author kezhenxu94 + */ +@SpringBootTest +@RunWith(SpringRunner.class) +public class ApplicationContextTest { + + @Test + public void contextShouldLoad() { + } + +} \ No newline at end of file diff --git a/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/NotFoundHandlerTest.java b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/NotFoundHandlerTest.java new file mode 100644 index 000000000..5eac560df --- /dev/null +++ b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/NotFoundHandlerTest.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.skywalking.apm.webapp; + +import org.apache.skywalking.apm.webapp.proxy.NotFoundHandler; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +/** + * @author kezhenxu94 + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(value = {NotFoundHandler.class, ClassPathResource.class}) +public class NotFoundHandlerTest { + @Mock + private NotFoundHandler notFoundHandler; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void shouldInternalErrorWhenIndexPageIsMissing() throws Exception { + ClassPathResource mockIndexResource = mock(ClassPathResource.class); + when(mockIndexResource.getInputStream()).thenThrow(new IOException()); + + PowerMockito.whenNew(ClassPathResource.class) + .withArguments("/public/index.html") + .thenReturn(mockIndexResource); + + when(notFoundHandler.renderDefaultPage()).thenCallRealMethod(); + ResponseEntity response = notFoundHandler.renderDefaultPage(); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.INTERNAL_SERVER_ERROR); + } +} diff --git a/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/WebAppTest.java b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/WebAppTest.java new file mode 100644 index 000000000..483327a77 --- /dev/null +++ b/apm-webapp/src/test/java/org/apache/skywalking/apm/webapp/WebAppTest.java @@ -0,0 +1,72 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 org.apache.skywalking.apm.webapp; + +import org.apache.skywalking.apm.webapp.proxy.NotFoundHandler; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.only; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * @author kezhenxu94 + */ +@WebMvcTest +@RunWith(SpringRunner.class) +public class WebAppTest { + @Autowired + private MockMvc mvc; + @MockBean + private NotFoundHandler notFoundHandler; + + @Test + public void shouldGetStaticResources() throws Exception { + when(notFoundHandler.renderDefaultPage()).thenCallRealMethod(); + + mvc.perform(get("/index.html")) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("SkyWalking"))); + + verify(notFoundHandler, never()).renderDefaultPage(); + } + + @Test + public void shouldRedirectToIndexWhenResourcesIsAbsent() throws Exception { + when(notFoundHandler.renderDefaultPage()).thenCallRealMethod(); + + mvc.perform(get("/absent.html")) + .andDo(print()) + .andExpect(status().isOk()); + + verify(notFoundHandler, only()).renderDefaultPage(); + } +} \ No newline at end of file