Aklakan commented on code in PR #3441:
URL: https://github.com/apache/jena/pull/3441#discussion_r2356688273
##########
jena-rdfconnection/src/test/java/org/apache/jena/rdfconnection/TestRDFConnectionHTTP.java:
##########
@@ -20,80 +20,176 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
-import org.junit.jupiter.api.Test;
-
-import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
-import org.apache.jena.query.QueryFactory;
-import org.apache.jena.riot.WebContent;
+import org.apache.jena.rdflink.RDFLink;
+import org.apache.jena.rdflink.RDFLinkHTTP;
import org.apache.jena.sparql.exec.QueryExec;
import org.apache.jena.sparql.exec.http.QueryExecHTTP;
+import org.apache.jena.sparql.exec.http.QueryExecHTTPBuilder;
+import org.apache.jena.sparql.exec.http.QueryExecutionHTTP;
+import org.apache.jena.sparql.exec.http.QueryExecutionHTTPBuilder;
+import org.junit.jupiter.api.Test;
public class TestRDFConnectionHTTP {
- @Test
- public void test_select_01() {
- doAssert(WebContent.contentTypeXML, "SELECT * { ?s a ?o } LIMIT 10");
- }
-
- @Test
- public void test_ask_01() {
- doAssert(WebContent.contentTypeJSON, "ASK { ?s a ?o }");
+ /**
+ * Test whether connection headers are properly passed on to the query
execution.
+ * No query is actually executed.
+ */
+ @Test void test_headers_non_parsed() {
+ try (RDFConnection conn =
RDFConnectionRemote.service("urn:dummy-service")
+ .parseCheckSPARQL(false)
+ .acceptHeaderSelectQuery("s")
+ .acceptHeaderAskQuery("a")
+ .acceptHeaderGraph("g")
+ .acceptHeaderDataset("d")
+ .build()) {
+
+ try (QueryExecution qExec = conn.query("dummy query string")) {
+ QueryExecHTTP qe = (QueryExecHTTP)QueryExec.adapt(qExec);
+
+ assertEquals("s", qe.getAcceptHeaderSelect());
+ assertEquals("a", qe.getAcceptHeaderAsk());
+ assertEquals("g", qe.getAcceptHeaderDescribe());
+ assertEquals("g", qe.getAcceptHeaderConstructGraph());
+ assertEquals("d", qe.getAcceptHeaderConstructDataset());
+ }
+ }
}
- @Test
- public void test_constructTriples_01() {
- doAssert(WebContent.contentTypeTurtle, "CONSTRUCT WHERE { ?s a ?o }
LIMIT 10");
+ @Test void test_headers_non_parsed_fallback() {
+ try (RDFConnection conn =
RDFConnectionRemote.service("urn:dummy-service")
+ .parseCheckSPARQL(false)
+ .acceptHeaderQuery("f") // fallback
+ .acceptHeaderSelectQuery(null)
+ .acceptHeaderAskQuery(null)
+ .acceptHeaderGraph(null)
+ .acceptHeaderDataset(null)
+ .build()) {
+
+ try (QueryExecution qExec = conn.query("dummy query string")) {
+ QueryExecHTTP qe = (QueryExecHTTP)QueryExec.adapt(qExec);
+
+ assertEquals("f", qe.getAcceptHeaderSelect());
+ assertEquals("f", qe.getAcceptHeaderAsk());
+ assertEquals("f", qe.getAcceptHeaderDescribe());
+ assertEquals("f", qe.getAcceptHeaderConstructGraph());
+ assertEquals("f", qe.getAcceptHeaderConstructDataset());
+ }
+ }
}
- @Test
- public void test_constructQuads_01() {
- doAssert(WebContent.contentTypeTriG, "CONSTRUCT WHERE { GRAPH ?g{ ?s a
?o } } LIMIT 10");
- }
+ /**
+ * Test whether connection headers are properly passed on to the query
execution.
+ * No query is actually executed.
+ */
+ @Test void test_headers_parsed() {
+ try (RDFLink conn = RDFLinkHTTP.service("urn:dummy-service")
+ .acceptHeaderSelectQuery("s")
+ .acceptHeaderAskQuery("a")
+ .acceptHeaderGraph("g")
+ .acceptHeaderDataset("d")
+ .build()) {
+
+ try (QueryExecHTTP qe = ((QueryExecHTTPBuilder)conn.newQuery())
+ .query("SELECT * { ?s ?p ?o }")
+ .acceptHeaderSelectQuery("x").build()) {
+ assertEquals("x", qe.getAcceptHeaderSelect());
+
+ assertEquals("a", qe.getAcceptHeaderAsk());
+ assertEquals("g", qe.getAcceptHeaderDescribe());
+ assertEquals("g", qe.getAcceptHeaderConstructGraph());
+ assertEquals("d", qe.getAcceptHeaderConstructDataset());
+ }
- @Test
- public void test_describe_01() {
- doAssert(WebContent.contentTypeNTriples, "DESCRIBE <urn:x>");
- }
+ try (QueryExecHTTP qe = ((QueryExecHTTPBuilder)conn.newQuery())
+ .query("ASK { ?s ?p ?o }")
+ .acceptHeaderAskQuery("x").build()) {
+ assertEquals("x", qe.getAcceptHeaderAsk());
- private static RDFConnectionRemoteBuilder configureHeader(Query query,
String header, RDFConnectionRemoteBuilder builder) {
- return switch (query.queryType()) {
- case SELECT -> builder.acceptHeaderSelectQuery(header);
- case CONSTRUCT -> !query.isConstructQuad()
- ? builder.acceptHeaderGraph(header)
- : builder.acceptHeaderDataset(header);
- case DESCRIBE -> builder.acceptHeaderGraph(header);
- case ASK -> builder.acceptHeaderAskQuery(header);
- default -> throw new UnsupportedOperationException("Unhandled query
type for query: " + query);
- };
- }
+ assertEquals("s", qe.getAcceptHeaderSelect());
+ assertEquals("g", qe.getAcceptHeaderDescribe());
+ assertEquals("g", qe.getAcceptHeaderConstructGraph());
+ assertEquals("d", qe.getAcceptHeaderConstructDataset());
+ }
- /** Test whether the constructed QueryExec instance has the expected HTTP
header set */
- private static void doAssert(String expectedHeader, String queryString) {
- Query query = QueryFactory.create(queryString);
+ try (QueryExecHTTP qe = ((QueryExecHTTPBuilder)conn.newQuery())
+ .query("DESCRIBE <urn:x>")
+ .acceptHeaderGraph("x").build()) {
+ assertEquals("x", qe.getAcceptHeaderDescribe());
+ assertEquals("x", qe.getAcceptHeaderConstructGraph());
- try (RDFConnection conn = configureHeader(query, expectedHeader,
RDFConnectionRemote.newBuilder())
- .queryEndpoint("https://www.example.org/sparql") // Should
never be resolved
- .build()) {
- try (QueryExecution qe = conn.query(queryString)) {
- QueryExecHTTP qeh = (QueryExecHTTP)QueryExec.adapt(qe);
- assertEquals(expectedHeader, qeh.getAppProvidedAcceptHeader());
+ assertEquals("s", qe.getAcceptHeaderSelect());
+ assertEquals("a", qe.getAcceptHeaderAsk());
+ assertEquals("d", qe.getAcceptHeaderConstructDataset());
}
- try (QueryExecution qe =
conn.newQuery().query(queryString).build()) {
- QueryExecHTTP qeh = (QueryExecHTTP)QueryExec.adapt(qe);
- assertEquals(expectedHeader, qeh.getAppProvidedAcceptHeader());
+ try (QueryExecHTTP qe = ((QueryExecHTTPBuilder)conn.newQuery())
+ .query("CONSTRUCT WHERE { ?s ?p ?o }")
+ .acceptHeaderGraph("x").build()) {
+ assertEquals("x", qe.getAcceptHeaderConstructGraph());
+ assertEquals("x", qe.getAcceptHeaderDescribe());
+
+ assertEquals("s", qe.getAcceptHeaderSelect());
+ assertEquals("a", qe.getAcceptHeaderAsk());
+ assertEquals("d", qe.getAcceptHeaderConstructDataset());
}
- try (QueryExecution qe = conn.query(query)) {
- QueryExecHTTP qeh = (QueryExecHTTP)QueryExec.adapt(qe);
- assertEquals(expectedHeader, qeh.getAppProvidedAcceptHeader());
+ try (QueryExecHTTP qe = ((QueryExecHTTPBuilder)conn.newQuery())
+ .query("CONSTRUCT WHERE { GRAPH ?g { ?s ?p ?o } }")
+ .acceptHeaderDataset("x").build()) {
+ assertEquals("x", qe.getAcceptHeaderConstructDataset());
+
+ assertEquals("s", qe.getAcceptHeaderSelect());
+ assertEquals("a", qe.getAcceptHeaderAsk());
+ assertEquals("g", qe.getAcceptHeaderDescribe());
+ assertEquals("g", qe.getAcceptHeaderConstructGraph());
}
+ }
+ }
- try (QueryExecution qe = conn.newQuery().query(query).build()) {
- QueryExecHTTP qeh = (QueryExecHTTP)QueryExec.adapt(qe);
- assertEquals(expectedHeader, qeh.getAppProvidedAcceptHeader());
+ @Test void test_headers_parsed_fallback() {
+ try (RDFConnection conn =
RDFConnectionRemote.service("urn:dummy-service")
+ .acceptHeaderQuery("f") // fallback
+ .acceptHeaderSelectQuery(null)
+ .acceptHeaderAskQuery(null)
+ .acceptHeaderGraph(null)
+ .acceptHeaderDataset(null)
+ .build()) {
+
+ try (QueryExecution qExec = conn.newQuery()
+ .query("SELECT * { ?s ?p ?o }")
+ .build()) {
+ QueryExecHTTP qe = (QueryExecHTTP)QueryExec.adapt(qExec);
+ assertEquals("f", qe.getAcceptHeaderSelect());
+
+ assertEquals("f", qe.getAcceptHeaderAsk());
+ assertEquals("f", qe.getAcceptHeaderDescribe());
+ assertEquals("f", qe.getAcceptHeaderConstructGraph());
+ assertEquals("f", qe.getAcceptHeaderConstructDataset());
}
}
}
+
+ /**
+ * Setting an override-header on the builder should set all
+ * headers on the QueryExecHTTP instance to that override.
+ */
+ @Test
+ public void test_override_header() {
+ try (QueryExecutionHTTP qExec =
+ QueryExecutionHTTPBuilder.create()
+ .endpoint("urn:dummy-service")
+ .queryString("SELECT * { ?s ?p ?o }")
+ .acceptHeader("o") // Override header
+ .build() ) {
+ QueryExecHTTP qe = (QueryExecHTTP)QueryExec.adapt(qExec);
+ assertEquals("o", qe.getAppProvidedAcceptHeader());
+ assertEquals("o", qe.getAcceptHeaderSelect());
+ assertEquals("o", qe.getAcceptHeaderAsk());
+ assertEquals("o", qe.getAcceptHeaderDescribe());
+ assertEquals("o", qe.getAcceptHeaderConstructGraph());
+ assertEquals("o", qe.getAcceptHeaderConstructDataset());
+ }
Review Comment:
I think that when setting the override header on the builder, then the
concrete QueryExecHTTP instance should report that header for all query types.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]