37
37
/**
38
38
* Tests for war packaging with Gradle to ensure that only the Servlet container and its
39
39
* dependencies are packaged in WEB-INF/lib-provided
40
- *
40
+ *
41
41
* @author Andy Wilkinson
42
42
*/
43
43
public class WarPackagingTests {
44
44
45
45
private static final String WEB_INF_LIB_PROVIDED_PREFIX = "WEB-INF/lib-provided/" ;
46
46
47
+ private static final String WEB_INF_LIB_PREFIX = "WEB-INF/lib/" ;
48
+
47
49
private static final Set <String > TOMCAT_EXPECTED_IN_WEB_INF_LIB_PROVIDED = new HashSet <String >(
48
- Arrays .asList (WEB_INF_LIB_PROVIDED_PREFIX + "spring-boot-starter-tomcat-" ,
49
- WEB_INF_LIB_PROVIDED_PREFIX + "tomcat-embed-core-" ,
50
- WEB_INF_LIB_PROVIDED_PREFIX + "tomcat-embed-el-" ,
51
- WEB_INF_LIB_PROVIDED_PREFIX + "tomcat-embed-logging-juli-" ));
50
+ Arrays .asList ("spring-boot-starter-tomcat-" , "tomcat-embed-core-" ,
51
+ "tomcat-embed-el-" , "tomcat-embed-logging-juli-" ));
52
52
53
53
private static final Set <String > JETTY_EXPECTED_IN_WEB_INF_LIB_PROVIDED = new HashSet <String >(
54
- Arrays .asList (WEB_INF_LIB_PROVIDED_PREFIX + "spring-boot-starter-jetty-" ,
55
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-util-" ,
56
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-xml-" ,
57
- WEB_INF_LIB_PROVIDED_PREFIX + "javax.servlet-" ,
58
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-continuation-" ,
59
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-io-" ,
60
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-http-" ,
61
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-server-" ,
62
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-security-" ,
63
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-servlet-" ,
64
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-webapp-" ,
65
- WEB_INF_LIB_PROVIDED_PREFIX + "javax.servlet.jsp-" ,
66
- WEB_INF_LIB_PROVIDED_PREFIX + "org.apache.jasper.glassfish-" ,
67
- WEB_INF_LIB_PROVIDED_PREFIX + "javax.servlet.jsp.jstl-" ,
68
- WEB_INF_LIB_PROVIDED_PREFIX
69
- + "org.apache.taglibs.standard.glassfish-" ,
70
- WEB_INF_LIB_PROVIDED_PREFIX + "javax.el-" ,
71
- WEB_INF_LIB_PROVIDED_PREFIX + "com.sun.el-" ,
72
- WEB_INF_LIB_PROVIDED_PREFIX + "org.eclipse.jdt.core-" ,
73
- WEB_INF_LIB_PROVIDED_PREFIX + "jetty-jsp-" ));
54
+ Arrays .asList ("spring-boot-starter-jetty-" , "jetty-util-" , "jetty-xml-" ,
55
+ "javax.servlet-" , "jetty-continuation-" , "jetty-io-" , "jetty-http-" ,
56
+ "jetty-server-" , "jetty-security-" , "jetty-servlet-" ,
57
+ "jetty-webapp-" , "javax.servlet.jsp-" ,
58
+ "org.apache.jasper.glassfish-" , "javax.servlet.jsp.jstl-" ,
59
+ "org.apache.taglibs.standard.glassfish-" , "javax.el-" , "com.sun.el-" ,
60
+ "org.eclipse.jdt.core-" , "jetty-jsp-" ));
74
61
75
62
private static final String BOOT_VERSION = ManagedDependencies .get ()
76
63
.find ("spring-boot" ).getVersion ();
@@ -84,24 +71,32 @@ public static void createProject() throws IOException {
84
71
85
72
@ Test
86
73
public void onlyTomcatIsPackackedInWebInfLibProvided () throws IOException {
87
- checkWebInfLibProvidedEntriesForServletContainer ("tomcat" ,
74
+ checkWebInfEntriesForServletContainer ("tomcat" ,
88
75
TOMCAT_EXPECTED_IN_WEB_INF_LIB_PROVIDED );
89
76
}
90
77
91
78
@ Test
92
79
public void onlyJettyIsPackackedInWebInfLibProvided () throws IOException {
93
- checkWebInfLibProvidedEntriesForServletContainer ("jetty" ,
80
+ checkWebInfEntriesForServletContainer ("jetty" ,
94
81
JETTY_EXPECTED_IN_WEB_INF_LIB_PROVIDED );
95
82
}
96
83
97
- private void checkWebInfLibProvidedEntriesForServletContainer (
98
- String servletContainer , Set <String > expectedEntries ) throws IOException {
84
+ private void checkWebInfEntriesForServletContainer ( String servletContainer ,
85
+ Set <String > expectedLibProvidedEntries ) throws IOException {
99
86
project .newBuild ()
100
87
.forTasks ("clean" , "build" )
101
88
.withArguments ("-PbootVersion=" + BOOT_VERSION ,
102
89
"-PservletContainer=" + servletContainer ).run ();
103
90
104
91
JarFile war = new JarFile ("target/war-packaging/build/libs/war-packaging.war" );
92
+
93
+ checkWebInfLibProvidedEntries (war , expectedLibProvidedEntries );
94
+
95
+ checkWebInfLibEntries (war , expectedLibProvidedEntries );
96
+ }
97
+
98
+ private void checkWebInfLibProvidedEntries (JarFile war , Set <String > expectedEntries )
99
+ throws IOException {
105
100
Set <String > entries = getWebInfLibProvidedEntries (war );
106
101
107
102
assertEquals (
@@ -118,6 +113,21 @@ private void checkWebInfLibProvidedEntriesForServletContainer(
118
113
+ unexpectedLibProvidedEntries , unexpectedLibProvidedEntries .isEmpty ());
119
114
}
120
115
116
+ private void checkWebInfLibEntries (JarFile war , Set <String > entriesOnlyInLibProvided )
117
+ throws IOException {
118
+ Set <String > entries = getWebInfLibEntries (war );
119
+
120
+ List <String > unexpectedLibEntries = new ArrayList <String >();
121
+ for (String entry : entries ) {
122
+ if (!isExpectedInWebInfLib (entry , entriesOnlyInLibProvided )) {
123
+ unexpectedLibEntries .add (entry );
124
+ }
125
+ }
126
+
127
+ assertTrue ("Found unexpected entries in WEB-INF/lib: " + unexpectedLibEntries ,
128
+ unexpectedLibEntries .isEmpty ());
129
+ }
130
+
121
131
private Set <String > getWebInfLibProvidedEntries (JarFile war ) throws IOException {
122
132
Set <String > webInfLibProvidedEntries = new HashSet <String >();
123
133
Enumeration <JarEntry > entries = war .entries ();
@@ -130,17 +140,42 @@ private Set<String> getWebInfLibProvidedEntries(JarFile war) throws IOException
130
140
return webInfLibProvidedEntries ;
131
141
}
132
142
143
+ private Set <String > getWebInfLibEntries (JarFile war ) throws IOException {
144
+ Set <String > webInfLibEntries = new HashSet <String >();
145
+ Enumeration <JarEntry > entries = war .entries ();
146
+ while (entries .hasMoreElements ()) {
147
+ String name = entries .nextElement ().getName ();
148
+ if (isWebInfLibEntry (name )) {
149
+ webInfLibEntries .add (name );
150
+ }
151
+ }
152
+ return webInfLibEntries ;
153
+ }
154
+
133
155
private boolean isWebInfLibProvidedEntry (String name ) {
134
156
return name .startsWith (WEB_INF_LIB_PROVIDED_PREFIX )
135
157
&& !name .equals (WEB_INF_LIB_PROVIDED_PREFIX );
136
158
}
137
159
160
+ private boolean isWebInfLibEntry (String name ) {
161
+ return name .startsWith (WEB_INF_LIB_PREFIX ) && !name .equals (WEB_INF_LIB_PREFIX );
162
+ }
163
+
138
164
private boolean isExpectedInWebInfLibProvided (String name , Set <String > expectedEntries ) {
139
165
for (String expected : expectedEntries ) {
140
- if (name .startsWith (expected )) {
166
+ if (name .startsWith (WEB_INF_LIB_PROVIDED_PREFIX + expected )) {
141
167
return true ;
142
168
}
143
169
}
144
170
return false ;
145
171
}
172
+
173
+ private boolean isExpectedInWebInfLib (String name , Set <String > unexpectedEntries ) {
174
+ for (String unexpected : unexpectedEntries ) {
175
+ if (name .startsWith (WEB_INF_LIB_PREFIX + unexpected )) {
176
+ return false ;
177
+ }
178
+ }
179
+ return true ;
180
+ }
146
181
}
0 commit comments