Fixed availability regex for all access in the config.
This is an important change to correctly determine required access of
stored VC.
Change-Id: Id820a281dff6a036a4180376fb6362cddb2c1cab
diff --git a/Changes b/Changes
index 4c1e608..b2ca454 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,9 @@
- Add source to QueryReferenceRewrite (#783) and VirtualCorpusRewrite (#780)
- Use operation:override in virtual corpus (reference) rewrite (#780)
- Use operation:override in query reference rewrite (#783)
+- Fixed availability regex for all access in the config (important to correctly
+ determine required access of stored VC)
+
# version 0.75
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
index 4cc98b0..8cf0b2b 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/AvailabilityTest.java
@@ -5,6 +5,8 @@
import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.net.HttpHeaders;
import jakarta.ws.rs.ProcessingException;
@@ -13,11 +15,15 @@
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.utils.JsonUtils;
public class AvailabilityTest extends SpringJerseyTest {
+
+ @Autowired
+ public FullConfiguration config;
private void checkAndFree (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
@@ -100,37 +106,34 @@
private void checkAndAllWithACA (String json) throws KustvaktException {
JsonNode node = JsonUtils.readTree(json);
- assertNotNull(node);
- assertEquals(node.at("/collection/operation").asText(),
- "operation:and");
- assertEquals(node.at("/collection/rewrites/0/operation").asText(),
- "operation:injection");
- assertEquals(node.at("/collection/rewrites/0/scope").asText(),
- "availability(ALL)");
- assertEquals(node.at("/collection/operands/1/match").asText(),
- "match:eq");
- assertEquals(node.at("/collection/operands/1/type").asText(),
- "type:regex");
- assertEquals(node.at("/collection/operands/1/key").asText(),
- "availability");
- assertEquals(node.at("/collection/operands/1/value").asText(), "ACA.*");
+ System.out.println(node.toPrettyString());
+ assertEquals("operation:and",
+ node.at("/collection/operation").asText());
+ assertEquals("operation:injection",
+ node.at("/collection/rewrites/0/operation").asText());
+ assertEquals("availability(ALL)",
+ node.at("/collection/rewrites/0/scope").asText());
+ assertEquals("match:eq",
+ node.at("/collection/operands/1/match").asText());
+ assertEquals("type:regex",
+ node.at("/collection/operands/1/type").asText());
+ assertEquals("availability",
+ node.at("/collection/operands/1/key").asText());
+ assertEquals("ACA.*", node.at("/collection/operands/1/value").asText());
node = node.at("/collection/operands/0");
- assertEquals(node.at("/operands/0/match").asText(), "match:eq");
- assertEquals(node.at("/operands/0/type").asText(), "type:regex");
- assertEquals(node.at("/operands/0/key").asText(), "availability");
- assertEquals(node.at("/operands/0/value").asText(), "CC.*");
- assertEquals(
- node.at("/operands/1/operands/1/operands/0/match").asText(),
- "match:eq");
- assertEquals(
- node.at("/operands/1/operands/1/operands/0/value").asText(),
- "QAO-NC");
- assertEquals(
- node.at("/operands/1/operands/1/operands/1/match").asText(),
- "match:eq");
- assertEquals(
- node.at("/operands/1/operands/1/operands/1/value").asText(),
- "QAO.*");
+ assertEquals("match:eq", node.at("/operands/0/match").asText());
+ assertEquals("type:regex", node.at("/operands/0/type").asText());
+ assertEquals("availability", node.at("/operands/0/key").asText());
+ assertEquals(config.getFreeOnlyRegex(),
+ node.at("/operands/0/value").asText());
+ assertEquals("match:eq",
+ node.at("/operands/1/operands/1/operands/0/match").asText());
+ assertEquals("QAO-NC",
+ node.at("/operands/1/operands/1/operands/0/value").asText());
+ assertEquals("match:eq",
+ node.at("/operands/1/operands/1/operands/1/match").asText());
+ assertEquals(config.getAllOnlyRegex(),
+ node.at("/operands/1/operands/1/operands/1/value").asText());
}
private Response searchQuery (String collectionQuery) {
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
index 132f6b0..796dc14 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/SearchControllerTest.java
@@ -19,6 +19,7 @@
import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.config.SpringJerseyTest;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
@@ -33,7 +34,7 @@
public class SearchControllerTest extends SpringJerseyTest {
@Autowired
- private KustvaktConfiguration config;
+ private FullConfiguration config;
private JsonNode requestSearchWithFields (String fields)
throws KustvaktException {
@@ -252,13 +253,14 @@
assertNotNull(node);
assertNotEquals(0, node.path("matches").size());
assertEquals("koral:docGroup", node.at("/collection/@type").asText());
- assertEquals("CC.*", node.at("/collection/operands/0/value").asText());
+ assertEquals(config.getFreeOnlyRegex(),
+ node.at("/collection/operands/0/value").asText());
assertEquals("ACA.*",
node.at("/collection/operands/1/operands/0/value").asText());
assertEquals("QAO-NC",
node.at("/collection/operands/1/operands/1/operands/0/value")
.asText());
- assertEquals("QAO.*",
+ assertEquals(config.getAllOnlyRegex(),
node.at("/collection/operands/1/operands/1/operands/1/value")
.asText());
assertEquals("operation:or", node.at("/collection/operation").asText());
diff --git a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
index b4c44d8..fad276a 100644
--- a/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/controller/vc/VirtualCorpusControllerTest.java
@@ -322,6 +322,53 @@
}
@Test
+ public void testDetermineCorpusAccess () throws KustvaktException {
+ String vcName = "vc-all";
+ createPrivateVC(testUser, vcName);
+ JsonNode node = listVC(testUser);
+ assertEquals(2, node.size());
+
+ node = node.get(1);
+ assertEquals(vcName, node.get("name").asText());
+ assertEquals("ALL", node.get("requiredAccess").asText());
+ deleteVC(vcName, testUser, testUser);
+
+
+ vcName = "vc-pub-1";
+ String vcJson = "{\"type\": \"PRIVATE\""
+ + ",\"queryType\": \"VIRTUAL_CORPUS\""
+ + ",\"corpusQuery\": \"availability=/ACA.*/\"}";
+
+ createVC(authHeader, testUser, vcName, vcJson);
+ node = listVC(testUser).get(1);
+ assertEquals(vcName, node.get("name").asText());
+ assertEquals("PUB", node.get("requiredAccess").asText());
+ deleteVC(vcName, testUser, testUser);
+
+ vcName = "vc-pub-2";
+ vcJson = "{\"type\": \"PRIVATE\""
+ + ",\"queryType\": \"VIRTUAL_CORPUS\""
+ + ",\"corpusQuery\": \"availability=QAO-NC\"}";
+
+ createVC(authHeader, testUser, vcName, vcJson);
+ node = listVC(testUser).get(1);
+ assertEquals(vcName, node.get("name").asText());
+ assertEquals("PUB", node.get("requiredAccess").asText());
+ deleteVC(vcName, testUser, testUser);
+
+ vcName = "vc-free";
+ vcJson = "{\"type\": \"PRIVATE\""
+ + ",\"queryType\": \"VIRTUAL_CORPUS\""
+ + ",\"corpusQuery\": \"availability=/CC.*/\"}";
+
+ createVC(authHeader, testUser, vcName, vcJson);
+ node = listVC(testUser).get(1);
+ assertEquals(vcName, node.get("name").asText());
+ assertEquals("FREE", node.get("requiredAccess").asText());
+ deleteVC(vcName, testUser, testUser);
+ }
+
+ @Test
public void testMaxNumberOfVC () throws KustvaktException {
String json = "{\"type\": \"PRIVATE\""
+ ",\"queryType\": \"VIRTUAL_CORPUS\""
diff --git a/src/test/resources/kustvakt-test.conf b/src/test/resources/kustvakt-test.conf
index ddc8512..d40c39f 100644
--- a/src/test/resources/kustvakt-test.conf
+++ b/src/test/resources/kustvakt-test.conf
@@ -56,7 +56,9 @@
#
availability.regex.free = CC.*
availability.regex.public = ACA.*|QAO-NC
-availability.regex.all = QAO.*
+# The regex should be specific and make the access distinguishable
+# availability.regex.all = QAO.*
+availability.regex.all = QAO-NC-LOC:ids.*
# options referring to the security module!