Skip to content

Commit ae71daf

Browse files
committed
More edge case testing
1 parent 474bf4d commit ae71daf

File tree

3 files changed

+56
-18
lines changed

3 files changed

+56
-18
lines changed

platform/webapp/src/main/java/org/trellisldp/webapp/AppUtils.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,30 @@
1616
import static java.util.Arrays.asList;
1717
import static java.util.Collections.emptyList;
1818
import static java.util.Objects.isNull;
19+
import static java.util.Optional.empty;
1920
import static java.util.Optional.of;
2021
import static java.util.ServiceLoader.load;
2122
import static org.apache.jena.query.DatasetFactory.createTxnMem;
2223
import static org.apache.jena.query.DatasetFactory.wrap;
2324
import static org.apache.jena.rdfconnection.RDFConnectionFactory.connect;
2425
import static org.apache.jena.tdb2.DatabaseMgr.connectDatasetGraph;
2526

26-
2727
import java.util.Collection;
2828
import java.util.Iterator;
29+
import java.util.Optional;
2930
import java.util.function.Supplier;
3031

3132
import org.apache.jena.rdfconnection.RDFConnection;
33+
import org.apache.tamaya.Configuration;
34+
import org.apache.tamaya.ConfigurationProvider;
3235
import org.trellisldp.api.RuntimeTrellisException;
36+
import org.trellisldp.http.CacheControlFilter;
37+
import org.trellisldp.http.CrossOriginResourceSharingFilter;
3338

3439
final class AppUtils {
3540

41+
private static final Configuration config = ConfigurationProvider.getConfiguration();
42+
3643
public static <T> T loadFirst(final Class<T> service) {
3744
return of(load(service).iterator()).filter(Iterator::hasNext).map(Iterator::next)
3845
.orElseThrow(() -> new RuntimeTrellisException("No loadable " + service.getName() + " on the classpath"));
@@ -46,6 +53,29 @@ public static Collection<String> asCollection(final String value) {
4653
return isNull(value) ? emptyList() : asList(value.trim().split("\\s*,\\s*"));
4754
}
4855

56+
public static Optional<CacheControlFilter> getCacheControlFilter() {
57+
if (config.getOrDefault("trellis.cache.enabled", Boolean.class, false)) {
58+
return of(new CacheControlFilter(
59+
config.getOrDefault("trellis.cache.maxAge", Integer.class, 86400),
60+
config.getOrDefault("trellis.cache.mustRevalidate", Boolean.class, true),
61+
config.getOrDefault("trellis.cache.noCache", Boolean.class, false)));
62+
}
63+
return empty();
64+
}
65+
66+
public static Optional<CrossOriginResourceSharingFilter> getCORSFilter() {
67+
if (config.getOrDefault("trellis.cors.enabled", Boolean.class, false)) {
68+
return of(new CrossOriginResourceSharingFilter(
69+
AppUtils.asCollection(config.get("trellis.cors.allowOrigin")),
70+
AppUtils.asCollection(config.get("trellis.cors.allowMethods")),
71+
AppUtils.asCollection(config.get("trellis.cors.allowHeaders")),
72+
AppUtils.asCollection(config.get("trellis.cors.exposeHeaders")),
73+
false, // <- Allow-Credentials not supported
74+
config.getOrDefault("trellis.cors.maxAge", Integer.class, 180)));
75+
}
76+
return empty();
77+
}
78+
4979
public static RDFConnection getRDFConnection(final String location) {
5080
if (isNull(location)) {
5181
return connect(createTxnMem());

platform/webapp/src/main/java/org/trellisldp/webapp/TrellisApplication.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import org.trellisldp.file.FileBinaryService;
2929
import org.trellisldp.file.FileMementoService;
3030
import org.trellisldp.http.AgentAuthorizationFilter;
31-
import org.trellisldp.http.CacheControlFilter;
32-
import org.trellisldp.http.CrossOriginResourceSharingFilter;
3331
import org.trellisldp.http.LdpResource;
3432
import org.trellisldp.io.JenaIOService;
3533
import org.trellisldp.namespaces.NamespacesJsonContext;
@@ -66,21 +64,8 @@ public TrellisApplication() {
6664
register(new LdpResource(resourceService, ioService, binaryService, agentService, resourceService));
6765
register(new AgentAuthorizationFilter(agentService));
6866

69-
if (config.getOrDefault("trellis.cache.enabled", Boolean.class, false)) {
70-
register(new CacheControlFilter(
71-
config.getOrDefault("trellis.cache.maxAge", Integer.class, 86400),
72-
config.getOrDefault("trellis.cache.mustRevalidate", Boolean.class, true),
73-
config.getOrDefault("trellis.cache.noCache", Boolean.class, false)));
74-
}
67+
AppUtils.getCacheControlFilter().ifPresent(this::register);
68+
AppUtils.getCORSFilter().ifPresent(this::register);
7569

76-
if (config.getOrDefault("trellis.cors.enabled", Boolean.class, false)) {
77-
register(new CrossOriginResourceSharingFilter(
78-
AppUtils.asCollection(config.get("trellis.cors.allowOrigin")),
79-
AppUtils.asCollection(config.get("trellis.cors.allowMethods")),
80-
AppUtils.asCollection(config.get("trellis.cors.allowHeaders")),
81-
AppUtils.asCollection(config.get("trellis.cors.exposeHeaders")),
82-
false, // <- Allow-Credentials not supported
83-
config.getOrDefault("trellis.cors.maxAge", Integer.class, 180)));
84-
}
8570
}
8671
}

platform/webapp/src/test/java/org/trellisldp/webapp/AppUtilsTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,27 @@ public void testRDFConnectionRemoteSSL() {
8989
assertFalse(conn.isClosed());
9090
}
9191

92+
@Test
93+
public void testNoCORSFilter() {
94+
System.getProperties().setProperty("trellis.cors.enabled", "false");
95+
assertFalse(AppUtils.getCORSFilter().isPresent());
96+
System.getProperties().remove("trellis.cors.enabled");
97+
}
98+
99+
@Test
100+
public void testCORSFilter() {
101+
assertTrue(AppUtils.getCORSFilter().isPresent());
102+
}
103+
104+
@Test
105+
public void testNoCacheFilter() {
106+
System.getProperties().setProperty("trellis.cache.enabled", "false");
107+
assertFalse(AppUtils.getCacheControlFilter().isPresent());
108+
System.getProperties().remove("trellis.cache.enabled");
109+
}
110+
111+
@Test
112+
public void testCacheFilter() {
113+
assertTrue(AppUtils.getCacheControlFilter().isPresent());
114+
}
92115
}

0 commit comments

Comments
 (0)