View Javadoc
1   /*
2    * Licensed under the GPL License. You may not use this file except in compliance with the License.
3    * You may obtain a copy of the License at
4    *
5    *   https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
6    *
7    * THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
8    * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
9    * PURPOSE.
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   * The Class TomcatAvailabilityControllerTest.
38   */
39  class TomcatAvailabilityControllerTest {
40  
41    /**
42     * Javabean tester.
43     */
44    @Test
45    void javabeanTester() {
46      JavaBeanTester.builder(TomcatAvailabilityController.class)
47          .skip("applicationContext", "supportedMethods").test();
48    }
49  
50    /**
51     * Javabean tester xml.
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 }