1
1
/*
2
- * Copyright 2002-2013 the original author or authors.
2
+ * Copyright 2002-2015 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
28
28
import org .junit .BeforeClass ;
29
29
import org .junit .Test ;
30
30
31
+ import org .springframework .cache .Cache ;
32
+ import org .springframework .cache .concurrent .ConcurrentMapCache ;
31
33
import org .springframework .core .io .ClassPathResource ;
32
34
import org .springframework .core .io .FileSystemResource ;
33
35
import org .springframework .core .io .Resource ;
38
40
39
41
40
42
/**
43
+ * Unit tests for
44
+ * {@link org.springframework.web.servlet.resource.GzipResourceResolver}.
41
45
*
42
46
* @author Jeremy Grelle
43
47
*/
@@ -47,6 +51,8 @@ public class GzipResourceResolverTests {
47
51
48
52
private List <Resource > locations ;
49
53
54
+ private Cache cache ;
55
+
50
56
@ BeforeClass
51
57
public static void createGzippedResources () throws IOException {
52
58
Resource location = new ClassPathResource ("test/" , GzipResourceResolverTests .class );
@@ -71,12 +77,15 @@ public static void createGzippedResources() throws IOException {
71
77
72
78
@ Before
73
79
public void setUp () {
80
+ this .cache = new ConcurrentMapCache ("resourceCache" );
81
+
74
82
Map <String , VersionStrategy > versionStrategyMap = new HashMap <>();
75
83
versionStrategyMap .put ("/**" , new ContentVersionStrategy ());
76
84
VersionResourceResolver versionResolver = new VersionResourceResolver ();
77
85
versionResolver .setStrategyMap (versionStrategyMap );
78
86
79
87
List <ResourceResolver > resolvers = new ArrayList <ResourceResolver >();
88
+ resolvers .add (new CachingResourceResolver (this .cache ));
80
89
resolvers .add (new GzipResourceResolver ());
81
90
resolvers .add (versionResolver );
82
91
resolvers .add (new PathResourceResolver ());
@@ -96,7 +105,7 @@ public void resolveGzippedFile() throws IOException {
96
105
Resource resolved = resolver .resolveResource (request , file , locations );
97
106
98
107
assertEquals (resource .getDescription (), resolved .getDescription ());
99
- assertEquals (new ClassPathResource ("test/" + file ).getFilename (), resolved .getFilename ());
108
+ assertEquals (new ClassPathResource ("test/" + file ).getFilename (), resolved .getFilename ());
100
109
assertTrue ("Expected " + resolved + " to be of type " + EncodedResource .class ,
101
110
resolved instanceof EncodedResource );
102
111
}
@@ -115,4 +124,29 @@ public void resolveFingerprintedGzippedFile() throws IOException {
115
124
assertTrue ("Expected " + resolved + " to be of type " + EncodedResource .class ,
116
125
resolved instanceof EncodedResource );
117
126
}
127
+
128
+ @ Test
129
+ public void resolveFromCacheWithEncodingVariants () throws IOException {
130
+ MockHttpServletRequest request = new MockHttpServletRequest ("GET" , "/js/foo.js" );
131
+ request .addHeader ("Accept-Encoding" , "gzip" );
132
+ String file = "js/foo.js" ;
133
+ String gzFile = file +".gz" ;
134
+ Resource resource = new ClassPathResource ("test/" +file , getClass ());
135
+ Resource gzResource = new ClassPathResource ("test/" +gzFile , getClass ());
136
+
137
+ // resolved resource is now cached in CachingResourceResolver
138
+ Resource resolved = resolver .resolveResource (request , file , locations );
139
+
140
+ assertEquals (gzResource .getDescription (), resolved .getDescription ());
141
+ assertEquals (new ClassPathResource ("test/" + file ).getFilename (), resolved .getFilename ());
142
+ assertTrue ("Expected " + resolved + " to be of type " + EncodedResource .class ,
143
+ resolved instanceof EncodedResource );
144
+
145
+ request = new MockHttpServletRequest ("GET" , "/js/foo.js" );
146
+ resolved = resolver .resolveResource (request , file , locations );
147
+ assertEquals (resource .getDescription (), resolved .getDescription ());
148
+ assertEquals (new ClassPathResource ("test/" + file ).getFilename (), resolved .getFilename ());
149
+ assertFalse ("Expected " + resolved + " to *not* be of type " + EncodedResource .class ,
150
+ resolved instanceof EncodedResource );
151
+ }
118
152
}
0 commit comments