From c074c6d65d1cb1958454bf420e3b7983dc4af2bc Mon Sep 17 00:00:00 2001 From: Andrew Berezovskyi Date: Fri, 26 Nov 2021 16:00:52 +0100 Subject: [PATCH] Add invalid literal/XML tests Signed-off-by: Andrew Berezovskyi --- .../provider/jena/test/XmlLiteralTest.java | 63 ++++++++++++++++++- .../test/resources/simplelogger.properties | 25 ++++++++ .../resources/xml_literals/invalid_badxml.rdf | 12 ++++ .../xml_literals/invalid_noescape.ttl | 9 +++ .../resources/xml_literals/invalid_noroot.ttl | 9 +++ .../xml_literals/invalid_noroot_parsetype.rdf | 12 ++++ .../resources/xml_literals/xsd_xmlliteral.ttl | 2 + .../test/resources/simplelogger.properties | 21 ++++--- .../test/resources/simplelogger.properties | 31 ++++----- 9 files changed, 158 insertions(+), 26 deletions(-) create mode 100644 core/oslc4j-jena-provider/src/test/resources/simplelogger.properties create mode 100644 core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_badxml.rdf create mode 100644 core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noescape.ttl create mode 100644 core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot.ttl create mode 100644 core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot_parsetype.rdf diff --git a/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java b/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java index 105efccce..5c712cf75 100644 --- a/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java +++ b/core/oslc4j-jena-provider/src/test/java/org/eclipse/lyo/oslc4j/provider/jena/test/XmlLiteralTest.java @@ -19,12 +19,12 @@ import org.apache.jena.riot.RDFDataMgr; import org.apache.jena.riot.RDFFormat; import org.apache.jena.riot.RDFLanguages; +import org.apache.jena.riot.RiotException; import org.apache.jena.sparql.vocabulary.FOAF; import org.eclipse.lyo.oslc4j.core.exception.OslcCoreApplicationException; import org.eclipse.lyo.oslc4j.core.model.XMLLiteral; import org.eclipse.lyo.oslc4j.provider.jena.AbstractOslcRdfXmlProvider; import org.eclipse.lyo.oslc4j.provider.jena.JenaModelHelper; -import org.eclipse.lyo.oslc4j.provider.jena.test.resources.TestResource; import org.eclipse.lyo.oslc4j.provider.jena.test.resources.TestResourceWithLiterals; import org.junit.After; import org.junit.Before; @@ -53,6 +53,7 @@ public void after() { System.getProperties().remove(AbstractOslcRdfXmlProvider.OSLC4J_STRICT_DATATYPES); } + /* ROUND-TRIPPING TESTS */ @Test @@ -84,9 +85,9 @@ public void roundtripTestXmlParsetypeWithAnnotatedLiteralProperty() throws Datat } private String showModels(Model expected, Model resulting) { - return String.format("EXPECTED model:\n\n%s\n"+ + return String.format("EXPECTED model:\n\n%s\n" + "=======================================================\n\n" - + "RESULTING model:\n\n%s\n", prettyPrintModel(expected), prettyPrintModel(resulting)); + + "RESULTING model:\n\n%s\n", prettyPrintModel(expected), prettyPrintModel(resulting)); } private String prettyPrintModel(Model model) { @@ -109,6 +110,62 @@ public void roundtripTestXmlParsetypeWithAnnotatedStringProperty() throws Dataty assertTrue(diskModel.isIsomorphicWith(lyoModel)); } + /* INVALID LITERAL TESTS */ + + /** + * We only expect warnings here + */ + @Test + public void invalidLiteralTest_NoRoot() throws DatatypeConfigurationException, + OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { +// final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); + final Model diskModel = readModel("/xml_literals/invalid_noroot.ttl", RDFLanguages.strLangTurtle); + + final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); + assertEquals("Expected only one TestResource resource", 1, testResources.length); + final TestResourceWithLiterals resource = testResources[0]; + + Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); + + assertTrue(diskModel.isIsomorphicWith(lyoModel)); + } + + /** + * We only expect warnings here + */ + @Test + public void invalidLiteralTest_NoEscape() throws DatatypeConfigurationException, + OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { +// final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); + final Model diskModel = readModel("/xml_literals/invalid_noescape.ttl", RDFLanguages.strLangTurtle); + + final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); + assertEquals("Expected only one TestResource resource", 1, testResources.length); + final TestResourceWithLiterals resource = testResources[0]; + + Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); + + assertTrue(diskModel.isIsomorphicWith(lyoModel)); + } + + /** + * Not escaping & turns XML invalid. NB! Unescaped & in Turtle will get escaped when you use libs to convert to RDF/XML. + */ + @Test(expected = RiotException.class) + public void invalidLiteralTest_BadXml() throws DatatypeConfigurationException, + OslcCoreApplicationException, InvocationTargetException, IllegalAccessException { +// final Model diskModel = readModel("/xml_literals/invalid_noroot_parsetype.rdf", RDFLanguages.strLangRDFXML); + final Model diskModel = readModel("/xml_literals/invalid_badxml.rdf", RDFLanguages.strLangTurtle); + + final TestResourceWithLiterals[] testResources = JenaModelHelper.unmarshal(diskModel, TestResourceWithLiterals.class); + assertEquals("Expected only one TestResource resource", 1, testResources.length); + final TestResourceWithLiterals resource = testResources[0]; + + Model lyoModel = JenaModelHelper.createJenaModel(new Object[]{resource}); + + assertTrue(diskModel.isIsomorphicWith(lyoModel)); + } + /* BASE TYPE TESTS */ diff --git a/core/oslc4j-jena-provider/src/test/resources/simplelogger.properties b/core/oslc4j-jena-provider/src/test/resources/simplelogger.properties new file mode 100644 index 000000000..ecd016199 --- /dev/null +++ b/core/oslc4j-jena-provider/src/test/resources/simplelogger.properties @@ -0,0 +1,25 @@ +# https://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html +org.slf4j.simpleLogger.logFile = System.out +# Must be one of ("trace", "debug", "info", "warn", "error" or "off"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel = DEBUG + +org.slf4j.simpleLogger.showLogName = true +org.slf4j.simpleLogger.showDateTime = true +org.slf4j.simpleLogger.levelInBrackets = true +org.slf4j.simpleLogger.showThreadName = false +org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSS +org.slf4j.simpleLogger.showShortLogName = true + + + +org.slf4j.simpleLogger.log.org.eclipse.lyo = TRACE + +# Suppress chatty logs +org.slf4j.simpleLogger.log.org.glassfish = INFO +org.slf4j.simpleLogger.log.org.apache.jena = INFO +org.slf4j.simpleLogger.log.Jena = INFO +org.slf4j.simpleLogger.log.org.eclipse.jetty = INFO +# use DEBUG to see HTTP wire contents +org.slf4j.simpleLogger.log.org.apache.http = INFO +org.slf4j.simpleLogger.log.org.apache.wink = ERROR diff --git a/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_badxml.rdf b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_badxml.rdf new file mode 100644 index 000000000..22a5026b8 --- /dev/null +++ b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_badxml.rdf @@ -0,0 +1,12 @@ + + + + David & Mary + David & Mary + David & Mary + + diff --git a/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noescape.ttl b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noescape.ttl new file mode 100644 index 000000000..1087fcf64 --- /dev/null +++ b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noescape.ttl @@ -0,0 +1,9 @@ +@prefix rdf: . +@prefix xsd: . +@prefix foaf: . +@prefix dcterms: . + +<> a ; + foaf:firstName "David & Mary"^^rdf:XMLLiteral ; + dcterms:title "David & Mary"^^rdf:XMLLiteral ; + dcterms:description "David & Mary"^^rdf:XMLLiteral . diff --git a/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot.ttl b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot.ttl new file mode 100644 index 000000000..1087fcf64 --- /dev/null +++ b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot.ttl @@ -0,0 +1,9 @@ +@prefix rdf: . +@prefix xsd: . +@prefix foaf: . +@prefix dcterms: . + +<> a ; + foaf:firstName "David & Mary"^^rdf:XMLLiteral ; + dcterms:title "David & Mary"^^rdf:XMLLiteral ; + dcterms:description "David & Mary"^^rdf:XMLLiteral . diff --git a/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot_parsetype.rdf b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot_parsetype.rdf new file mode 100644 index 000000000..4801d54b3 --- /dev/null +++ b/core/oslc4j-jena-provider/src/test/resources/xml_literals/invalid_noroot_parsetype.rdf @@ -0,0 +1,12 @@ + + + + David & Mary + David & Mary + David & Mary + + diff --git a/core/oslc4j-jena-provider/src/test/resources/xml_literals/xsd_xmlliteral.ttl b/core/oslc4j-jena-provider/src/test/resources/xml_literals/xsd_xmlliteral.ttl index 6fce20478..b773768f8 100644 --- a/core/oslc4j-jena-provider/src/test/resources/xml_literals/xsd_xmlliteral.ttl +++ b/core/oslc4j-jena-provider/src/test/resources/xml_literals/xsd_xmlliteral.ttl @@ -1,6 +1,8 @@ @prefix rdf: . @prefix xsd: . @prefix foaf: . +@prefix dcterms: . + <> a ; foaf:firstName "David & Mary"^^xsd:XMLLiteral . diff --git a/trs/client/trs-client/src/test/resources/simplelogger.properties b/trs/client/trs-client/src/test/resources/simplelogger.properties index f3613fbba..8b2e12bb4 100644 --- a/trs/client/trs-client/src/test/resources/simplelogger.properties +++ b/trs/client/trs-client/src/test/resources/simplelogger.properties @@ -1,19 +1,22 @@ # https://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html -org.slf4j.simpleLogger.logFile = System.out -org.slf4j.simpleLogger.defaultLogLevel = INFO -org.slf4j.simpleLogger.levelInBrackets = true -org.slf4j.simpleLogger.showLogName = true -org.slf4j.simpleLogger.showShortLogName = false -org.slf4j.simpleLogger.showDateTime = false -org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSS -org.slf4j.simpleLogger.showThreadName = false +org.slf4j.simpleLogger.logFile = System.out +# Must be one of ("trace", "debug", "info", "warn", "error" or "off"). +# If not specified, defaults to "info". +org.slf4j.simpleLogger.defaultLogLevel = DEBUG -org.slf4j.simpleLogger.log.org.eclipse.lyo = DEBUG +org.slf4j.simpleLogger.showLogName = true +org.slf4j.simpleLogger.showDateTime = true +org.slf4j.simpleLogger.levelInBrackets = true +org.slf4j.simpleLogger.showThreadName = false +org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSS +org.slf4j.simpleLogger.showShortLogName = true +org.slf4j.simpleLogger.log.org.eclipse.lyo = TRACE org.slf4j.simpleLogger.log.org.eclipse.lyo.oslc4j.provider.jena.ordfm.ResourcePackages = INFO org.slf4j.simpleLogger.log.org.eclipse.lyo.oslc4j.provider.jena.JenaModelHelper = INFO #org.slf4j.simpleLogger.log.org.eclipse.lyo.trs = TRACE +# Suppress chatty logs org.slf4j.simpleLogger.log.org.glassfish = INFO org.slf4j.simpleLogger.log.org.jboss.weld = TRACE org.slf4j.simpleLogger.log.org.apache.jena = INFO diff --git a/trs/server/src/test/resources/simplelogger.properties b/trs/server/src/test/resources/simplelogger.properties index f3613fbba..f881ec509 100644 --- a/trs/server/src/test/resources/simplelogger.properties +++ b/trs/server/src/test/resources/simplelogger.properties @@ -1,21 +1,24 @@ # https://www.slf4j.org/api/org/slf4j/impl/SimpleLogger.html -org.slf4j.simpleLogger.logFile = System.out -org.slf4j.simpleLogger.defaultLogLevel = INFO -org.slf4j.simpleLogger.levelInBrackets = true -org.slf4j.simpleLogger.showLogName = true -org.slf4j.simpleLogger.showShortLogName = false -org.slf4j.simpleLogger.showDateTime = false -org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSS -org.slf4j.simpleLogger.showThreadName = false - -org.slf4j.simpleLogger.log.org.eclipse.lyo = DEBUG +org.slf4j.simpleLogger.logFile = System.out +# Must be one of ("trace", "debug", "info", "warn", "error" or "off"). +org.slf4j.simpleLogger.defaultLogLevel = DEBUG +org.slf4j.simpleLogger.levelInBrackets = true +org.slf4j.simpleLogger.showLogName = true +org.slf4j.simpleLogger.showShortLogName = true +org.slf4j.simpleLogger.showDateTime = true +org.slf4j.simpleLogger.dateTimeFormat = HH:mm:ss.SSS +org.slf4j.simpleLogger.showThreadName = false +org.slf4j.simpleLogger.log.org.eclipse.lyo = TRACE org.slf4j.simpleLogger.log.org.eclipse.lyo.oslc4j.provider.jena.ordfm.ResourcePackages = INFO org.slf4j.simpleLogger.log.org.eclipse.lyo.oslc4j.provider.jena.JenaModelHelper = INFO #org.slf4j.simpleLogger.log.org.eclipse.lyo.trs = TRACE -org.slf4j.simpleLogger.log.org.glassfish = INFO +# Suppress chatty logs +# use DEBUG to see HTTP wire contents +org.slf4j.simpleLogger.log.org.apache.http = INFO +org.slf4j.simpleLogger.log.org.apache.jena = INFO +org.slf4j.simpleLogger.log.org.glassfish = INFO org.slf4j.simpleLogger.log.org.jboss.weld = TRACE -org.slf4j.simpleLogger.log.org.apache.jena = INFO -org.slf4j.simpleLogger.log.org.apache.http = INFO -org.slf4j.simpleLogger.log.Jena = INFO +org.slf4j.simpleLogger.log.Jena = INFO +org.slf4j.simpleLogger.log.org.eclipse.jetty = INFO