1
2
3
4
5
6
7
8
9
10
11 package psiprobe.controllers.quickcheck;
12
13 import static org.junit.jupiter.api.Assertions.assertEquals;
14 import static org.junit.jupiter.api.Assertions.assertNull;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.when;
17
18 import com.codebox.bean.JavaBeanTester;
19
20 import java.util.List;
21
22 import org.apache.catalina.Context;
23 import org.junit.jupiter.api.Test;
24 import org.springframework.mock.web.MockHttpServletRequest;
25 import org.springframework.mock.web.MockHttpServletResponse;
26 import org.springframework.test.util.ReflectionTestUtils;
27 import org.springframework.web.servlet.ModelAndView;
28
29 import psiprobe.TomcatContainer;
30 import psiprobe.beans.ContainerWrapperBean;
31 import psiprobe.beans.ResourceResolver;
32 import psiprobe.model.ApplicationResource;
33 import psiprobe.model.DataSourceInfo;
34 import psiprobe.model.TomcatTestReport;
35
36
37
38
39 class TomcatAvailabilityControllerTest {
40
41
42
43
44 @Test
45 void javabeanTester() {
46 JavaBeanTester.builder(TomcatAvailabilityController.class)
47 .skip("applicationContext", "supportedMethods").test();
48 }
49
50
51
52
53 @Test
54 void javabeanTesterXml() {
55 JavaBeanTester.builder(TomcatAvailabilityXmlController.class)
56 .skip("applicationContext", "supportedMethods").test();
57 }
58
59 @Test
60 void handleRequestBuildsReportUsingPrivateResources() throws Exception {
61 TomcatAvailabilityController controller = new TomcatAvailabilityController();
62 controller.setViewName("quickcheck");
63
64 ContainerWrapperBean containerWrapper = mock(ContainerWrapperBean.class);
65 ResourceResolver resourceResolver = mock(ResourceResolver.class);
66 TomcatContainer tomcatContainer = mock(TomcatContainer.class);
67 Context firstContext = mock(Context.class);
68 Context secondContext = mock(Context.class);
69
70 when(containerWrapper.getResourceResolver()).thenReturn(resourceResolver);
71 when(containerWrapper.getTomcatContainer()).thenReturn(tomcatContainer);
72 when(resourceResolver.supportsPrivateResources()).thenReturn(true);
73 when(tomcatContainer.findContexts()).thenReturn(List.of(firstContext, secondContext));
74 when(firstContext.getName()).thenReturn("/app1");
75 when(secondContext.getName()).thenReturn("/app2");
76 when(tomcatContainer.getAvailable(firstContext)).thenReturn(true);
77 when(tomcatContainer.getAvailable(secondContext)).thenReturn(false);
78
79 ApplicationResource firstResource = new ApplicationResource();
80 firstResource.setName("jdbc/app1");
81 DataSourceInfo firstInfo = new DataSourceInfo();
82 firstInfo.setMaxConnections(100);
83 firstInfo.setBusyConnections(10);
84 firstResource.setDataSourceInfo(firstInfo);
85
86 ApplicationResource secondResource = new ApplicationResource();
87 secondResource.setName("jdbc/app2");
88 DataSourceInfo secondInfo = new DataSourceInfo();
89 secondInfo.setMaxConnections(100);
90 secondInfo.setBusyConnections(70);
91 secondResource.setDataSourceInfo(secondInfo);
92
93 when(resourceResolver.getApplicationResources(firstContext, containerWrapper))
94 .thenReturn(List.of(firstResource));
95 when(resourceResolver.getApplicationResources(secondContext, containerWrapper))
96 .thenReturn(List.of(secondResource));
97
98 ReflectionTestUtils.setField(controller, "containerWrapper", containerWrapper);
99
100 ModelAndView modelAndView = controller.handleRequest(
101 new MockHttpServletRequest("GET", "/quickcheck.htm"), new MockHttpServletResponse());
102
103 assertEquals("quickcheck", modelAndView.getViewName());
104 TomcatTestReport report = (TomcatTestReport) modelAndView.getModel().get("testReport");
105 assertEquals("/app2", report.getContextName());
106 assertEquals("jdbc/app2", report.getDataSourceName());
107 assertEquals(70, report.getDatasourceUsageScore());
108 assertEquals(TomcatTestReport.TEST_PASSED, report.getDatasourceTest());
109 assertEquals(TomcatTestReport.TEST_PASSED, report.getMemoryTest());
110 assertEquals(TomcatTestReport.TEST_PASSED, report.getFileTest());
111 assertEquals(TomcatTestReport.TEST_FAILED, report.getWebappAvailabilityTest());
112 }
113
114 @Test
115 void handleRequestBuildsReportUsingGlobalResourcesWhenPrivateResourcesUnsupported()
116 throws Exception {
117 TomcatAvailabilityXmlController controller = new TomcatAvailabilityXmlController();
118 controller.setViewName("quickcheck.xml");
119
120 ContainerWrapperBean containerWrapper = mock(ContainerWrapperBean.class);
121 ResourceResolver resourceResolver = mock(ResourceResolver.class);
122
123 when(containerWrapper.getResourceResolver()).thenReturn(resourceResolver);
124 when(resourceResolver.supportsPrivateResources()).thenReturn(false);
125
126 ApplicationResource resource = new ApplicationResource();
127 resource.setName("jdbc/global");
128 DataSourceInfo info = new DataSourceInfo();
129 info.setMaxConnections(100);
130 info.setBusyConnections(25);
131 resource.setDataSourceInfo(info);
132 when(resourceResolver.getApplicationResources()).thenReturn(List.of(resource));
133
134 ReflectionTestUtils.setField(controller, "containerWrapper", containerWrapper);
135
136 ModelAndView modelAndView = controller.handleRequest(
137 new MockHttpServletRequest("GET", "/quickcheck.xml.htm"), new MockHttpServletResponse());
138
139 assertEquals("quickcheck.xml", modelAndView.getViewName());
140 TomcatTestReport report = (TomcatTestReport) modelAndView.getModel().get("testReport");
141 assertEquals("jdbc/global", report.getDataSourceName());
142 assertEquals(25, report.getDatasourceUsageScore());
143 assertEquals(TomcatTestReport.TEST_UNKNOWN, report.getWebappAvailabilityTest());
144 assertNull(report.getContextName());
145 }
146
147 }