Ensure patterns are absolute
[aaa.git] / web / api / src / test / java / org / opendaylight / aaa / web / tests / WebContextApiTest.java
1 /*
2  * Copyright (c) 2018 Red Hat, Inc. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.aaa.web.tests;
9
10 import static org.hamcrest.CoreMatchers.startsWith;
11 import static org.hamcrest.MatcherAssert.assertThat;
12 import static org.hamcrest.Matchers.hasSize;
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertThrows;
15 import static org.junit.Assert.assertTrue;
16 import static org.mockito.Mockito.mock;
17
18 import java.util.Map;
19 import javax.servlet.Filter;
20 import javax.servlet.Servlet;
21 import javax.servlet.ServletContextListener;
22 import org.junit.Ignore;
23 import org.junit.Test;
24 import org.opendaylight.aaa.web.FilterDetails;
25 import org.opendaylight.aaa.web.ServletDetails;
26 import org.opendaylight.aaa.web.WebContext;
27 import org.opendaylight.aaa.web.WebContextBuilder;
28 import org.opendaylight.aaa.web.WebServer;
29
30 /**
31  * Tests for Web Server {@link WebContext} API. These tests don't test an
32  * {@link WebServer} implementation; the purpose is just to compile time check
33  * against the API signatures, notably incl. their generated code.
34  *
35  * @author Michael Vorburger.ch
36  */
37 public class WebContextApiTest {
38     @Test
39     public void testEmptyBuilder() {
40         final WebContextBuilder builder = WebContext.builder();
41         assertThrows(IllegalStateException.class, () -> builder.build());
42     }
43
44     @Test
45     public void testMinimalBuilder() {
46         assertTrue(WebContext.builder().contextPath("test").build().supportsSessions());
47         assertEquals("test", WebContext.builder().contextPath("test").supportsSessions(false).build().contextPath());
48     }
49
50     @Test
51     public void testAddSimpleServlet() {
52         WebContext webContext = WebContext.builder().contextPath("test")
53                 .addServlet(ServletDetails.builder().servlet(mock(Servlet.class)).addUrlPattern("test").build())
54                 .build();
55         assertThat(webContext.servlets(), hasSize(1));
56         ServletDetails firstServletDetail = webContext.servlets().get(0);
57         assertThat(firstServletDetail.name(), startsWith("org.mockito.codegen.Servlet$MockitoMock$"));
58         assertEquals(Map.of(), firstServletDetail.initParams());
59     }
60
61     @Test
62     public void testAddFullServlet() {
63         WebContext.builder().contextPath("test").addServlet(ServletDetails.builder().servlet(mock(Servlet.class))
64                 .addUrlPattern("test").addUrlPattern("another").name("custom").putInitParam("key", "value").build())
65                 .build();
66     }
67
68     @Test
69     public void testAddFilter() {
70         WebContext.builder().contextPath("test")
71             .addFilter(FilterDetails.builder().filter(mock(Filter.class)).addUrlPattern("test").build()).build();
72     }
73
74     @Test
75     public void testAddListener() {
76         assertThat(WebContext.builder().contextPath("test").addListener(mock(ServletContextListener.class)).build()
77                 .listeners(), hasSize(1));
78     }
79
80     @Test
81     public void testContextParam() {
82         assertEquals(Map.of("key", "value"),
83             WebContext.builder().contextPath("test").putContextParam("key", "value").build().contextParams());
84     }
85
86     @Test
87     @Ignore
88     public void testBadContextPath() {
89         // FIXME: this is completely broken usage -- which call is expected to raise the exception?!
90         assertThrows(IllegalArgumentException.class, () -> WebContext.builder().contextPath("test/sub").build());
91         assertThrows(IllegalArgumentException.class, () -> WebContext.builder().contextPath("test space").build());
92         assertThrows(IllegalArgumentException.class, () -> WebContext.builder().contextPath("/test").build());
93         assertThrows(IllegalArgumentException.class, () -> WebContext.builder().contextPath("test/").build());
94     }
95
96     @Test
97     public void testBadServletWithoutAnyURL() {
98         final WebContextBuilder builder = WebContext.builder().contextPath("test")
99                 .addServlet(ServletDetails.builder().servlet(mock(Servlet.class)).build());
100         assertThrows(IllegalArgumentException.class, () -> builder.build());
101     }
102
103     @Test
104     public void testBadFilterWithoutAnyURL() {
105         final WebContextBuilder builder = WebContext.builder().contextPath("test")
106                 .addFilter(FilterDetails.builder().filter(mock(Filter.class)).build());
107         assertThrows(IllegalArgumentException.class, () -> builder.build());
108     }
109 }