You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2015/12/15 14:01:57 UTC

jena git commit: JENA-1088: Server-side testing of create dataset name

Repository: jena
Updated Branches:
  refs/heads/master 1f25b4d78 -> b177db208


JENA-1088: Server-side testing of create dataset name


Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/b177db20
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/b177db20
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/b177db20

Branch: refs/heads/master
Commit: b177db20843e92151ff76b3dac8560269f69b188
Parents: 1f25b4d
Author: Andy Seaborne <an...@apache.org>
Authored: Tue Dec 15 13:00:03 2015 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Tue Dec 15 13:00:03 2015 +0000

----------------------------------------------------------------------
 .../apache/jena/fuseki/mgt/ActionDatasets.java  | 45 ++++++++-------
 .../java/org/apache/jena/fuseki/TestAdmin.java  | 60 +++++++++++++-------
 .../testing/config-ds-bad-name-1.ttl            | 15 +++++
 .../testing/config-ds-bad-name-2.ttl            | 15 +++++
 .../testing/config-ds-bad-name-3.ttl            | 15 +++++
 .../testing/config-ds-bad-name-4.ttl            | 15 +++++
 6 files changed, 125 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
index 587d22d..217cb7f 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/mgt/ActionDatasets.java
@@ -166,28 +166,31 @@ public class ActionDatasets extends ActionContainerItem {
             if ( object.getDatatype() != null && ! object.getDatatype().equals(XSDDatatype.XSDstring) )
                 action.log.warn(format("[%d] Service name '%s' is not a string", action.id, FmtUtils.stringForRDFNode(object)));
             
-            String datasetName = object.getLexicalForm() ;
-            
-            // ---- Check and canonicalize name.
-            if (  datasetName.isEmpty() ) {
-                action.log.error(format("[%d] Empty dataset name", action.id, datasetName)) ;
-                ServletOps.error(HttpSC.BAD_REQUEST_400, "Empty dataset name") ;
-            }
-            if (  StringUtils.isBlank(datasetName) ) {
-                action.log.error(format("[%d] Whitespace dataset name: '%s'", action.id, datasetName)) ;
-                ServletOps.error(HttpSC.BAD_REQUEST_400, format("Whitespace dataset name: '%s'", datasetName)) ;
+            String datasetPath ;
+            {
+                // As provided.
+                String datasetNameOrig = object.getLexicalForm() ;
+                
+                // ---- Check and canonicalize name.
+                if ( datasetNameOrig.isEmpty() )
+                    ServletOps.error(HttpSC.BAD_REQUEST_400, "Empty dataset name") ;
+                if (  StringUtils.isBlank(datasetNameOrig) )
+                    // Get logged
+                    ServletOps.error(HttpSC.BAD_REQUEST_400, format("Whitespace dataset name: '%s'", datasetNameOrig)) ;
+                
+                String datasetNameTrimmed = datasetNameOrig.trim() ;
+                if ( ! datasetNameTrimmed.equals(datasetNameOrig) )
+                    action.log.warn(format("[%d] Trimming white space: '%s' -> '%s'", action.id, datasetNameOrig, datasetNameTrimmed)) ;
+                if ( datasetNameTrimmed.contains(" ") )
+                    ServletOps.error(HttpSC.BAD_REQUEST_400, format("Bad dataset name (contains spaces) '%s'",datasetNameOrig)) ;
+                if ( datasetNameTrimmed.equals("/") )
+                    ServletOps.error(HttpSC.BAD_REQUEST_400, format("Bad dataset name '%s'",datasetNameOrig)) ;
+                
+                datasetPath = DataAccessPoint.canonical(datasetNameTrimmed) ;
             }
-            
-            String datasetName2 = datasetName ;
-            datasetName = datasetName.trim() ;
-            if ( ! datasetName2.equals(datasetName) )
-                action.log.warn(format("[%d] Trimming white space: '%s'", action.id, datasetName2)) ;
-            if ( datasetName.contains(" ") )
-                ServletOps.error(HttpSC.BAD_REQUEST_400, format("Bad dataset name (contains spaces) '%s'",datasetName)) ;
-            
-            String datasetPath = DataAccessPoint.canonical(datasetName) ;
             action.log.info(format("[%d] Create database : name = %s", action.id, datasetPath)) ;
-            
+//            System.err.println("'"+datasetPath+"'") ;
+//            DataAccessPointRegistry.get().forEach((s,dap)->System.err.println("'"+s+"'")); 
             // ---- Check whether it already exists 
             if ( DataAccessPointRegistry.get().isRegistered(datasetPath) )
                 // And abort.
@@ -196,7 +199,7 @@ public class ActionDatasets extends ActionContainerItem {
             configFile = FusekiEnv.generateConfigurationFilename(datasetPath) ;
             List<String> existing = FusekiEnv.existingConfigurationFile(datasetPath) ;
             if ( ! existing.isEmpty() )
-                ServletOps.error(HttpSC.CONFLICT_409, "Configuration file for "+datasetPath+" already exists") ;
+                ServletOps.error(HttpSC.CONFLICT_409, "Configuration file for '"+datasetPath+"' already exists") ;
 
             // Write to configuration directory.
             try ( OutputStream outCopy = IO.openOutputFile(configFile) ) {

http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
index 2a2e46a..bc02309 100644
--- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
+++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/TestAdmin.java
@@ -55,6 +55,7 @@ public class TestAdmin extends AbstractFusekiTest {
     
     // Name of the dataset in the assembler file.
     static String dsTest = "test-ds2" ;
+    static String fileBase = "testing/" ;
     
     // --- Ping 
     
@@ -130,7 +131,7 @@ public class TestAdmin extends AbstractFusekiTest {
     @Test public void add_delete_dataset_2() {
         checkNotThere(dsTest) ;
 
-        File f = new File("testing/config-ds-1.ttl") ;
+        File f = new File(fileBase+"config-ds-1.ttl") ;
         { 
             org.apache.http.entity.ContentType ct = org.apache.http.entity.ContentType.parse(WebContent.contentTypeTurtle+"; charset="+WebContent.charsetUTF8) ;
             HttpEntity e = new FileEntity(f, ct) ;
@@ -161,6 +162,26 @@ public class TestAdmin extends AbstractFusekiTest {
         deleteDataset(dsTest) ;
     }
     
+    @Test public void add_error_1() {
+        FusekiTest.execWithHttpException(HttpSC.BAD_REQUEST_400, 
+                                         ()-> addTestDataset(fileBase+"config-ds-bad-name-1.ttl")) ;
+    }
+    
+    @Test public void add_error_2() {
+        FusekiTest.execWithHttpException(HttpSC.BAD_REQUEST_400, 
+                                         ()-> addTestDataset(fileBase+"config-ds-bad-name-2.ttl")) ;
+    }
+    
+    @Test public void add_error_3() {
+        FusekiTest.execWithHttpException(HttpSC.BAD_REQUEST_400, 
+                                         ()-> addTestDataset(fileBase+"config-ds-bad-name-3.ttl")) ;
+    }
+    
+    @Test public void add_error_4() {
+        FusekiTest.execWithHttpException(HttpSC.BAD_REQUEST_400, 
+                                         ()-> addTestDataset(fileBase+"config-ds-bad-name-4.ttl")) ;
+    }
+    
     @Test public void delete_dataset_1() {
         String name = "NoSuchDataset" ;
         FusekiTest.exec404( ()-> execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+name) ) ;
@@ -294,26 +315,29 @@ public class TestAdmin extends AbstractFusekiTest {
     }
 
     private static JsonValue getDatasetDescription(String dsName) {
-    try ( TypedInputStream in = execHttpGet(urlRoot+"$/"+opDatasets+"/"+dsName) ) {
-        assertEqualsIgnoreCase(WebContent.contentTypeJSON, in.getContentType()) ;
-        JsonValue v = JSON.parse(in) ;
-        return v ;
+        try (TypedInputStream in = execHttpGet(urlRoot + "$/" + opDatasets + "/" + dsName)) {
+            assertEqualsIgnoreCase(WebContent.contentTypeJSON, in.getContentType());
+            JsonValue v = JSON.parse(in);
+            return v;
+        }
     }
-}
 
-// -- Add
+    // -- Add
 
-private static void addTestDataset() {
-    File f = new File("testing/config-ds-1.ttl") ;
-    org.apache.http.entity.ContentType ct = org.apache.http.entity.ContentType.parse(WebContent.contentTypeTurtle+"; charset="+WebContent.charsetUTF8) ;
-    HttpEntity e = new FileEntity(f, ct) ;
-    execHttpPost(ServerTest.urlRoot+"$/"+opDatasets, e) ;
-}
-
-private static void deleteDataset(String name) {
-    execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+name) ;
-}
+    private static void addTestDataset() {
+        addTestDataset(fileBase+"config-ds-1.ttl") ;
+    }
+    
+    private static void addTestDataset(String filename) {
+        File f = new File(filename) ;
+        org.apache.http.entity.ContentType ct = org.apache.http.entity.ContentType.parse(WebContent.contentTypeTurtle+"; charset="+WebContent.charsetUTF8) ;
+        HttpEntity e = new FileEntity(f, ct) ;
+        execHttpPost(ServerTest.urlRoot+"$/"+opDatasets, e) ;
+    }
 
+    private static void deleteDataset(String name) {
+        execHttpDelete(ServerTest.urlRoot+"$/"+opDatasets+"/"+name) ;
+    }
 
     static class JsonResponseHandler implements HttpResponseHandler {
 
@@ -332,8 +356,6 @@ private static void deleteDataset(String name) {
         
     }
     
-    
-    
     private String execSleepTask(String name, int millis) {
         String url = urlRoot+"$/sleep" ;
         if ( name != null ) {

http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-1.ttl
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-1.ttl b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-1.ttl
new file mode 100644
index 0000000..05640fd
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-1.ttl
@@ -0,0 +1,15 @@
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "" ; 
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:dataset                     <#emptyDataset> ;
+    .
+
+<#emptyDataset> rdf:type ja:RDFDataset .

http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-2.ttl
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-2.ttl b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-2.ttl
new file mode 100644
index 0000000..27df06b
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-2.ttl
@@ -0,0 +1,15 @@
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "    " ; 
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:dataset                     <#emptyDataset> ;
+    .
+
+<#emptyDataset> rdf:type ja:RDFDataset .

http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-3.ttl
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-3.ttl b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-3.ttl
new file mode 100644
index 0000000..19caef1
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-3.ttl
@@ -0,0 +1,15 @@
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "ABC   DEF" ; 
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:dataset                     <#emptyDataset> ;
+    .
+
+<#emptyDataset> rdf:type ja:RDFDataset .

http://git-wip-us.apache.org/repos/asf/jena/blob/b177db20/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-4.ttl
----------------------------------------------------------------------
diff --git a/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-4.ttl b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-4.ttl
new file mode 100644
index 0000000..f57840e
--- /dev/null
+++ b/jena-fuseki2/jena-fuseki-core/testing/config-ds-bad-name-4.ttl
@@ -0,0 +1,15 @@
+@prefix :        <#> .
+@prefix fuseki:  <http://jena.apache.org/fuseki#> .
+@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+
+@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .
+
+<#service1> rdf:type fuseki:Service ;
+    # URI of the dataset -- http://host:port/ds
+    fuseki:name                        "/ABC DEF  " ; 
+    fuseki:serviceQuery                "sparql" ;
+    fuseki:dataset                     <#emptyDataset> ;
+    .
+
+<#emptyDataset> rdf:type ja:RDFDataset .