From 95d659beaab4877243585b20bb8250a95fa3d79f Mon Sep 17 00:00:00 2001 From: Simon Oakes Date: Thu, 12 Mar 2026 13:56:03 +0000 Subject: [PATCH] Add test for basic auth. --- .../epimorphics/lda/sources/SparqlSource.java | 7 ++- .../epimorphics/lda/core/SparqlAuthTest.java | 49 +++++++++++++++++ elda-lda/src/test/resources/auth/api.ttl | 55 +++++++++++++++++++ 3 files changed, 108 insertions(+), 3 deletions(-) create mode 100644 elda-lda/src/test/java/com/epimorphics/lda/core/SparqlAuthTest.java create mode 100644 elda-lda/src/test/resources/auth/api.ttl diff --git a/elda-lda/src/main/java/com/epimorphics/lda/sources/SparqlSource.java b/elda-lda/src/main/java/com/epimorphics/lda/sources/SparqlSource.java index 088f16d6d..781d825c1 100755 --- a/elda-lda/src/main/java/com/epimorphics/lda/sources/SparqlSource.java +++ b/elda-lda/src/main/java/com/epimorphics/lda/sources/SparqlSource.java @@ -50,9 +50,9 @@ public class SparqlSource extends SourceBase implements Source { protected final Lock lock = new LockNone(); - protected final String basicUser; + public final String basicUser; - protected final char[] basicPassword; + public final char[] basicPassword; protected final HttpClient httpClient; @@ -99,10 +99,11 @@ public SparqlSource(Resource ep, AuthMap am) { HttpClient.Builder builder = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1); if (this.basicUser != null) { + PasswordAuthentication pa = new PasswordAuthentication(basicUser, basicPassword); builder.authenticator(new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(basicUser, basicPassword); + return pa; } }); } diff --git a/elda-lda/src/test/java/com/epimorphics/lda/core/SparqlAuthTest.java b/elda-lda/src/test/java/com/epimorphics/lda/core/SparqlAuthTest.java new file mode 100644 index 000000000..28dffdd8c --- /dev/null +++ b/elda-lda/src/test/java/com/epimorphics/lda/core/SparqlAuthTest.java @@ -0,0 +1,49 @@ +package com.epimorphics.lda.core; + +import com.epimorphics.lda.sources.SparqlSource; +import com.epimorphics.lda.specs.APISpec; +import org.apache.jena.rdf.model.Model; +import org.apache.jena.rdf.model.Resource; +import org.apache.jena.util.FileManager; +import org.junit.Before; +import org.junit.Test; + +import java.io.*; + +import static org.apache.jena.rdf.model.ModelFactory.createDefaultModel; +import static org.junit.Assert.*; +import static org.mockito.Mockito.mock; + +public class SparqlAuthTest { + + @Before + public void before() throws Exception { + File authFile = new File("/tmp/elda/test/authz.txt"); + if (authFile.exists()) authFile.delete(); else authFile.getParentFile().mkdirs(); + Writer w = new FileWriter(authFile).append("basic.user=elda\nbasic.password=p455w0rd"); + w.close(); + } + + private Model readFromResource(String path) { + Model model = createDefaultModel(); + try { + try (InputStream input = this.getClass().getResource(path).openStream()) { + model.read(input, "", "TTL"); + } + } catch (IOException ioe) { + fail(ioe.getMessage()); + } + + return model; + } + + @Test + public void test() { + Model model = readFromResource("/auth/api.ttl"); + Resource api = model.getResource("http://www.epimorphics.com/tools/example#api"); + APISpec spec = new APISpec(mock(FileManager.class), api, mock(ModelLoader.class)); + SparqlSource ds = (SparqlSource)spec.getDataSource(); + assertEquals("elda", ds.basicUser); + assertEquals("p455w0rd", new String(ds.basicPassword)); + } +} diff --git a/elda-lda/src/test/resources/auth/api.ttl b/elda-lda/src/test/resources/auth/api.ttl new file mode 100644 index 000000000..5dd727487 --- /dev/null +++ b/elda-lda/src/test/resources/auth/api.ttl @@ -0,0 +1,55 @@ +## Common prefixes. +@prefix rdf: . +@prefix rdfs: . +@prefix owl: . +@prefix foaf: . +@prefix xsd: . +@prefix api: . +@prefix skos: . +@prefix geo: . +@prefix spatialrelations: . +@prefix admingeo: . +@prefix qb: . +@prefix time: . +@prefix interval: . +@prefix dgu: . +@prefix bw: . +@prefix bwsp: . +@prefix bwq: . +@prefix bwq-iss: . +@prefix bw-def: . +@prefix ef-def: . +@prefix dct: . +@prefix t: . +@prefix dgu: . +@prefix void: . +@prefix elda: . +@prefix : . + + + elda:authKey "authz" ; + elda:authFile "/tmp/elda/test/authz.txt" . + +:api + a api:API ; + api:sparqlEndpoint ; + api:endpoint t:bathingWaters ; + elda:encloseDescribe true ; + . + +:default + a api:API ; + api:sparqlEndpoint :sparql; + api:endpoint t:bathingWaters ; + . + +t:bathingWaters + a api:ListEndpoint ; + api:uriTemplate "/doc/bathing-water" ; + api:exampleRequestPath "/doc/bathing-water" ; + api:viewer api:describeViewer; + api:defaultViewer api:describeViewer; + api:selector [ + api:filter "type=BathingWater" ; + # api:sort "samplingPoint.samplePointNotation"; + ] . \ No newline at end of file