From 99a019c81478b6217aa5937e1d9108aeed323ffa Mon Sep 17 00:00:00 2001 From: dperezBM Date: Mon, 19 Oct 2020 09:16:53 +0200 Subject: [PATCH 01/10] Added automatic xsd validation when schemaLocation is not present in the header --- ...IDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml | 6 ++ service/ds-wfs-pre-defined-soapui-project.xml | 64 +++++++++++++++++-- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml b/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml index 77cf8b4ea..e4d5b885c 100644 --- a/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml +++ b/include-metadata/TranslationTemplateBundle-EIDfadd4929-fa60-4781-b658-703bbfe3f4eb.xml @@ -557,5 +557,11 @@ The recommended identifier 'http://inspire.ec.europa.eu/operation/download/GetSpatialDataSet' should be used for serving pre-defined Spatial Data Sets. + + + + The WFS is not valid against the '{xsd}' schema. Reason: '{reason}' + + diff --git a/service/ds-wfs-pre-defined-soapui-project.xml b/service/ds-wfs-pre-defined-soapui-project.xml index 15953e521..2c704443e 100755 --- a/service/ds-wfs-pre-defined-soapui-project.xml +++ b/service/ds-wfs-pre-defined-soapui-project.xml @@ -2258,9 +2258,65 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");UTF-8 ${#Project#serviceEndpoint} - 20030000import de.interactive_instruments.etf.suim.* + 20030000import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Schema; +import javax.xml.validation.Validator +import javax.xml.XMLConstants; +import java.io.*; +import org.xml.sax.SAXException; +import de.interactive_instruments.etf.suim.*; +import com.eviware.soapui.support.XmlHolder; +import javax.xml.transform.Source; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities/@*:schemaLocation", "TR.missingSchemaLocation");xsi:schemaLocationBasicBasicGlobal HTTP Settings + +XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); +def xmlText = xml.getXml(); +def xsds = ["http://schemas.opengis.net/wfs/2.0/wfs.xsd", "http://inspire.ec.europa.eu/schemas/inspire_dls/1.0/inspire_dls.xsd"]; + +if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ + def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); + validateFile(xmlText, xsd); +}else{ + xsds.each{ xsd -> + validateFile(xmlText, xsd); + } +} + + +public boolean validateFile(String xml, String strSchemaLocation) +{ + Source xmlFile = null; + try { + URL schemaFile = new URL(strSchemaLocation); + xmlFile = new StreamSource(createFile(xml)); + SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + Schema schema = schemaFactory.newSchema(schemaFile); + Validator validator = schema.newValidator(); + validator.validate(xmlFile); + + } catch (SAXException e) { + String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; + throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); + + } catch (IOException ioe) { + System.out.println("IOException"); + + } + +} + + + +public File createFile(String file) throws IOException { + + File tempFile = File.createTempFile("temporaryfile",".xml") + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + writer.write(file); + writer.close() + return tempFile; +} +BasicBasicGlobal HTTP Settings @@ -2561,8 +2617,6 @@ int getHttpResponseCode(String url, def credentials){ return connection.getResponseCode() } -assert schemaLocations != null, "Response does not contain xsi:schemaLocation attribute!" - if(schemaLocations!=null) { for(schemaLocation in schemaLocations) { log.info("Checking "+schemaLocation); @@ -5304,7 +5358,7 @@ if (node != null){ - datasetIdentifiersListFirstFeatureFirstFeatureIdauthUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorGeonovumetf.version1.0.8etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-pre-defined-soapui-project.xmletf.creation.date2017-01-27T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2020-05-29T09:52:00 + datasetIdentifiersListFirstFeatureFirstFeatureIdauthUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorGeonovumetf.version1.0.9etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-pre-defined-soapui-project.xmletf.creation.date2017-01-27T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2020-10-19T09:30:00 From ad3a975864136a7e85d6eb099f5f6885cc285cbb Mon Sep 17 00:00:00 2001 From: dperezBM Date: Mon, 19 Oct 2020 13:22:46 +0200 Subject: [PATCH 02/10] Added validation for shema location on direct wfs too --- service/ds-wfs-direct-soapui-project.xml | 62 ++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/service/ds-wfs-direct-soapui-project.xml b/service/ds-wfs-direct-soapui-project.xml index e77a9b39b..a8b748d46 100755 --- a/service/ds-wfs-direct-soapui-project.xml +++ b/service/ds-wfs-direct-soapui-project.xml @@ -164,9 +164,65 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");UTF-8 ${#Project#endpt.GetCapabilities.Get} - 20030000import de.interactive_instruments.etf.suim.* + 20030000import javax.xml.transform.stream.StreamSource; +import javax.xml.validation.SchemaFactory; +import javax.xml.validation.Schema; +import javax.xml.validation.Validator +import javax.xml.XMLConstants; +import java.io.*; +import org.xml.sax.SAXException; +import de.interactive_instruments.etf.suim.*; +import com.eviware.soapui.support.XmlHolder; +import javax.xml.transform.Source; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities/@*:schemaLocation", "TR.missingSchemaLocation");xsi:schemaLocationBasicBasicGlobal HTTP Settings + +XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); +def xmlText = xml.getXml(); +def xsds = ["http://schemas.opengis.net/wfs/2.0/wfs.xsd", "http://inspire.ec.europa.eu/schemas/inspire_dls/1.0/inspire_dls.xsd"]; + +if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ + def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); + validateFile(xmlText, xsd); +}else{ + xsds.each{ xsd -> + validateFile(xmlText, xsd); + } +} + + +public boolean validateFile(String xml, String strSchemaLocation) +{ + Source xmlFile = null; + try { + URL schemaFile = new URL(strSchemaLocation); + xmlFile = new StreamSource(createFile(xml)); + SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); + Schema schema = schemaFactory.newSchema(schemaFile); + Validator validator = schema.newValidator(); + validator.validate(xmlFile); + + } catch (SAXException e) { + String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; + throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); + + } catch (IOException ioe) { + System.out.println("IOException"); + + } + +} + + + +public File createFile(String file) throws IOException { + + File tempFile = File.createTempFile("temporaryfile",".xml") + BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); + writer.write(file); + writer.close() + return tempFile; +} +BasicBasicGlobal HTTP Settings @@ -366,7 +422,7 @@ a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constr - authUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetCapabilities.Getendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorinteractive instruments GmbHetf.version1.0.4etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-direct-soapui-project.xmletf.creation.date2017-05-15T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2020-05-295T09:47:00etf.dependency.idsEID95a1b6fc-2b55-3d43-9502-3b8b605bda10serviceEndpoint + authUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetCapabilities.Getendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorinteractive instruments GmbHetf.version1.0.5etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-direct-soapui-project.xmletf.creation.date2017-05-15T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2020-10-19T13:20:00etf.dependency.idsEID95a1b6fc-2b55-3d43-9502-3b8b605bda10serviceEndpoint From 9b796430cf7c2d017b984efa0029188a76a441a6 Mon Sep 17 00:00:00 2001 From: dperez Date: Wed, 10 Feb 2021 16:13:17 +0100 Subject: [PATCH 03/10] Added schemaLocation search into all document --- service/dis-csw-core-soapui-project.xml | 59 ++++++++++++++++++- service/ds-sos-pre-defined-soapui-project.xml | 59 ++++++++++++++++++- service/ds-wcs-core-soapui-project.xml | 59 ++++++++++++++++++- service/vs-wms-soapui-project.xml | 59 ++++++++++++++++++- 4 files changed, 232 insertions(+), 4 deletions(-) diff --git a/service/dis-csw-core-soapui-project.xml b/service/dis-csw-core-soapui-project.xml index 9f07a4fa8..3486b688e 100644 --- a/service/dis-csw-core-soapui-project.xml +++ b/service/dis-csw-core-soapui-project.xml @@ -487,7 +487,64 @@ if(defaultLanguage.size() != 1){ throw new TranslatableAssertionError('TR.multiplicityShallBeOne', assertParams); } Test that the capabilities document is schema valid.

-

More information: Extended Capabilities Schema Valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
SEQUENTIALTest that the capabilities document is schema valid according to INSPIRE online schema repository.

-

More information: Extended Capabilities XML Schema

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERY
Test that the XML capabilities document is schema valid.

-

More information: XML schema validation

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsdNo AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}
Test that the capabilities document is schema valid.

More information: Extended Capabilities Schema Valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://schemas.opengis.net/csw/2.0.2/csw.xsd", "http://inspire.ec.europa.eu/schemas/inspire_ds/1.0/inspire_ds.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); + import javax.xml.validation.SchemaFactory; + import javax.xml.validation.Schema; + import javax.xml.validation.Validator + import javax.xml.XMLConstants; + import java.io.*; + import org.xml.sax.SAXException; + import de.interactive_instruments.etf.suim.*; + import com.eviware.soapui.support.XmlHolder; + import javax.xml.transform.Source; + Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); + + XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); + def xmlText = xml.getXml(); + def xsds = ["http://schemas.opengis.net/csw/2.0/csw.xsd", "http://inspire.ec.europa.eu/schemas/inspire_ds/1.0/inspire_ds.xsd"]; + + if(xml.getNodeValue("/*:GetRecords/@*:schemaLocation") != null){ + xsds = xml.getNodeValue("/*:GetRecords/@*:schemaLocation"); + def splittedXsds = xsds.split(" "); + validationProccess(xmlText, splittedXsds); + }else{ + validationProccess(xmlText, xsds); } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
SEQUENTIALTest that the capabilities document is schema valid according to INSPIRE online schema repository.

More information: Extended Capabilities XML Schema

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://schemas.opengis.net/sos/2.0/sos.xsd", "http://inspire.ec.europa.eu/schemas/inspire_dls/1.0/inspire_dls.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); - } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERY
Test that the XML capabilities document is schema valid.

More information: XML schema validation

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd", "http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); + import javax.xml.validation.SchemaFactory; + import javax.xml.validation.Schema; + import javax.xml.validation.Validator + import javax.xml.XMLConstants; + import java.io.*; + import org.xml.sax.SAXException; + import de.interactive_instruments.etf.suim.*; + import com.eviware.soapui.support.XmlHolder; + import javax.xml.transform.Source; + Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); + + XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); + def xmlText = xml.getXml(); + def xsds = ["http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd", "http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd"]; + + if(xml.getNodeValue("/*:ExtendedCapabilities/@*:schemaLocation") != null){ + xsds = xml.getNodeValue("/*:ExtendedCapabilities/@*:schemaLocation"); + def splittedXsds = xsds.split(" "); + validationProccess(xmlText, splittedXsds); + }else{ + validationProccess(xmlText, xsds); } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}
Test that the capabilities document is schema valid.

-

More information: Extended Capabilities Schema Valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
SEQUENTIALTest that the capabilities document is schema valid according to INSPIRE online schema repository.

-

More information: Extended Capabilities XML Schema

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERY
Test that the XML capabilities document is schema valid.

-

More information: XML schema validation

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsdNo AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}
Test that the capabilities document is schema valid.

More information: Extended Capabilities Schema Valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://schemas.opengis.net/csw/2.0.2/csw.xsd", "http://inspire.ec.europa.eu/schemas/inspire_ds/1.0/inspire_ds.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); + import javax.xml.validation.SchemaFactory; + import javax.xml.validation.Schema; + import javax.xml.validation.Validator + import javax.xml.XMLConstants; + import java.io.*; + import org.xml.sax.SAXException; + import de.interactive_instruments.etf.suim.*; + import com.eviware.soapui.support.XmlHolder; + import javax.xml.transform.Source; + Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); + + XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); + def xmlText = xml.getXml(); + def xsds = ["http://schemas.opengis.net/csw/2.0/csw.xsd", "http://inspire.ec.europa.eu/schemas/inspire_ds/1.0/inspire_ds.xsd"]; + + if(xml.getNodeValue("/*:GetRecords/@*:schemaLocation") != null){ + xsds = xml.getNodeValue("/*:GetRecords/@*:schemaLocation"); + def splittedXsds = xsds.split(" "); + validationProccess(xmlText, splittedXsds); + }else{ + validationProccess(xmlText, xsds); } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
SEQUENTIALTest that the capabilities document is schema valid according to INSPIRE online schema repository.

More information: Extended Capabilities XML Schema

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://schemas.opengis.net/sos/2.0/sos.xsd", "http://inspire.ec.europa.eu/schemas/inspire_dls/1.0/inspire_dls.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); - } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERY
Test that the XML capabilities document is schema valid.

More information: XML schema validation

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; -import javax.xml.validation.SchemaFactory; -import javax.xml.validation.Schema; -import javax.xml.validation.Validator -import javax.xml.XMLConstants; -import java.io.*; -import org.xml.sax.SAXException; -import de.interactive_instruments.etf.suim.*; -import com.eviware.soapui.support.XmlHolder; -import javax.xml.transform.Source; -Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); - -XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); -def xmlText = xml.getXml(); -def xsds = ["http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd", "http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd"]; - -if(xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation") != null){ - def xsd = xml.getNodeValue("/*:WFS_Capabilities/@*:schemaLocation"); - validateFile(xmlText, xsd); -}else{ - xsds.each{ xsd -> - validateFile(xmlText, xsd); + import javax.xml.validation.SchemaFactory; + import javax.xml.validation.Schema; + import javax.xml.validation.Validator + import javax.xml.XMLConstants; + import java.io.*; + import org.xml.sax.SAXException; + import de.interactive_instruments.etf.suim.*; + import com.eviware.soapui.support.XmlHolder; + import javax.xml.transform.Source; + Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); + + XmlHolder xml = new XmlHolder(messageExchange.responseContentAsXml); + def xmlText = xml.getXml(); + def xsds = ["http://inspire.ec.europa.eu/schemas/inspire_vs/1.0/inspire_vs.xsd", "http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd"]; + + if(xml.getNodeValue("/*:ExtendedCapabilities/@*:schemaLocation") != null){ + xsds = xml.getNodeValue("/*:ExtendedCapabilities/@*:schemaLocation"); + def splittedXsds = xsds.split(" "); + validationProccess(xmlText, splittedXsds); + }else{ + validationProccess(xmlText, xsds); } -} - - -public boolean validateFile(String xml, String strSchemaLocation) -{ - Source xmlFile = null; - try { - URL schemaFile = new URL(strSchemaLocation); - xmlFile = new StreamSource(createFile(xml)); - SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); - Schema schema = schemaFactory.newSchema(schemaFile); - Validator validator = schema.newValidator(); - validator.validate(xmlFile); - - } catch (SAXException e) { - String[] assertParams = ['xsd', strSchemaLocation, 'reason', e.getLocalizedMessage()]; - throw new TranslatableAssertionError('TR.XmlNotValidAgainstSchemaLocation', assertParams); - - } catch (IOException ioe) { - System.out.println("IOException"); - - } - -} - - - -public File createFile(String file) throws IOException { - - File tempFile = File.createTempFile("temporaryfile",".xml") - BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); - writer.write(file); - writer.close() - return tempFile; -}No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}<xml-fragment/>${#Project#serviceEndpoint}60000200No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#AcceptVersions} + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 60000 + + + + + 200 + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#AcceptVersions} + + + + + + + + + + + + + + + + + + + + + + + + + + + +
<p>This test case checks whether the Executable Test Suite has been initialized. If it has not been, it runs the initialization test case.</p> + + + + + + <p>This test case checks whether the Executable Test Suite has been initialized. If it has not been, it runs the initialization test case.</p> + + + + +
SEQUENTIALTest that the service provides the INSPIRE extended metadata.

-

More information: Extended Capabilities

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL + + + +
+ +
+ + + SEQUENTIAL + + + Test that the service provides the INSPIRE extended metadata.

+

More information: Extended Capabilities

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + + + + + +
Test that the Discover Metadata response contains at least the INSPIRE metadata elements.

-

More information: Discover Resource Matching Query

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#getrecords_endpoint}6000000200No Authorizationservice${#Project#service}QUERYxs:stringrequestGetRecordsQUERYxs:stringversion${#Project#version}QUERYxs:stringtypeNamescsw:RecordQUERYxs:stringresultTyperesultsQUERYresultsoutputFormatapplication/xmlQUERYapplication/xmloutputSchemahttp://www.isotc211.org/2005/gmdQUERYhttp://www.isotc211.org/2005/gmdelementSetNamefullQUERYfullmaxRecords10QUERY20 + + + +
+ + + Test that the Discover Metadata response contains at least the INSPIRE metadata elements.

+

More information: Discover Resource Matching Query

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + + + 6000000 + + + + + 200 + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + + + + + request + GetRecords + QUERY + xs:string + + + + + version + ${#Project#version} + QUERY + xs:string + + + + + typeNames + csw:Record + QUERY + xs:string + + + + + resultType + results + QUERY + results + + + + + outputFormat + application/xml + QUERY + application/xml + + + + + outputSchema + http://www.isotc211.org/2005/gmd + QUERY + http://www.isotc211.org/2005/gmd + + + + + elementSetName + full + QUERY + full + + + + + maxRecords + 10 + QUERY + 20 + + + + + + + + + +
Test that discovery client approach is implemented properly.

-

More information: Link Publish Metadata Operation

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + +
+ + + Test that discovery client approach is implemented properly.

+

More information: Link Publish Metadata Operation

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual15' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
Test that federated Discovery Service is published in Member State's Discovery Service's capabilities document when the discovery service approach is implemented.

-

More information: Link Federated Capabilities Document

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + + + +
+ + + Test that federated Discovery Service is published in Member State's Discovery Service's capabilities document when the discovery service approach is implemented.

+

More information: Link Federated Capabilities Document

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual16' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
SEQUENTIALTest that the Discover Metadata service supports queryables.

-

More information: Query Search Criteria

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + + + +
+ +
+ + + SEQUENTIAL + + + Test that the Discover Metadata service supports queryables.

+

More information: Query Search Criteria

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual19' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
Test that the Discover Metadata service accepts the language parameter.

-

More information: Query Language Parameter

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#getrecords_endpoint}60000200import de.interactive_instruments.etf.suim.TranslatableAssertionError; + + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + + + 60000 + + + + + 200 + + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ throw new TranslatableAssertionError('TR.invalidGetRecordsResponse'); } @@ -312,7 +805,114 @@ def getRecordsResponse = new XmlSlurper(false, true).parseText(messageExchange.r if(getRecordsResponse.SearchResults.size() != 1){ throw new TranslatableAssertionError('TR.invalidGetRecordsResponse'); } -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetRecordsQUERYGetRecordsversion${#Project#version}QUERY${#Project#version}typeNamescsw:RecordQUERYcsw:RecordresultTyperesultsQUERYresultsoutputFormatapplication/xmlQUERYapplication/xmloutputSchemahttp://www.isotc211.org/2005/gmdQUERYelementSetNamefullQUERYfullmaxRecords10QUERY10constraintLanguageCQL_TEXTQUERYconstraint_language_version1.1.0QUERYconstraintlanguage = 'eng'QUERY<xml-fragment/>${#Project#getrecords_endpoint} + + +
+ + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetRecords + QUERY + GetRecords + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + typeNames + csw:Record + QUERY + csw:Record + + + + + resultType + results + QUERY + results + + + + + outputFormat + application/xml + QUERY + application/xml + + + + + outputSchema + http://www.isotc211.org/2005/gmd + QUERY + + + + + + elementSetName + full + QUERY + full + + + + + maxRecords + 10 + QUERY + 10 + + + + + constraintLanguage + CQL_TEXT + QUERY + + + constraint_language_version + 1.1.0 + QUERY + + + constraint + language = 'eng' + QUERY + + + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + full @@ -325,7 +925,22 @@ if(getRecordsResponse.SearchResults.size() != 1){ -]]>60000200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +]]> +
+ + + 60000 + + + + + 200 + + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ throw new TranslatableAssertionError('TR.invalidGetRecordsResponse'); } @@ -333,15 +948,108 @@ def getRecordsResponse = new XmlSlurper(false, true).parseText(messageExchange.r if(getRecordsResponse.SearchResults.size() != 1){ throw new TranslatableAssertionError('TR.invalidGetRecordsResponse'); } -No AuthorizationTest that the Discover Metadata service supports additional queryables.

-

More information: Query Additional Parameters

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + No Authorization + + + + + + + +
+ + + Test that the Discover Metadata service supports additional queryables.

+

More information: Query Additional Parameters

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual21' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
Test that all ISO and additional queryables are advertised in the capabilities document.

-

More information: Query Parameters Advertised

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL
SEQUENTIALTest that natural language fields vary depending on the requested language.

-

More information: Language Natural Language Fields

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +]]> + + + + +
+ +
+ + + SEQUENTIAL + + + Test that natural language fields vary depending on the requested language.

+

More information: Language Natural Language Fields

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual24' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
Test that the service supports the parameter LANGUAGE.

-

More information: Language Parameter ISO valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL
Test that natural language fields are provided in default language when requested language is unsupported or absent.

-

More information: Language Natural Fields Default

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}60000200No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}language${#TestCase#language}QUERY${#TestCase#language} + + + +
+ + + Test that natural language fields are provided in default language when requested language is unsupported or absent.

+

More information: Language Natural Fields Default

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 60000 + + + + + 200 + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#language} + QUERY + ${#TestCase#language} + + + + + + + + + + language
Test that the response language is correct based on the requested language.

-

More information: Language Response Value

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}60000200No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}language${#TestCase#language}QUERY${#TestCase#language} + + + + + language + + + +
+ + + Test that the response language is correct based on the requested language.

+

More information: Language Response Value

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 60000 + + + + + 200 + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#language} + QUERY + ${#TestCase#language} + + + + + + + + + + language
Test that the cardinality of supported languages is correct.

-

More information: Language Supported Default Cardinality

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL + + + + + language + + + +
+ + + Test that the cardinality of supported languages is correct.

+

More information: Language Supported Default Cardinality

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + +
Test that the capabilities document is schema valid.

-

More information: Extended Capabilities Schema Valid

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; + + + + +
+ + + Test that the capabilities document is schema valid.

+

More information: Extended Capabilities Schema Valid

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -580,7 +1607,46 @@ if(defaultLanguage.size() != 1){ writer.write(file); writer.close() return tempFile; - }No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}
Test the service behaviour without a language specific filter.

-

More information: Language GetRecords without Parameter

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + +
+ + + Test the service behaviour without a language specific filter.

+

More information: Language GetRecords without Parameter

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual30' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetRecordsQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}typeNamescsw:RecordQUERYresultTyperesultsQUERYoutputFormatapplication/xmlQUERYoutputSchemahttp://www.isotc211.org/2005/gmdQUERYelementSetNamefullQUERYmaxRecords10QUERY
Test that the service supports filtering by language.

-

More information: Language GetRecords Language Filter

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#getrecords_endpoint}import de.interactive_instruments.etf.suim.* + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetRecords + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + typeNames + csw:Record + QUERY + + + resultType + results + QUERY + + + outputFormat + application/xml + QUERY + + + outputSchema + http://www.isotc211.org/2005/gmd + QUERY + + + elementSetName + full + QUERY + + + maxRecords + 10 + QUERY + + + + + +
+ + + Test that the service supports filtering by language.

+

More information: Language GetRecords Language Filter

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual31' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetRecordsQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}typeNamescsw:RecordQUERYresultTyperesultsQUERYoutputFormatapplication/xmlQUERYoutputSchemahttp://www.isotc211.org/2005/gmdQUERYelementSetNamefullQUERYmaxRecords10QUERYconstraintLanguageCQL_TEXTQUERYconstraint_language_version1.1.0QUERYconstraintlanguage = 'zzz'QUERY<xml-fragment/>${#Project#getrecords_endpoint} + + +
+ + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetRecords + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + typeNames + csw:Record + QUERY + + + resultType + results + QUERY + + + outputFormat + application/xml + QUERY + + + outputSchema + http://www.isotc211.org/2005/gmd + QUERY + + + elementSetName + full + QUERY + + + maxRecords + 10 + QUERY + + + constraintLanguage + CQL_TEXT + QUERY + + + constraint_language_version + 1.1.0 + QUERY + + + constraint + language = 'zzz' + QUERY + + + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + full @@ -635,20 +1912,151 @@ a.exists( -]]>import de.interactive_instruments.etf.suim.* +]]> +
+ + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual31' ); -No AuthorizationTest that GetRecords exceptions are provided in the correct language.

-

More information: Language GetRecords Exception

]]>
c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#getrecords_endpoint}import de.interactive_instruments.etf.suim.* + + + + + No Authorization + + + + + + + +
+ + + Test that GetRecords exceptions are provided in the correct language.

+

More information: Language GetRecords Exception

]]> +
+ + + + + c2bf56ae-2544-4b9d-9fdf-28654aa6111f + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual32' ); -No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetRecordsQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}typeNamescsw:RecordQUERYresultTyperesultsQUERYoutputFormatapplication/xmlQUERYoutputSchemahttp://www.isotc211.org/2005/gmdQUERYelementSetNamefullQUERYmaxRecords1QUERYconstraintLanguageCQL_TEXTQUERYconstraint_language_version1.1.0QUERYconstraintlanguage = 'eng'QUERY<xml-fragment/>${#Project#getrecords_endpoint} + + +
+ + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetRecords + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + typeNames + csw:Record + QUERY + + + resultType + results + QUERY + + + outputFormat + application/xml + QUERY + + + outputSchema + http://www.isotc211.org/2005/gmd + QUERY + + + elementSetName + full + QUERY + + + maxRecords + 1 + QUERY + + + constraintLanguage + CQL_TEXT + QUERY + + + constraint_language_version + 1.1.0 + QUERY + + + constraint + language = 'eng' + QUERY + + + + + + + + + <xml-fragment/> + + ${#Project#getrecords_endpoint} + + full @@ -661,10 +2069,115 @@ a.exists( -]]>import de.interactive_instruments.etf.suim.* +]]> + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual32' ); -No AuthorizationserviceEndpointserviceCSWversion2.0.2extended_capabilities_scenario1lastServiceEndpointgetrecords_endpointauthUserauthPwdauthMethodbasicetf.ignore.propertiesservice, version, extended_capabilities_scenario, lastServiceEndpoint, getrecords_endpoint, authUser, authPwd, authMethodetf.tag.idsEID0861e71d-bb54-4fa2-8d32-816b41531da3etf.translation.template.collection.idEID6f004d02-ca77-4a67-99a4-62515725a573etf.supported.test.object.type.idsEID4b0fb35d-10f0-47df-bc0b-6d4548035ae2etf.authorConsortium Bilbomatica, Guadaltel & Geogramaetf.creation.date2019-05-02T10:00:00etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.last.update.date2020-03-05T13:00:00etf.version0.1.6etf.referencehttps://github.com/inspire-eu-validation/discovery-servicetestIntensive \ No newline at end of file + + + + + No Authorization + + + + + + + + + + + + + serviceEndpoint + + + + service + CSW + + + version + 2.0.2 + + + extended_capabilities_scenario + 1 + + + lastServiceEndpoint + + + + getrecords_endpoint + + + + authUser + + + + authPwd + + + + authMethod + basic + + + etf.ignore.properties + service, version, extended_capabilities_scenario, lastServiceEndpoint, getrecords_endpoint, authUser, authPwd, authMethod + + + etf.tag.ids + EID0861e71d-bb54-4fa2-8d32-816b41531da3 + + + etf.translation.template.collection.id + EID6f004d02-ca77-4a67-99a4-62515725a573 + + + etf.supported.test.object.type.ids + EID4b0fb35d-10f0-47df-bc0b-6d4548035ae2 + + + etf.author + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2019-05-02T10:00:00 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.last.update.date + 2020-03-05T13:00:00 + + + etf.version + 0.1.6 + + + etf.reference + https://github.com/inspire-eu-validation/discovery-service + + + testIntensive + + + + + + + + \ No newline at end of file diff --git a/service/ds-atom-pre-defined-soapui-project.xml b/service/ds-atom-pre-defined-soapui-project.xml index 4b38f4c7d..4ca1ad0da 100644 --- a/service/ds-atom-pre-defined-soapui-project.xml +++ b/service/ds-atom-pre-defined-soapui-project.xml @@ -1,21 +1,36 @@ - + +
The test suite is divided into four test modules. In the first module 'Initialization and basic checks', basic queries are send to the Atom feed to ensure the endpoints are available. The 'Download Service Feed', 'Dataset Feed' and 'OpenSearch Description' test modules contain the actual test cases, derived from the Abstract Test Cases. If a test case in the first module fails, the three other modules are skipped!

There are a few test cases and test steps that are marked as 'technical test step' or 'technical test case' in the description. They are used to control the test execution flow of the steps. The description text of a technical test step indicates the test steps that are executed. If a technical test step fails, the other test steps, which have been called by the technical test step, should be checked first. To examine a reported issue, the assertion messages should be compared with the service responses which are included in the report. If the response contains an exception report, the request should be checked for 'incorrect' parameters (i.e. non-existing IDs). The test step description should refer to a point, from where the information has been gathered (i.e. from a previous request where the ID was listed).

-Please report any issues or problems in GitHub. +Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'Pre-defined Atom']]>
Perform basic check to ensure the top-level Download Service Feed is available and initialize the Executable Test Suite with gathered information. +Source: Conformance Class 'Pre-defined Atom']]> + + + + Perform basic check to ensure the top-level Download Service Feed is available and initialize the Executable Test Suite with gathered information. If this test case fails, all other test cases will be skipped! Ensure that the schema locations and all endpoints can be queried! -Please note that for technical reasons this Executable Test Suite requires that schema locations must be accessible without any authentication mechanism.SEQUENTIALTechnical test case. Initialize loggers and set credentials for the test run.<xml-fragment/>falseUTF-8${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + false + + UTF-8 + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.* if(!messageExchange.hasResponse()) { @@ -35,13 +75,112 @@ if(messageExchange.responseContent.size()>7) { if(!xmlProlog.trim().startsWith("<")) { throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ) } -}import de.interactive_instruments.etf.suim.* +} + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");No Authorizationetf.ShortDescriptionetf.AuthorThijs Brentjensetf.LastEditorJon Herrmannetf.ExpectedResultsetf.CreationDate2015-05-26T22:28:55.523+02:00etf.LastUpdateDate2015-05-26T22:28:55.523+02:00etf.Version1.0.0etf.AssociatedRequirementsetf.StatusIMPLEMENTEDCheck if the feed is available and the Test initialisation phase has been completed successfully.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + No Authorization + + + + + + + + + etf.ShortDescription + + + + etf.Author + Thijs Brentjens + + + etf.LastEditor + Jon Herrmann + + + etf.ExpectedResults + + + + etf.CreationDate + 2015-05-26T22:28:55.523+02:00 + + + etf.LastUpdateDate + 2015-05-26T22:28:55.523+02:00 + + + etf.Version + 1.0.0 + + + etf.AssociatedRequirements + + + + etf.Status + IMPLEMENTED + + + + + Check if the feed is available and the Test initialisation phase has been completed successfully. + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");No AuthorizationTest module for checking the top-level Download Service Feed. +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + No Authorization + + + + + + + + + + + + Test module for checking the top-level Download Service Feed. <br/><br/> -<b>Known limitations: </b> Response schema validation is not implemented yet.SEQUENTIALKnown limitations: </b> Response schema validation is not implemented yet. + + SEQUENTIAL + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -55,19 +194,77 @@ and email address shall be provided as contact information.

-Source: Abstract Test Case 'Download Service feed contact information']]>
ce5a6d78-3a71-4ded-8b2e-fcc4d71d6849PARALLELLRequests the Service Feed and checks the contact information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed contact information']]> +
+ + + + + ce5a6d78-3a71-4ded-8b2e-fcc4d71d6849 + + + PARALLELL + + + + + + Requests the Service Feed and checks the contact information. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:author/atom:name", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:author/atom:email", -);No Authorization + + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -78,15 +275,96 @@ a well-known definition of a coordinate reference system.

-Source: Abstract Test Case 'Download Service feed CRS information']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLRequests the Service Feed and checks the CRS information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed CRS information']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + Requests the Service Feed and checks the CRS information. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[count(atom:category[string-length(@term)>0 and string-length(@label)>0])<1]", "TR.missingCategory" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -100,22 +378,108 @@ of the feed.

-Source: Abstract Test Case 'Download Service feed dataset identifiers']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLRequests the Service Feed and checks the dataset identifiers.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed dataset identifiers']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + Requests the Service Feed and checks the dataset identifiers. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[string-length(inspire_dls:spatial_dataset_identifier_code)=0]", "TR.missingSpatialDatasetIdentifierCode" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[string-length(inspire_dls:spatial_dataset_identifier_namespace)=0]", "TR.missingSpatialDatasetIdentifierNamespace" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -124,17 +488,145 @@ Relevant Requirements:

-Source: Abstract Test Case 'Download Service feed: id']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLfeedIdhttp://www.gis-rest.nrw.de/atomFeed/rest/atom/c2195ebe-dad7-4f5e-9bc3-79a30d3373f3Requests the Service Feed and checks the feed URL.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed: id']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + + + feedId + http://www.gis-rest.nrw.de/atomFeed/rest/atom/c2195ebe-dad7-4f5e-9bc3-79a30d3373f3 + + + + + + + + Requests the Service Feed and checks the feed URL. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "/atom:feed[substring(atom:id,1,4)!='http']", "TR.idNotAnURI" -);No AuthorizationfeedIdsResponseAsXmlGet Service Feed/*:feed/*:idfeedIdTransfer_PropertiestrueRequests the Service Feed and checks the feed URL.<xml-fragment/>${Transfer_Properties#feedId}20030000import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + feedIds + ResponseAsXml + Get Service Feed + /*:feed/*:id + feedId + Transfer_Properties + true + + + + + + + Requests the Service Feed and checks the feed URL. + + <xml-fragment/> + + ${Transfer_Properties#feedId} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -145,14 +637,34 @@ a.equals( "/atom:feed/atom:id", messageExchange.getEndpoint(), "TR.feedIdDoesNotReferToEndpoint" -);import de.interactive_instruments.etf.suim.TranslatableAssertionError; +); + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; def response = context.expand( '${Get Service Feed#Response}' ) if( response.toString() != messageExchange.getResponseContent().toString() ) { throw new TranslatableAssertionError("TR.responseNotEqual", "testStep", "Get Service Feed"); } -No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -162,14 +674,95 @@ identifier for that feed entry.

-Source: Abstract Test Case 'Download Service feed identifiers']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLRequests the Service Feed and checks each feed entry ID.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed identifiers']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + Requests the Service Feed and checks each feed entry ID. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[string-length(atom:id)=0]", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -185,9 +778,86 @@ document.

-Source: Abstract Test Case 'Download Service feed: link OpenSearch Description document']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLopenSearchURLhttp://www.gis-rest.nrw.de/atomFeed/rest/search/GetDownloadServiceMetadata?service_identifier_code=c2195ebe-dad7-4f5e-9bc3-79a30d3373f3Requests the Service Feed and checks OpenSearch description.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed: link OpenSearch Description document']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + + + openSearchURL + http://www.gis-rest.nrw.de/atomFeed/rest/search/GetDownloadServiceMetadata?service_identifier_code=c2195ebe-dad7-4f5e-9bc3-79a30d3373f3 + + + + + + + + Requests the Service Feed and checks OpenSearch description. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:link[@rel='search' and @type='application/opensearchdescription+xml']/@href", @@ -197,9 +867,103 @@ a.exists( a.isTrue( "starts-with(/atom:feed/atom:link[@rel='search' and @type='application/opensearchdescription+xml']/@href, 'http')", "TR.openSearchDescriptionDocumentLinkNotAbsolute" -);No AuthorizationLinkResponseAsXmlGet Service Feed/*:feed/*:link[@rel='search' and @type='application/opensearchdescription+xml']/@hrefopenSearchURLTransfer_PropertiestrueRequests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${Transfer_Properties#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Link + ResponseAsXml + Get Service Feed + /*:feed/*:link[@rel='search' and @type='application/opensearchdescription+xml']/@href + openSearchURL + Transfer_Properties + true + + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${Transfer_Properties#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");No AuthorizationLanguageResponseAsXmlGet OpenSearch Description"no-language-found"openSearchLanguages#TestCase#trueLanguageResponseAsXmlGet OpenSearch Descriptionstring-join(/*:OpenSearchDescription/*:Language, ',')openSearchLanguages#TestCase#trueopenSearchLanguagesde
+ + + + No Authorization + + + + + + + + + + + Language + ResponseAsXml + Get OpenSearch Description + "no-language-found" + openSearchLanguages + #TestCase# + true + + + + + + + + Language + ResponseAsXml + Get OpenSearch Description + string-join(/*:OpenSearchDescription/*:Language, ',') + openSearchLanguages + #TestCase# + true + + + + + + openSearchLanguages + de + + + + + +
Relevant Requirements: @@ -212,14 +976,95 @@ value 'application/xml'

-Source: Abstract Test Case 'Download Service feed: link to WFS Capabilities document']]>
bb8df909-494c-46d8-ace0-31e18b57b12fetf.ShortDescriptionetf.Authoretf.LastEditoretf.ExpectedResultsetf.CreationDateetf.LastUpdateDateetf.Versionetf.AssociatedRequirementsetf.StatusPARALLELLRequests the Service Feed to let the Tester check a link to the WFS Capabilities, if the same data set is available as a WFS 2.0.0 Direct Access Download Service.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed: link to WFS Capabilities document']]> + + + + + + bb8df909-494c-46d8-ace0-31e18b57b12f + + + etf.ShortDescription + + + etf.Author + + + etf.LastEditor + + + etf.ExpectedResults + + + etf.CreationDate + + + etf.LastUpdateDate + + + etf.Version + + + etf.AssociatedRequirements + + + etf.Status + + + + PARALLELL + + + + + + Requests the Service Feed to let the Tester check a link to the WFS Capabilities, if the same data set is available as a WFS 2.0.0 Direct Access Download Service. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "/atom:feed", "TR.manual.checkLinkToDirectAccessDownloadService" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -230,15 +1075,59 @@ Dataset metadata record. This link shall have a 'rel' attribute with a value of

-Source: Abstract Test Case 'Download Service feed links dataset metadata records']]>
Requests the Service Feed and checks if the dataset metadata links are set.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed links dataset metadata records']]> + + + + + + Requests the Service Feed and checks if the dataset metadata links are set. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[string-length(atom:link[@rel='describedby' and @type='application/xml']/@href)=0]", "TR.missingLinkToDatasetMetadataRecord" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -251,14 +1140,58 @@ restrictions for that feed.

-Source: Abstract Test Case 'Download Service feed rights element']]>
Requests the Service Feed and checks if the it provides rights information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed rights element']]> + + + + + + Requests the Service Feed and checks if the it provides rights information. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:rights", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
TODO: The ATS states that hreflang should be compared to /atom:feed/atom:title/@xml:lang . This seems inappropriate -at least an additional comparison against /atom:feed/@xml:lang is required. @@ -274,9 +1207,54 @@ be 'application/atom+xml'.

-Source: Abstract Test Case 'Download Service feed: self-reference link']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesno-languages-foundopenSearchLangPARALLELLRequests the Service Feed and checks if the self-refernce link is correct.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed: self-reference link']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + no-languages-found + + + + openSearchLang + + PARALLELL + + + + + + Requests the Service Feed and checks if the self-refernce link is correct. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -287,7 +1265,12 @@ a.equals( "/atom:feed/atom:link with @rel='self'", messageExchange.getEndpoint(), "TR.incorrectFeedSelfReference" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -299,7 +1282,22 @@ log.info("Language: "+languages) a.exists( "/atom:feed/atom:link[@rel='self' and @type='application/atom+xml' and (@hreflang=/atom:feed/@xml:lang or @hreflang=/atom:feed/atom:title/@xml:lang or contains('"+languages+"', @hreflang))]", "TR.incorrectFeedSelfReferenceLang" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -312,14 +1310,58 @@ populated with a human readable title for the feed entry.

-Source: Abstract Test Case 'Download Service feed: entry titles']]>
Requests the Service Feed and checks if the title is set for each feed entry.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed: entry titles']]> + + + + + + Requests the Service Feed and checks if the title is set for each feed entry. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[string-length(atom:title)=0]", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -329,21 +1371,61 @@ contain the date, time and timezone at which the feed entry was last updated.

-Source: Abstract Test Case 'Download Service feed updated element date']]>
Requests the Service Feed and checks if provides update information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed updated element date']]> + + + + + + Requests the Service Feed and checks if provides update information. + + <xml-fragment/> + + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[year-from-dateTime(xs:dateTime(atom:updated)) <=0]", "TR.missingFeedUpdatedInformation" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isFalse( "//atom:entry/atom:updated/year-from-dateTime( xs:dateTime( . ) ) < 2012", "TR.dateIsBefore2012" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.TimeUtils; final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); @@ -352,7 +1434,22 @@ final String now = TimeUtils.dateToIsoString( new Date() ) a.isFalse( "//atom:entry/atom:updated/xs:dateTime(.) > xs:dateTime('"+now+"')", "TR.dateIsInTheFuture" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -362,21 +1459,60 @@ which the feed was last updated.

-Source: Abstract Test Case 'Download Service feed updated element']]>
Requests the Service Feed and checks if each title has an element 'updated'.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed updated element']]> + + + + + + Requests the Service Feed and checks if each title has an element 'updated'. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isTrue( "year-from-dateTime(xs:dateTime(/atom:feed/atom:updated)) > 0", "TR.missingFeedUpdatedInformation" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isFalse( "//atom:entry/atom:updated/year-from-dateTime( xs:dateTime( . ) ) < 2012", "TR.dateIsBefore2012" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.TimeUtils; final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); @@ -385,7 +1521,22 @@ final String now = TimeUtils.dateToIsoString( new Date() ) a.isFalse( "//atom:entry/atom:updated/xs:dateTime(.) > xs:dateTime('"+now+"')", "TR.dateIsInTheFuture" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -398,14 +1549,58 @@ title for the feed.

-Source: Abstract Test Case 'Download service feed: Provide a title element']]>
Requests the Service Feed and checks if it provides a title.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download service feed: Provide a title element']]> + + + + + + Requests the Service Feed and checks if it provides a title. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:title", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -415,9 +1610,47 @@ datasets as individual entries within an Atom feed.

-Source: Abstract Test Case 'Download service feed: separate entries per dataset']]>
f3bbb312-6c4a-423a-80cc-0dcce1e9a5c9PARALLELLRequests the Service Feed and checks that each each dataset has a separate entry in the service feed.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download service feed: separate entries per dataset']]> + + + + + + f3bbb312-6c4a-423a-80cc-0dcce1e9a5c9 + + + PARALLELL + + + + + + Requests the Service Feed and checks that each each dataset has a separate entry in the service feed. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValues( @@ -425,7 +1658,22 @@ a.equalPathValues( "*:spatial_dataset_identifier_namespace = following-sibling::*/*:spatial_dataset_identifier_namespace])", "0", "TR.uniqueDatasetIdentifiers" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -436,15 +1684,59 @@ and a 'type' attribute with a value 'application/atom+xml'.

-Source: Abstract Test Case 'Download Service feed links dataset feed']]>
Requests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download Service feed links dataset feed']]> + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "/atom:feed/atom:entry[count(atom:link[@rel='alternate' and @type='application/atom+xml'])!=1]", "TR.invalidDatasetFeedLinks" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -456,38 +1748,275 @@ be either 'application/xml'.

-Source: Abstract Test Case 'Download service feed: Provide link to metadata record for the download service']]>
metadataDocumentURLresourceLocatorURLRequests the Service Feed and checks that the metadata record for the download service exists.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Download service feed: Provide link to metadata record for the download service']]> + + + + + + + + metadataDocumentURL + + + + resourceLocatorURL + + + + + + + + + Requests the Service Feed and checks that the metadata record for the download service exists. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:link[@rel='describedby' and @type='application/xml' or @type='application/vnd.ogc.csw.GetRecordByIdResponse_xml']", "TR.missingLinkToMetadataRecordForDownloadService" -);No AuthorizationExtract metadata document URLResponseAsXmlGet Service Feed/*:feed/*:link[@rel='describedby' and (@type='application/xml' or @type='application/vnd.ogc.csw.GetRecordByIdResponse_xml')]/@hrefmetadataDocumentURLTransfer_PropertiestrueRequests the metadata record from the Service Feed.<xml-fragment/>${Transfer_Properties#metadataDocumentURL}20030000import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Extract metadata document URL + ResponseAsXml + Get Service Feed + /*:feed/*:link[@rel='describedby' and (@type='application/xml' or @type='application/vnd.ogc.csw.GetRecordByIdResponse_xml')]/@href + metadataDocumentURL + Transfer_Properties + true + + + + + + + Requests the metadata record from the Service Feed. + + <xml-fragment/> + + ${Transfer_Properties#metadataDocumentURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isTrue( "exists(/gmd:MD_Metadata) or ( count(/*) = 1 and exists(/*/gmd:MD_Metadata) )", "TR.missingMDMetadataRootElement" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:distributionInfo/*/gmd:transferOptions/*/gmd:onLine/*/gmd:linkage/gmd:URL", "TR.missingLinkageResourceLocator" -);No AuthorizationExtract Resource LocatorResponseAsXmlGet Metadata Record//*:distributionInfo/*/*:transferOptions/*/*:onLine/*/*:linkage/*:URLresourceLocatorURLTransfer_PropertiestrueRequests the document from the Resource Locator and compares the describedby link from the 'Get Service Feed' step with the describedby link from this response.<xml-fragment/>${Transfer_Properties#resourceLocatorURL}20030000import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Extract Resource Locator + ResponseAsXml + Get Metadata Record + //*:distributionInfo/*/*:transferOptions/*/*:onLine/*/*:linkage/*:URL + resourceLocatorURL + Transfer_Properties + true + + + + + + + Requests the document from the Resource Locator and compares the describedby link from the 'Get Service Feed' step with the describedby link from this response. + + <xml-fragment/> + + ${Transfer_Properties#resourceLocatorURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValuesInStep( "/*:feed/*:link[@rel='describedby' and @type='application/xml' or @type='application/vnd.ogc.csw.GetRecordByIdResponse_xml']/@href", "Get Service Feed" -);No Authorization
Test module for checking the Dataset Feeds that are referenced by the Download Service Feed. +); + + + + No Authorization + + + + + + + + + + + + Test module for checking the Dataset Feeds that are referenced by the Download Service Feed. <br/><br/> -<b>Known limitations: </b> Response schema validation is not implemented yet.SEQUENTIALTechnical Test Case which iterates over all Dataset feed entries in the Download Service Feed. This test case requires the Test Case 'Links dataset feed' in the 'Download Service Feed' Test Suite to pass.serviceFeedXml4546bada-0307-42ec-883b-25494233e9a5PARALLELLRequests the Service Feed and checks the contact information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +<b>Known limitations: </b> Response schema validation is not implemented yet. + + SEQUENTIAL + + Technical Test Case which iterates over all Dataset feed entries in the Download Service Feed. This test case requires the Test Case 'Links dataset feed' in the 'Download Service Feed' Test Suite to pass. + + + + + + + serviceFeedXml + + + + + + + + + 4546bada-0307-42ec-883b-25494233e9a5 + + + PARALLELL + + + + + + Requests the Service Feed and checks the contact information. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");No AuthorizationTransfer Service FeedResponseAsXmlGet Service FeedserviceFeedXmlTransfer_PropertiestrueIterate over all Feed entries. + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -519,17 +2055,74 @@ Relevant Requirements:

-Source: Abstract Test Case 'Dataset feed contact information']]>
ce5a6d78-3a71-4ded-8b2e-fcc4d71d6849PARALLELL<xml-fragment/>${#TestSuite#feedEntryURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Dataset feed contact information']]> + + + + + + ce5a6d78-3a71-4ded-8b2e-fcc4d71d6849 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 200 + + + + + 30000 + + + + + + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:author/atom:name", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:author/atom:email", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -541,15 +2134,88 @@ Relevant Requirements:

-Source: Abstract Test Case 'Dataset feed HTTP URI']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Dataset feed HTTP URI']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "/atom:feed[substring(atom:id,1,4)!='http']", "TR.idNotAnURI" -);No AuthorizationFedd IDResponseAsXmlGet Dataset Feed/*:feed/*:idEndpointGet Dataset Feed by IDtrue<xml-fragment/>http://www.gis-rest.nrw.de/atomFeed/rest/atom/ce127d47-27d1-4f49-a4dc-65cc1dac339e20030000import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Fedd ID + ResponseAsXml + Get Dataset Feed + /*:feed/*:id + Endpoint + Get Dataset Feed by ID + true + + + + + + + + <xml-fragment/> + + http://www.gis-rest.nrw.de/atomFeed/rest/atom/ce127d47-27d1-4f49-a4dc-65cc1dac339e + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -560,14 +2226,34 @@ a.equals( "/atom:feed/atom:id", messageExchange.getEndpoint(), "TR.feedIdDoesNotReferToEndpoint" -);import de.interactive_instruments.etf.suim.TranslatableAssertionError; +); + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; def response = context.expand( '${Get Dataset Feed#Response}' ) if( response.toString() != messageExchange.getResponseContent().toString() ) { throw new TranslatableAssertionError("TR.responseNotEqual", "testStep", "Get Dataset Feed"); } -No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -580,23 +2266,143 @@ Relevant Requirements:

-Source: Abstract Test Case 'Link download dataset']]>
<xml-fragment/>${#TestSuite#feedEntryURL}import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Link download dataset']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.existsNonEmptyText("/atom:feed/atom:title");30000200import de.interactive_instruments.etf.suim.* +a.existsNonEmptyText("/atom:feed/atom:title"); + + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//atom:entry/atom:link[(@rel='alternate' and @type!='application/atom+xml' ) or (@rel='section')]/@href", "TR.missingOneFeedEntryWithDlFile" -);No AuthorizationTrasnfer URLResponseAsXmlGet Dataset Feed//*:entry/*:link[(@rel='alternate' and @type!='application/atom+xml' ) or (@rel='section')]/@hrefEndpointGet filetrue<xml-fragment/>https://www.opengeodata.nrw.de/produkte/infrastruktur_bauen_wohnen/borisplus/BRW/BRW2017_EPSG25832_SHAPE.zip30000200, 204, 301, 302, 303No AuthorizationA link "length" attribute (providing the length of the linked resource in octets *) must be provided if possible.<xml-fragment/>${#TestSuite#feedEntryURL}import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Trasnfer URL + ResponseAsXml + Get Dataset Feed + //*:entry/*:link[(@rel='alternate' and @type!='application/atom+xml' ) or (@rel='section')]/@href + Endpoint + Get file + true + + + + + + + + <xml-fragment/> + + https://www.opengeodata.nrw.de/produkte/infrastruktur_bauen_wohnen/borisplus/BRW/BRW2017_EPSG25832_SHAPE.zip + + + + 30000 + + + + + 200, 204, 301, 302, 303 + + + + No Authorization + + + + + + + + + + A link "length" attribute (providing the length of the linked resource in octets *) must be provided if possible. + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.existsNonEmptyText("/atom:feed/atom:title");30000200import de.interactive_instruments.etf.suim.* +a.existsNonEmptyText("/atom:feed/atom:title"); + + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//atom:entry/atom:link[(@rel='alternate' and @type!='application/atom+xml' and number(@length) > 0) or (@rel='section')]/@href", "TR.manual.checkLengthOfDlFile" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -608,12 +2414,50 @@ Relevant Requirements:

-Source: Abstract Test Case 'Rights element']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Rights element']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:rights", -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Known limitations: The ATS states that the test case needs to check wheter the value is 'alphanumeric'. This is inappropriate, since the value can contain characters that are not in the range of A-Z,a-z and 0-9, for instance text strings in greek. @@ -625,9 +2469,47 @@ Relevant Requirements:

-Source: Abstract Test Case 'Title']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Title']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.existsNonEmptyText("/atom:feed/atom:title");No Authorization
+ + + + No Authorization + + + + + + + + + + + @@ -640,18 +2522,51 @@ Relevant Requirements:

-Source: Abstract Test Case 'Updated element']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Updated element']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isTrue( "year-from-dateTime(xs:dateTime(/atom:feed/atom:updated)) > 0", "TR.missingFeedUpdatedInformation" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isFalse( "//atom:entry/atom:updated/year-from-dateTime( xs:dateTime( . ) ) < 2012", "TR.dateIsBefore2012" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.TimeUtils; final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); @@ -660,7 +2575,22 @@ final String now = TimeUtils.dateToIsoString( new Date() ) a.isFalse( "//atom:entry/atom:updated/xs:dateTime(.) > xs:dateTime('"+now+"')", "TR.dateIsInTheFuture" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -672,13 +2602,51 @@ Relevant Requirements:

-Source: Abstract Test Case 'Each entry has CRS information']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Each entry has CRS information']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[count(atom:category[string-length(@term)>0 and string-length(@label)>0])<1]", "TR.missingCategory" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +

@@ -690,7 +2658,30 @@ Relevant Requirements:

-Source: Abstract Test Case 'Language for download link']]>
<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Language for download link']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -701,7 +2692,22 @@ a.isTrue( "count(//*:entry/*:link[(@rel='alternate' and @type!='application/atom+xml') or (@rel='section')]/@hreflang) = "+ "count(//*:entry/*:link[(@rel='alternate' and @type!='application/atom+xml') or (@rel='section')])", "TR.missingLanguageForDownloadLink" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -714,9 +2720,37 @@ INSPIRE registry the value of the 'type' attribute shall be 'text/html'.

-Source: Abstract Test Case 'Links for Spatial Object Types']]>
<xml-fragment/>${#TestSuite#feedEntryURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Links for Spatial Object Types']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( @@ -728,7 +2762,22 @@ a.existsNonEmptyText( "/atom:feed/atom:link[@rel='describedby' and @type='text/html']/@href", "/atom:feed/atom:link[@rel='describedby' and @type='text/html']/@href", "TR.missingLinkToRegistry" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -740,14 +2789,57 @@ Relevant Requirements:

-Source: Abstract Test Case 'Multiple links for multiple physical files']]>
<xml-fragment/>${#TestSuite#feedEntryURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Multiple links for multiple physical files']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//*:entry[count(./*:link[@rel='section']) eq 1]", "TR.multipleLinksForMultipleFilesExpected" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +

@@ -758,29 +2850,138 @@ Relevant Requirements:

-Source: Abstract Test Case 'Separate entries for each format/CRS combination']]>
categorieshttp://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832b87b5132-cb6c-44cb-9215-e588fc1e3344PARALLELLRequests the Service Feed and checks the CRS information.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Separate entries for each format/CRS combination']]> + + + + + + + + categories + http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832,http://www.opengis.net/def/crs/EPSG/0/25832 + + + + + + + + b87b5132-cb6c-44cb-9215-e588fc1e3344 + + + PARALLELL + + + + + + Requests the Service Feed and checks the CRS information. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[count(atom:category[string-length(@term)>0 and string-length(@label)>0])<1]", "TR.missingCategory" -);No AuthorizationCategoriesResponseAsXmlGet Service Feedstring-join(//*:entry/*:category[string-length(@term)>0 and string-length(@label)>0]/@term, ',')categoriesTransfer_PropertiestrueRequests the Dataset Feed and checks the CRS and alternate link combinations.<xml-fragment/>${#TestSuite#feedEntryURL}30000200import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + + + + + + Categories + ResponseAsXml + Get Service Feed + string-join(//*:entry/*:category[string-length(@term)>0 and string-length(@label)>0]/@term, ',') + categories + Transfer_Properties + true + + + + + + + Requests the Dataset Feed and checks the CRS and alternate link combinations. + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 30000 + + + + + 200 + + + + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equals( "count(//atom:entry[count(atom:category[@term])>1])", "//atom:entry[count(atom:category[@term])>1]", "0", "TR.exactlyOneCategoryPerEntry" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equals( "count(//atom:entry[count(distinct-values(atom:link[@rel='alternate']/@type))>1])", "//atom:entry[count(distinct-values(atom:link[@rel='alternate']/@type))>1]", "0", "TR.exactlyOneAlternateLinkTypePerEntry" -); +); + + + + + + { let $sortedValues := for $entry in //*:entry @@ -796,7 +2997,17 @@ a.equals( else () } -]]><etfTranslate what='TR.uniqueAlternateLinkTypes'/>falsefalsefalseimport de.interactive_instruments.etf.suim.* +]]> + + <etfTranslate what='TR.uniqueAlternateLinkTypes'/> + false + false + false + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); final String terms = context.expand( '${Transfer_Properties#categories}' ); @@ -805,7 +3016,22 @@ log.info("Download Service Feed terms: "+terms); a.notExists( "//atom:entry/atom:category[string-length(@term)>0 and string-length(@label)>0 and not(contains('"+terms+"', @term))]", "TR.atLeastOneCategoryNotInServiceFeed" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +

@@ -818,49 +3044,180 @@ Relevant Requirements:

-Source: Abstract Test Case 'Use INSPIRE media-types only']]>
mediaTypesx-shapefilex-filegdbgml+xmlx-gmzvnd.google-earth.kml+xmlvnd.google-earth.kmzx-ecwx-ascii-gridx-oracledumpx-lasx-lazx-tabx-tab-rasterx-worldfile tiffjp2 csvmediaTypeUrlhttps://inspire.ec.europa.eu/media-types/textGet the list of INSPIRE media types from https://inspire.ec.europa.eu/media-types with 'Accept'-Header 'application/atom+xml'<entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/>https://inspire.ec.europa.eu/media-types30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Use INSPIRE media-types only']]> + + + + + + + + mediaTypes + x-shapefilex-filegdbgml+xmlx-gmzvnd.google-earth.kml+xmlvnd.google-earth.kmzx-ecwx-ascii-gridx-oracledumpx-lasx-lazx-tabx-tab-rasterx-worldfile tiffjp2 csv image/tiff application=geotiff + + + mediaTypeUrl + https://inspire.ec.europa.eu/media-types/text + + + + + + + + Get the list of INSPIRE media types from https://inspire.ec.europa.eu/media-types with 'Accept'-Header 'application/atom+xml' + + <entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/> + + https://inspire.ec.europa.eu/media-types/media-types.es.atom + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/atom:feed/atom:id[contains(., '://inspire.ec.europa.eu/media-types')]", -);BasicBasicGlobal HTTP SettingsGet the list of INSPIRE media sub types with 'Accept'-Header 'application/atom+xml'<entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/>${Transfer_Properties#mediaTypeUrl}30000200import de.interactive_instruments.etf.suim.* +ph.disableTestSteps(["Get INSPIRE Media Subtype"]); + + + + + + Get the list of INSPIRE media sub types with 'Accept'-Header 'application/atom+xml' + + <entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/> + + ${Transfer_Properties#mediaTypeUrl} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");BasicBasicGlobal HTTP SettingsTransfer_Properties#mediaTypeUrlTransfer_Properties#mediaTypeUrlTEMPLATETransfer_Properties#mediaTypeUrlGet the Dataset Feed and check if it contains valid INSPIRE media types<xml-fragment/>${#TestSuite#feedEntryURL}20030000import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + Transfer_Properties#mediaTypeUrl + Transfer_Properties#mediaTypeUrl + TEMPLATE + Transfer_Properties#mediaTypeUrl + + + + + + + + Get the Dataset Feed and check if it contains valid INSPIRE media types + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + + $entry/atom:id, $entry/atom:link[@rel='alternate']/@type) } -]]><etfTranslate what="TR.notAnInspireMediaType"/>falsefalsefalseNo Authorization
+]]> + + <etfTranslate what="TR.notAnInspireMediaType"/> + false + false + false + + + + No Authorization + + + + + + + + + + +


@@ -884,14 +3261,64 @@ Relevant Requirements:

-Source: Abstract Test Case 'Provide guidance for downloading multiple physical files']]>
<xml-fragment/>${#TestSuite#feedEntryURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Provide guidance for downloading multiple physical files']]> + + + + + + + <xml-fragment/> + + ${#TestSuite#feedEntryURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.isTrue( "empty(//atom:entry[./atom:link[@rel='section'] and count(./atom:link[@rel='alternate'])=0 and count(./atom:content) = 0])", "TR.missingGuidanceForDownloadingMultipleFiles" -);No Authorization
feedXml +); + + + + No Authorization + + + + + + + + + + + + + + + + feedXml + + INSPIRE Download Service Feed: Atom-Feed Digitale Orthophotos Bodenauflösung 20 cm @@ -916,12 +3343,76 @@ a.isTrue( https://www.opengeodata.nrw.de/produkte/geobasis/dop/dop20/c72796a4-71af-421d-8a2e-d220f9de6c94 2017-02-28T22:00:00Z -
Hinweis: Diese Daten stehen unter der Datenlizenz Deutschland Namensnennung 2.0, Bereitsteller: Land NRW (2017). Informationen zum korrekten Quellenvermerk finden Sie hier.

Weiterführende Informationen:
http://www.bezreg-koeln.nrw.de/brk_internet/geobasis/luftbilderzeugnisse/digitale_orthophotos/index.html
Metadaten im GEOportal.NRW]]]]>> +
Hinweis: Diese Daten stehen unter der Datenlizenz Deutschland Namensnennung 2.0, Bereitsteller: Land NRW (2017). Informationen zum korrekten Quellenvermerk finden Sie hier.

Weiterführende Informationen:
http://www.bezreg-koeln.nrw.de/brk_internet/geobasis/luftbilderzeugnisse/digitale_orthophotos/index.html
Metadaten im GEOportal.NRW]]]]> + > + 50.30 5.80 52.60 9.50 DOP20 https://registry.gdi-de.org/id/de.nw -]]>dataFeedURLhttps://www.opengeodata.nrw.de/produkte/geobasis/dop/dop20/f76697a2-42d8-486e-9f30-c3b4c71506e2dataSetURLhttps://www.opengeodata.nrw.de/produkte/geobasis/dop/dop20/dop20_05366044_Zülpich_EPSG25832_JPEG2000.zipdataFeedURLEncodedhttps://www.opengeodata.nrw.de/produkte/geobasis/dop/dop20/f76697a2-42d8-486e-9f30-c3b4c71506e2mediaTypesapplication/x-shapefile,application/x-filegdb,image/tiff,application/gml+xml,application/x-gmz,application/vnd.google-earth.kml+xml,application/vnd.google-earth.kmz,image/jp2,application/x-ecw,application/x-ascii-grid,application/x-oracledump,application/x-las,application/x-laz,application/x-tab,application/x-tab-raster,text/csv,application/x-worldfile<xml-fragment/>${#Project#serviceEndpoint}200,301,302,303BasicBasicGlobal HTTP SettingsfeedXmlResponseAsXmlGetServiceFeedfeedXmlPropertiestrue<xml-fragment/>${#dataFeedURL}declare namespace atom='http://www.w3.org/2005/Atom'; + + + + + + + + <xml-fragment/> + + ${#dataFeedURL} + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -962,7 +3464,14 @@ if ($linkself='${#dataFeedURLEncoded}') then "" else "The Atom feed does NOT contain a link to itself including a language reference. Check the element /atom:feed/atom:link with @rel='self'." } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -974,7 +3483,14 @@ if (string-length($title)=0) then "The Atom feed does NOT contain a Feed Title." else "" } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -986,7 +3502,14 @@ if ($atomid!='${#dataFeedURLEncoded}') then concat("The Atom feed id ", $atomid," does NOT refer to the self URL (",'${#dataFeedURLEncoded}',").") else "" } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -998,7 +3521,14 @@ if (string-length($rights)=0) then "The Atom feed does NOT contain rights information." else "" } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1010,7 +3540,14 @@ if ($updated > 0) then "" else "The Atom feed does NOT contain updated information." } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1022,7 +3559,14 @@ if (exists($author)) then "" else "The Atom feed does NOT contain an author name and/or email address." } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1034,7 +3578,14 @@ if ($nrdatalinks > 0) then "" else "The Atom feed does NOT contain any entries with a correct link for data. Check if the entries contain alternate links (not referring to another Atom feed) or section links for multiple files." } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1044,7 +3595,14 @@ for $entry in //atom:entry[./atom:link[@rel='alternate' and @type!=../atom:link[ return concat ("The entry with id: ",$entry/atom:id," does not contain separate entries for each media type/CRS combination. This entry's link for download has different (media) types.") } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1054,7 +3612,14 @@ for $entry in //atom:entry[./atom:category[@term!=../atom:category[1]/@term]] return concat ("The entry with id: ",$entry/atom:id," does not contain separate entries for each media type/CRS combination. This entry's category terms are not the same, indicating that multiple CRSes are offered in the same entry.") } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1066,7 +3631,14 @@ if (exists($sodesc)) then "" else " there is no link to a Spatial Object description. That is: a link with type='text/html' and rel='describedby'." } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1076,7 +3648,14 @@ for $entry in //atom:entry[count(./atom:link[@rel='section'])=1] return concat ("If a section link is provided (for multiple files) then there should be more than 1 section link. The entry with id ", $entry/atom:id , " has only 1 section link.") } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1086,7 +3665,14 @@ for $entry in //atom:entry[./atom:link[@rel='section'] and count(./atom:link[@re return concat ("If multiple files are provided, then the links shall be of rel='section' and there shall be a content element or alternate link as a description. The entry with id ", $entry/atom:id , " does not have this.") } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; @@ -1098,7 +3684,14 @@ where contains('${#mediaTypes}', $entry/atom:link[@rel='alternate']/@type)!=true return concat("The alternate link ",$entry/atom:link[@rel='alternate']/@href," for entry with id ",$entry/atom:id," offers a media type '",$entry/atom:link[@rel='alternate']/@type,"' that is not in the INSPIRE list at https://inspire.ec.europa.eu/media-types/. ") } -</result><result>AssertionFailures:</result>falsedeclare namespace atom='http://www.w3.org/2005/Atom'; +</result> + <result>AssertionFailures:</result> + false + + + + + declare namespace atom='http://www.w3.org/2005/Atom'; declare namespace georss='http://www.georss.org/georss'; declare namespace xlink='http://www.w3.org/1999/xlink'; @@ -1108,7 +3701,39 @@ for $entry in //atom:entry[count(./atom:category[string-length(@term)>0 and stri return concat ("Each entry shall have one element category for the CRS. The entry with id ", $entry/atom:id , " does not have 1 element, but :" , count(./atom:category[string-length(@term)>0 and string-length(@label)>0]), ". ") } -</result><result>AssertionFailures:</result>falseBasicBasicGlobal HTTP SettingsdataFeedXmlResponseAsXmlValidateDatasetFeed#Project#true<xml-fragment/>${#dataSetURL}30000BasicBasicGlobal HTTP Settingssave_responsesTRUEtraces_dir../../../logs/traces/MAIN_TESTSTEPValidateDatasetFeedetf.ShortDescriptionetf.AuthorThijs Brentjensetf.LastEditorJon Herrmannetf.ExpectedResultsetf.CreationDate2015-05-26T22:28:59.403+02:00etf.LastUpdateDate2015-05-26T22:28:59.404+02:00etf.Version1.0.0etf.AssociatedRequirementsetf.StatusIMPLEMENTEDfeedEntryURLTest module for checking the OpenSearch Description which is referenced by a Service Feed. +} + + + + + + + <xml-fragment/> + + ${#dataSetURL} + + + + 30000 + + + + Basic + Basic + Global HTTP Settings + + + + + + + + + save_responses + TRUE + + + traces_dir + ../../../logs/traces/ + + + MAIN_TESTSTEP + ValidateDatasetFeed + + + etf.ShortDescription + + + + etf.Author + Thijs Brentjens + + + etf.LastEditor + Jon Herrmann + + + etf.ExpectedResults + + + + etf.CreationDate + 2015-05-26T22:28:59.403+02:00 + + + etf.LastUpdateDate + 2015-05-26T22:28:59.404+02:00 + + + etf.Version + 1.0.0 + + + etf.AssociatedRequirements + + + + etf.Status + IMPLEMENTED + + + + + + feedEntryURL + + + + + + Test module for checking the OpenSearch Description which is referenced by a Service Feed. <br/><br/> -<b>Known limitations: </b> Response schema validation is not implemented yet.SEQUENTIALTechnical Test Case to retrieve and set theURL to the OpenSearch Description. This Test Case depends on the Test Case 'Link to OpenSearch Description document' in the 'Download Service Feed' test module.6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLRequests the Service Feed and set the URL to the OpenSearch description.<xml-fragment/>${#Project#serviceEndpoint}20030000import de.interactive_instruments.etf.suim.* +<b>Known limitations: </b> Response schema validation is not implemented yet. + + SEQUENTIAL + + Technical Test Case to retrieve and set theURL to the OpenSearch Description. This Test Case depends on the Test Case 'Link to OpenSearch Description document' in the 'Download Service Feed' test module. + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + Requests the Service Feed and set the URL to the OpenSearch description. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");No AuthorizationExtract OpenSearch Description URLResponseAsXmlGet Service Feed/*:feed/*:link[@rel='search' and @type='application/opensearchdescription+xml']/@hrefopenSearchURL#TestSuite#true + + + + No Authorization + + + + + + + + + + + Extract OpenSearch Description URL + ResponseAsXml + Get Service Feed + /*:feed/*:link[@rel='search' and @type='application/opensearchdescription+xml']/@href + openSearchURL + #TestSuite# + true + + + + + + + +
Relevant Requirements: @@ -1142,15 +3919,72 @@ code. The first 'Language' element shall contain the Default Language.

-Source: Abstract Test Case 'OpenSearch Description provides languages']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLRequests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description provides languages']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Language", "TR.missingAtLeastOneOpenSearchDescriptionLanguage" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -1165,30 +3999,117 @@ value 'results'.

-Source: Abstract Test Case 'OpenSearch Description one URL Get Spatial Dataset operation']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLgetSpatialDatasetUrlmimeTypeRequests the OpenSearch Description.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description one URL Get Spatial Dataset operation']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + + + getSpatialDatasetUrl + + + + mimeType + + + + + + + + + Requests the OpenSearch Description. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Url[@rel='results' and starts-with(@template,'http') and contains(@template,'crs') and contains(@template,'spatial_dataset_identifier_code') and contains(@template,'spatial_dataset_identifier_namespace') and contains(@template,'language')]", "TR.missingAtLeastOneOpenSearchDescriptionUrl" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @language] or /os:OpenSearchDescription/os:Language", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @inspire_dls:crs]", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @inspire_dls:spatial_dataset_identifier_namespace and @inspire_dls:spatial_dataset_identifier_code]", -);No AuthorizationChecks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document<entry key="Accept" value="${Transfer_Properties#mimeType}" xmlns="http://eviware.com/soapui/config"/>${Transfer_Properties#getSpatialDatasetUrl}20030000import de.interactive_instruments.etf.suim.TranslatableAssertionError; +}]]> + + + + + + + Checks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document + + <entry key="Accept" value="${Transfer_Properties#mimeType}" xmlns="http://eviware.com/soapui/config"/> + + ${Transfer_Properties#getSpatialDatasetUrl} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.responseHeaders["Content-Type"]==null) { throw new TranslatableAssertionError("TR.missingContentType"); @@ -1281,7 +4227,22 @@ String mimeType = context.expand('${Transfer_Properties#mimeType}'); if(!messageExchange.responseHeaders['Content-Type'][0].contains(mimeType)) { throw new TranslatableAssertionError("TR.unexpectedContentType", "expected", mimeType, "actual", messageExchange.responseHeaders['Content-Type'][0]); -}No Authorization
+ + + + No Authorization + + + + + + + + + + +
Relevant Requirements: @@ -1295,24 +4256,106 @@ parameter. The 'Url' element shall have an attribute 'type' with a value of

-Source: Abstract Test Case 'OpenSearch Description URL Describe Spatial Dataset operation']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLdescribeSpatialDataSetUrlhttp://www.gis-rest.nrw.de/atomFeed/rest/search/GetSpatialDataset?spatial_dataset_identifier_namespace=https://registry.gdi-de.org/id/de.nw&spatial_dataset_identifier_code=OGANRWBORISBRW&language=demimeTypeapplication/atom+xmlRequests the OpenSearch Description.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description URL Describe Spatial Dataset operation']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + + + describeSpatialDataSetUrl + http://www.gis-rest.nrw.de/atomFeed/rest/search/GetSpatialDataset?spatial_dataset_identifier_namespace=https://registry.gdi-de.org/id/de.nw&spatial_dataset_identifier_code=OGANRWBORISBRW&language=de + + + mimeType + application/atom+xml + + + + + + + + Requests the OpenSearch Description. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Url[@rel='describedby' and @type='application/atom+xml' and starts-with(@template,'http') and contains(@template,'spatial_dataset_identifier_code') and contains(@template,'spatial_dataset_identifier_namespace') and contains(@template,'language')]", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @language] or /os:OpenSearchDescription/os:Language", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @inspire_dls:spatial_dataset_identifier_namespace and @inspire_dls:spatial_dataset_identifier_code]", -);No AuthorizationChecks if the content-type of the Describe Spatial Dataset response equals 'application/atom+xml'.<entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/>${Transfer_Properties#describeSpatialDataSetUrl}20030000import de.interactive_instruments.etf.suim.TranslatableAssertionError; +}]]> + + + + + + + Checks if the content-type of the Describe Spatial Dataset response equals 'application/atom+xml'. + + <entry key="Accept" value="application/atom+xml" xmlns="http://eviware.com/soapui/config"/> + + ${Transfer_Properties#describeSpatialDataSetUrl} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.responseHeaders["Content-Type"]==null) { throw new TranslatableAssertionError("TR.missingContentType"); @@ -1396,7 +4464,22 @@ if(messageExchange.responseHeaders["Content-Type"]==null) { if(!messageExchange.responseHeaders['Content-Type'][0].contains("application/atom+xml")) { throw new TranslatableAssertionError("TR.unexpectedContentType", "expected", "application/atom+xml", "actual", messageExchange.responseHeaders['Content-Type'][0]); -}No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -1411,25 +4494,125 @@ default ones by the service provider.

-Source: Abstract Test Case 'OpenSearch Description Query examples for each dataset']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELL458af16e-a708-4b83-96f2-f13ec03c6bfdPARALLELL4ab8b4e8-abd9-4c93-9fb4-ca1921cca478PARALLELLdescribeSpatialDataSetUrlhttp://www.gis-rest.nrw.de/atomFeed/rest/search/GetSpatialDataset?spatial_dataset_identifier_namespace=https://registry.gdi-de.org/id/de.nw&spatial_dataset_identifier_code=OGANRWBORISBRW&language=demimeTypeapplication/atom+xmlRequests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description Query examples for each dataset']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + 458af16e-a708-4b83-96f2-f13ec03c6bfd + + + PARALLELL + + + + + + 4ab8b4e8-abd9-4c93-9fb4-ca1921cca478 + + + PARALLELL + + + + + + + + describeSpatialDataSetUrl + http://www.gis-rest.nrw.de/atomFeed/rest/search/GetSpatialDataset?spatial_dataset_identifier_namespace=https://registry.gdi-de.org/id/de.nw&spatial_dataset_identifier_code=OGANRWBORISBRW&language=de + + + mimeType + application/atom+xml + + + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Url[@rel='results' and starts-with(@template,'http') and contains(@template,'crs') and contains(@template,'spatial_dataset_identifier_code') and contains(@template,'spatial_dataset_identifier_namespace') and contains(@template,'language')]", "TR.missingAtLeastOneOpenSearchDescriptionUrl" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @inspire_dls:spatial_dataset_identifier_namespace and @inspire_dls:spatial_dataset_identifier_code]" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Query[@role='example' and @inspire_dls:crs]" -);No AuthorizationChecks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document<xml-fragment/>${Transfer_Properties#describeSpatialDataSetUrl}20030000import de.interactive_instruments.etf.suim.* +}]]> + + + + + + + Checks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document + + <xml-fragment/> + + ${Transfer_Properties#describeSpatialDataSetUrl} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/atom:feed", "TR.missingFeedRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//atom:entry[count(atom:category[string-length(@term)>0 and string-length(@label)>0])<1]", "TR.missingCategory" -);No AuthorizationChecks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document<xml-fragment/>${Transfer_Properties#getSpatialDatasetUrl}200,206,301,302,30330000import de.interactive_instruments.etf.suim.* +}]]> + + + + + + + Checks if the content-type of the Get Spatial Dataset response equals the media-type from the Open Search Description document + + <xml-fragment/> + + ${Transfer_Properties#getSpatialDatasetUrl} + + + + 200,206,301,302,303 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/atom:feed", "TR.missingFeedRootElement");No AuthorizationTransfer_Properties#getSpatialDatasetUrlTransfer_Properties#getSpatialDatasetUrlTEMPLATETransfer_Properties#getSpatialDatasetUrl
+ + + + No Authorization + + + + + + Transfer_Properties#getSpatialDatasetUrl + Transfer_Properties#getSpatialDatasetUrl + TEMPLATE + Transfer_Properties#getSpatialDatasetUrl + + + + + + + + +
Relevant Requirements: @@ -1613,9 +4888,51 @@ attribute shall be the HTTP URI of the document.

-Source: Abstract Test Case 'OpenSearch Description URI to itself']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLRequests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description URI to itself']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* import de.interactive_instruments.xtf.* SOAPUI_I.init(log, context, messageExchange) final ProjectHelper ph = new ProjectHelper() @@ -1626,7 +4943,22 @@ a.equals( "/os:OpenSearchDescription/os:Url", messageExchange.getEndpoint(), "TR.incorrectFeedSelfReference" -);No Authorization
+ + + + No Authorization + + + + + + + + + + +
@@ -1638,18 +4970,115 @@ element shall be 'results', the value of the 'type' attribute shall be 'text/htm

-Source: Abstract Test Case 'OpenSearch Description URL generic search queries']]>
6359d6da-1e37-423f-b543-018979b665e2openSearchLanguagesPARALLELLgeneircSearchQueriesUrlhttps://metaver.de/search/dls/service/E8014E42-E662-4D73-BF9A-4017CBB3D26A?q={searchTerms}Requests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${#TestSuite#openSearchURL}20030000import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'OpenSearch Description URL generic search queries']]> + + + + + + 6359d6da-1e37-423f-b543-018979b665e2 + + + openSearchLanguages + + + + PARALLELL + + + + + + + + geneircSearchQueriesUrl + https://metaver.de/search/dls/service/E8014E42-E662-4D73-BF9A-4017CBB3D26A?q={searchTerms} + + + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${#TestSuite#openSearchURL} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/os:OpenSearchDescription", "TR.missingOpenSearchDescriptionRootElement"); + + + + + import de.interactive_instruments.etf.suim.* final Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/os:OpenSearchDescription/os:Url[@rel='results' and @type='text/html']/@template", "TR.missingGenericSearchQueriesUrl" -);No AuthorizationGeneric search queries URLResponseAsXmlGet OpenSearch Descriptiondeclare namespace os='http://a9.com/-/spec/opensearch/1.1/'; - -/os:OpenSearchDescription/os:Url[@rel='results' and @type='text/html']/@template -geneircSearchQueriesUrlTransfer_PropertiestrueRequests the Service Feed and checks if the dataset feed links are correct.<xml-fragment/>${Transfer_Properties#geneircSearchQueriesUrl}20030000import de.interactive_instruments.etf.suim.TranslatableAssertionError; +); + + + + No Authorization + + + + + + + + + + + Generic search queries URL + ResponseAsXml + Get OpenSearch Description + declare namespace os='http://a9.com/-/spec/opensearch/1.1/'; /os:OpenSearchDescription/os:Url[@rel='results' and @type='text/html']/@template + + geneircSearchQueriesUrl + Transfer_Properties + true + + + + + + + Requests the Service Feed and checks if the dataset feed links are correct. + + <xml-fragment/> + + ${Transfer_Properties#geneircSearchQueriesUrl} + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.responseHeaders["Content-Type"]==null) { throw new TranslatableAssertionError("TR.missingContentType"); @@ -1657,7 +5086,85 @@ if(messageExchange.responseHeaders["Content-Type"]==null) { if(!messageExchange.responseHeaders['Content-Type'][0].startsWith('text/html')) { throw new TranslatableAssertionError("TR.unexpectedContentType", "expected", "text/html", "actual", messageExchange.responseHeaders['Content-Type'][0]); -}No Authorization
openSearchURLhttp://www.gis-rest.nrw.de/atomFeed/rest/search/GetDownloadServiceMetadata?service_identifier_code=c2195ebe-dad7-4f5e-9bc3-79a30d3373f3
serviceEndpointetf.ignore.propertiesauthUser, authPwd, authMethod, serviceFeedXml, dataFeedXml, serviceMetadataUrl, MdIdentifiersList, mdIdentifiersDatasetMetadata, openSearchDescriptionUrlauthUserauthPwdauthMethodbasicetf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.supported.test.object.type.idsEID49d881ae-b115-4b91-aabe-31d5791bce52etf.authorGeonovum and interactive instrumentsetf.last.editorinteractive instruments GmbHetf.creation.date2017-02-17T00:00:00etf.version1.0.5etf.last.update.date2019-09-24T14:42:00import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; +} + + + + No Authorization + + + + + + + + + + + openSearchURL + http://www.gis-rest.nrw.de/atomFeed/rest/search/GetDownloadServiceMetadata?service_identifier_code=c2195ebe-dad7-4f5e-9bc3-79a30d3373f3 + + + + + + serviceEndpoint + + + + etf.ignore.properties + authUser, authPwd, authMethod, serviceFeedXml, dataFeedXml, serviceMetadataUrl, MdIdentifiersList, mdIdentifiersDatasetMetadata, openSearchDescriptionUrl + + + authUser + + + + authPwd + + + + authMethod + basic + + + etf.tag.ids + EIDe51620af-bcf5-4719-ab0e-ef6226a572fa + + + etf.translation.template.collection.id + EIDfadd4929-fa60-4781-b658-703bbfe3f4eb + + + etf.supported.test.object.type.ids + EID49d881ae-b115-4b91-aabe-31d5791bce52 + + + etf.author + Geonovum and interactive instruments + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2017-02-17T00:00:00 + + + etf.version + 1.0.7 + + + etf.last.update.date + 2021-06-30T12:30:00 + + + + + + + import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep import com.eviware.soapui.model.testsuite.TestStepResult; @@ -1669,9 +5176,7 @@ def requirements = project.getTestSuiteByName("TestSetup")?. log.info("Results: "); for( testSuiteR in runner?.getResults() ) { for( testCaseR in testSuiteR?.getResults() ) { - for( testStepR in testCaseR?.getResults() ) { - - if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { + for( testStepR in testCaseR?.getResults() ) { if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { if (testStepR.testStep instanceof HttpTestRequestStep || testStepR.testStep instanceof RestTestRequestStep) { testStepR.testStep.testRequest.assertionList.each{ // Extract ID which is seperated with a whitespace and a doublecolon @@ -1703,4 +5208,6 @@ for( testSuiteR in runner?.getResults() ) { } } } - + + + diff --git a/service/ds-sos-pre-defined-soapui-project.xml b/service/ds-sos-pre-defined-soapui-project.xml index e713c8cfd..3bc8f6df2 100644 --- a/service/ds-sos-pre-defined-soapui-project.xml +++ b/service/ds-sos-pre-defined-soapui-project.xml @@ -1,6 +1,19 @@ -
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'Download Service Pre-defined SOS']]>
SEQUENTIAL<xml-fragment/>${#Project#serviceEndpoint}600000200assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml'));No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version} + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 600000 + + + + + 200 + + + + + + assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')); + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + + + + + + + + + + + + + + + + SEQUENTIALTest that the Observations Offerings have an Identifier, and it is a unique URI according to OGC SWE Service Model.

-

More information: Observations Offerings Identifier

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + +
+ +
+ + + SEQUENTIAL + + + Test that the Observations Offerings have an Identifier, and it is a unique URI according to OGC SWE Service Model.

+

More information: Observations Offerings Identifier

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + +
Test that the ObservationOfferings available in the service are retrievable using a GetObservation request.

-

More information: Observations Offerings Separated and Retrievable

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}600000200No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetObservationQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}offering${#TestCase#offering}QUERYws2500observedProperty${#TestCase#observedProperty}QUERYAirTemperature + + + +
+ + + Test that the ObservationOfferings available in the service are retrievable using a GetObservation request.

+

More information: Observations Offerings Separated and Retrievable

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 600000 + + + + + 200 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetObservation + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + offering + ${#TestCase#offering} + QUERY + ws2500 + + + + + observedProperty + ${#TestCase#observedProperty} + QUERY + AirTemperature + + + + + + + + + + offeringobservedProperty
SEQUENTIALTest that the INSPIRE extended metadata is provided using the Metadata URL element or it is defined in the INSPIRE ExtendedCapabilities XML Schema for ISO 19142.

-

More information: Extended capabilities

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + + + offering + + + + observedProperty + + + +
+ +
+ + + SEQUENTIAL + + + Test that the INSPIRE extended metadata is provided using the Metadata URL element or it is defined in the INSPIRE ExtendedCapabilities XML Schema for ISO 19142.

+

More information: Extended capabilities

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + + + + + + +
Test that Supported Languages, Namespaces and CRS nodes are provided in the ObservationOfferings section of getCapabilities response.

-

More information: Observations Offerings Language Namespace and CRS

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + +
+ + + Test that Supported Languages, Namespaces and CRS nodes are provided in the ObservationOfferings section of getCapabilities response.

+

More information: Observations Offerings Language Namespace and CRS

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + +
SEQUENTIALTest that the observations may be served in different CRS. To download the data in a specific supported CRS, this must be included as parameter in the GetObservation request. If the CRS is unsupported, an exception will be raised.

-

More information: CRS Observation

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}600000200No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetObservationQUERYGetFeatureOfInterestversion${#Project#version}QUERY${#Project#version}offering${#TestCase#offering}QUERYobservedProperty${#TestCase#observedProperty}QUERYcrs${#TestCase#crs}QUERYxs:string${#TestCase#crs} + + + +
+ +
+ + + SEQUENTIAL + + + Test that the observations may be served in different CRS. To download the data in a specific supported CRS, this must be included as parameter in the GetObservation request. If the CRS is unsupported, an exception will be raised.

+

More information: CRS Observation

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 600000 + + + + + 200 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetObservation + QUERY + GetFeatureOfInterest + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + offering + ${#TestCase#offering} + QUERY + + + observedProperty + ${#TestCase#observedProperty} + QUERY + + + crs + ${#TestCase#crs} + QUERY + xs:string + ${#TestCase#crs} + + + + + + + + + offeringobservedPropertycrs
SEQUENTIALTest that the service accepts the parameter LANGUAGE.

-

More information: Language Capabilities Parameter

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + + + offering + + + + observedProperty + + + + crs + + + +
+ +
+ + + SEQUENTIAL + + + Test that the service accepts the parameter LANGUAGE.

+

More information: Language Capabilities Parameter

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}language${#TestCase#language}QUERY${#TestCase#language}language
Test that the capabilities document is in default language when resquested with absent language parameter or unsupported language.

-

More information: Language Capabilities Default

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#language} + QUERY + ${#TestCase#language} + + + + + + + + + language + + + +
+ + + Test that the capabilities document is in default language when resquested with absent language parameter or unsupported language.

+

More information: Language Capabilities Default

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}language${#TestCase#wrongLanguage}QUERY${#TestCase#wrongLanguage}wrongLanguagezzzz
Test that the Response Language exists and it changes depending on the requested language.

-

More information: Language Capabilities Response

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#wrongLanguage} + QUERY + ${#TestCase#wrongLanguage} + + + + + + + + + wrongLanguage + zzzz + + +
+ + + Test that the Response Language exists and it changes depending on the requested language.

+

More information: Language Capabilities Response

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERYxs:string${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesversion${#Project#version}QUERY${#Project#version}language${#TestCase#language}QUERY${#TestCase#language}language
Test that the supported languages, including the default language, appears in the extended capabilities section of the capabilities document.

-

More information: Language Capabilities List

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + xs:string + ${#Project#service} + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#language} + QUERY + ${#TestCase#language} + + + + + + + + + language + + + +
+ + + Test that the supported languages, including the default language, appears in the extended capabilities section of the capabilities document.

+

More information: Language Capabilities List

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + +
SEQUENTIALTest that the capabilities document is schema valid according to INSPIRE online schema repository.

-

More information: Extended Capabilities XML Schema

]]>
a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; +} + + + +
+ +
+ + + SEQUENTIAL + + + Test that the capabilities document is schema valid according to INSPIRE online schema repository.

+

More information: Extended Capabilities XML Schema

]]> +
+ + + + + a06790ce-5d08-4ad4-821f-f55839d4a698 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -597,7 +1300,37 @@ else if(defaultLanguage.size() != 1){ writer.write(file); writer.close() return tempFile; - }No Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERY
serviceEndpointserviceSOSversion2.0.0lastServiceEndpointauthUserauthPwdauthMethodbasicetf.ignore.propertiesservice, version, lastServiceEndpoint, authUser, authPwd, authMethodetf.tag.idsEID2f9d5d6c-3be8-4cd1-b950-31ef4ee156c4etf.translation.template.collection.idEID67b37079-9ac5-4641-9476-9a646a18b6ceetf.supported.test.object.type.idsEIDf897f313-55f0-4e51-928a-0e9869f5a1d6etf.authorConsortium Bilbomatica, Guadaltel & Geogramaetf.creation.date2018-12-10T16:00:00etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.last.update.date2020-03-05T13:00:00etf.version0.2.18etf.referencehttp://inspire.ec.europa.eu/id/ats/download-sos/1.0/testIntensive
\ No newline at end of file + + + + + + + + + + serviceEndpoint + + + + service + SOS + + + version + 2.0.0 + + + lastServiceEndpoint + + + + authUser + + + + authPwd + + + + authMethod + basic + + + etf.ignore.properties + service, version, lastServiceEndpoint, authUser, authPwd, authMethod + + + etf.tag.ids + EID2f9d5d6c-3be8-4cd1-b950-31ef4ee156c4 + + + etf.translation.template.collection.id + EID67b37079-9ac5-4641-9476-9a646a18b6ce + + + etf.supported.test.object.type.ids + EIDf897f313-55f0-4e51-928a-0e9869f5a1d6 + + + etf.author + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2018-12-10T16:00:00 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.last.update.date + 2020-03-05T13:00:00 + + + etf.version + 0.2.18 + + + etf.reference + http://inspire.ec.europa.eu/id/ats/download-sos/1.0/ + + + testIntensive + + + + + + + + \ No newline at end of file diff --git a/service/ds-wcs-core-soapui-project.xml b/service/ds-wcs-core-soapui-project.xml index dec488afa..d2c1ac814 100644 --- a/service/ds-wcs-core-soapui-project.xml +++ b/service/ds-wcs-core-soapui-project.xml @@ -1,7 +1,21 @@ -
This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'Download Service WCS Core']]>
SEQUENTIAL<p>This test case initializes the Executable Test Suite.</p> -<p>It performs an initial GetCapabilities request, it sets common properties with gathered information and it determines the metadata scenario based on the elements provided in the capabilities document.</p><xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYAcceptVersions${#Project#AcceptVersions}QUERY + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + + + request + GetCapabilities + QUERY + + + AcceptVersions + ${#Project#AcceptVersions} + QUERY + + + + + + + + + + + + + + + + + + + + <p>This test case checks whether the Executable Test Suite has been initialized. If it has not been, it runs the initialization test case.</p> + + + + + + <p>This test case checks whether the Executable Test Suite has been initialized. If it has not been, it runs the initialization test case.</p> + + + + + SEQUENTIALTest that the service supports at least one of the WCS protocol bindings KVP, POST or XML/SOAP.

-

More information: Protocol bindings

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + +
+ +
+ + + SEQUENTIAL + + + Test that the service supports at least one of the WCS protocol bindings KVP, POST or XML/SOAP.

+

More information: Protocol bindings

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + +
Test that the natural language fields are in the requested language.

-

More information: Natural language fields

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + +
+ + + Test that the natural language fields are in the requested language.

+

More information: Natural language fields

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.naturalLanguageFields' ); -No Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYAcceptVersions${#Project#AcceptVersions}QUERYAcceptLanguages${#TestCase#AcceptLanguages}QUERYAcceptLanguages
Test that the XML capabilities document is schema valid.

-

More information: XML schema validation

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL<xml-fragment/>${#Project#serviceEndpoint}200 import javax.xml.transform.stream.StreamSource; + + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + + + request + GetCapabilities + QUERY + + + AcceptVersions + ${#Project#AcceptVersions} + QUERY + + + AcceptLanguages + ${#TestCase#AcceptLanguages} + QUERY + + + + + + + AcceptLanguages + + + +
+ + + Test that the XML capabilities document is schema valid.

+

More information: XML schema validation

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -197,7 +422,46 @@ a.exists( writer.write(file); writer.close() return tempFile; - }No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesAcceptVersions${#Project#AcceptVersions}QUERY${#Project#AcceptVersions}
Test that the INSPIRE metadata is provided using the Metadata URL element or it is provided in the ExtendedCapabilities section.

-

More information: Mandatory metadata elements

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + +
+ + + Test that the INSPIRE metadata is provided using the Metadata URL element or it is provided in the ExtendedCapabilities section.

+

More information: Mandatory metadata elements

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + + + + + + + +
Test that Title and Abstract fields are provided in default language when the AcceptLanguage parameter is not set in the request or when it is set with a wrong value.

-

More information: Language request empty and unsupported

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + +
+ + + Test that Title and Abstract fields are provided in default language when the AcceptLanguage parameter is not set in the request or when it is set with a wrong value.

+

More information: Language request empty and unsupported

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesAcceptVersions${#Project#AcceptVersions}QUERY${#Project#AcceptVersions}AcceptLanguages${#TestCase#AcceptLanguages}QUERY${#TestCase#AcceptLanguages}AcceptLanguageszzzz
Test that the service provides a list of supported languages.

-

More information: List of supported languages

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + AcceptVersions + ${#Project#AcceptVersions} + QUERY + ${#Project#AcceptVersions} + + + + + AcceptLanguages + ${#TestCase#AcceptLanguages} + QUERY + ${#TestCase#AcceptLanguages} + + + + + + + + + AcceptLanguages + zzzz + + +
+ + + Test that the service provides a list of supported languages.

+

More information: List of supported languages

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + +
Test that the response language changes according with the AcceptLanguages parameter of the GetCapabilities request.

-

More information: Response language

]]>
4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL + + + +
+ + + Test that the response language changes according with the AcceptLanguages parameter of the GetCapabilities request.

+

More information: Response language

]]> +
+ + + + + 4e10a229-c426-479b-a67c-ea4f04a04673 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}200600000No Authorizationservice${#Project#service}QUERY${#Project#service}requestGetCapabilitiesQUERYGetCapabilitiesAcceptVersions${#Project#AcceptVersions}QUERY${#Project#AcceptVersions}AcceptLanguages${#TestCase#AcceptLanguages}QUERY${#TestCase#AcceptLanguages}AcceptLanguageseeh
serviceEndpointserviceWCSAcceptVersions2.0.1,2.0.0extended_capabilities_scenario1lastServiceEndpointauthUserauthPwdauthMethodbasicetf.ignore.propertiesservice, AcceptVersions, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwd, authMethodetf.tag.idsEID4d43ad6a-8d7a-4897-a86c-5c5cd58fbfe4etf.translation.template.collection.idEID67b37079-9ac5-4641-9476-9a646a18b6ceetf.supported.test.object.type.idsEIDdac58b52-3ffd-4eb5-96e3-64723d8f0f51etf.authorConsortium Bilbomatica, Guadaltel & Geogramaetf.creation.date2019-02-15T14:00:00etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.last.update.date2020-03-05T13:00:00etf.version0.1.14etf.referencehttps://github.com/inspire-eu-validation/download-wcstestIntensive
\ No newline at end of file + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 600000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + AcceptVersions + ${#Project#AcceptVersions} + QUERY + ${#Project#AcceptVersions} + + + + + AcceptLanguages + ${#TestCase#AcceptLanguages} + QUERY + ${#TestCase#AcceptLanguages} + + + + + + + + + AcceptLanguages + eeh + + + + + + + + serviceEndpoint + + + + service + WCS + + + AcceptVersions + 2.0.1,2.0.0 + + + extended_capabilities_scenario + 1 + + + lastServiceEndpoint + + + + authUser + + + + authPwd + + + + authMethod + basic + + + etf.ignore.properties + service, AcceptVersions, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwd, authMethod + + + etf.tag.ids + EID4d43ad6a-8d7a-4897-a86c-5c5cd58fbfe4 + + + etf.translation.template.collection.id + EID67b37079-9ac5-4641-9476-9a646a18b6ce + + + etf.supported.test.object.type.ids + EIDdac58b52-3ffd-4eb5-96e3-64723d8f0f51 + + + etf.author + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2019-02-15T14:00:00 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.last.update.date + 2021-07-16T14:15:00 + + + etf.version + 0.1.15 + + + etf.reference + https://github.com/inspire-eu-validation/download-wcs + + + testIntensive + + + + + + + + \ No newline at end of file diff --git a/service/ds-wfs-direct-soapui-project.xml b/service/ds-wfs-direct-soapui-project.xml index a30931846..7937407d1 100644 --- a/service/ds-wfs-direct-soapui-project.xml +++ b/service/ds-wfs-direct-soapui-project.xml @@ -1,36 +1,104 @@ - + + WFS 2.0 Conformance Test Suite, which is invoked automatically.

The Executable Test Suite is divided into two test modules. In the first module 'Initialization and basic checks', basic queries are send to the service to ensure the endpoints are available. The 'Capabilities' test module contains a test case that checks, if the Capabilities document of the service declares all required Conformance Classes.

There are a few test cases and test steps that are marked as 'technical test step' or 'technical test case' in the description. They are used to control the test execution flow of the steps. The description text of a technical test step indicates the test steps that are executed. If a technical test step fails, the other test steps, which have been called by the technical test step, should be checked first. To examine a reported issue, the assertion messages should be compared with the service responses which are included in the report. If the response contains an exception report, the request should be checked for 'incorrect' parameters (e.g., a non-existing feature type ID). The test step description typically includes information about the source of the parameter value (e.g., from a previous request where the feature type ID was listed). -

Please report any issues or problems in GitHub. +

Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'Direct WFS']]>
- +Source: Conformance Class 'Direct WFS']]> +
+ + + + Perform basic check to ensure all endpoints listed in the Capabilities are available, and initialize the Executable Test Suite with gathered information. If this test case fails, all other test cases will be skipped! Ensure that the schema locations and all endpoints can be queried! -Please note that for technical reasons this Executable Test Suite requires that schema locations must be accessible without any authentication mechanism. +Please note that for technical reasons this Executable Test Suite requires that schema locations must be accessible without any authentication mechanism. + true SEQUENTIAL - version2.0.0serviceWFS + + + version + 2.0.0 + + + service + WFS + + - Technical test case. Initialize loggers and set credentials for the test run. - - - qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.115+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.862+01:00etf.technicalSteptrueTechnical test case for updating query parameters + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.115+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.862+01:00 + + + etf.technicalStep + true + + + + + + Technical test case for updating query parameters + + + + + Check if the service is available. This test case will fail if an incorrect URL was provided, the Capabilities document is invalid, the GetCapabilities operation URL in the Capabilities document is incorrect or the service returns invalid XML. In the latter case, there might be a problem with the encoding, respectively the byte order mark (BOM) is incorrect.Implementation note: the users URL is simply passed through to respect additional parameters. If no Capabilities document is found, it is explicity requested in an optional second step 'Get Capabilities with parameters' with parameters.<xml-fragment/>${#Project#serviceEndpoint}30000200import de.interactive_instruments.etf.suim.* -import de.interactive_instruments.* + + + + + + + Check if the service is available. This test case will fail if an incorrect URL was provided, the Capabilities document is invalid, the GetCapabilities operation URL in the Capabilities document is incorrect or the service returns invalid XML. In the latter case, there might be a problem with the encoding, respectively the byte order mark (BOM) is incorrect. + + + + + Implementation note: the users URL is simply passed through to respect additional parameters. If no Capabilities document is found, it is explicity requested in an optional second step 'Get Capabilities with parameters' with parameters. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 30000 + + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; +import de.interactive_instruments.*; if(!messageExchange.hasResponse()) { - throw new TranslatableAssertionError("TR.noDataReturned") + throw new TranslatableAssertionError("TR.noDataReturned"); } if(messageExchange.responseContent.size()>7) { final String xmlProlog = messageExchange.responseContent.substring(0,7); if(!xmlProlog.trim().startsWith("<")) { - throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ) + throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ); } -}No AuthorizationGoto request Capabilities with parameters explicitlyXPATHnot(exists(/*:WFS_Capabilities))Get Capabilities with parameters<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +} + + + + No Authorization + + + + + + + + + + + Goto request Capabilities with parameters explicitly + XPATH + not(exists(/*:WFS_Capabilities)) + Get Capabilities with parameters + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");30000No AuthorizationCapabilitiesResponseAsXmlGet Capabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#trueendpt.GetCapbilities.GetResponseAsXmlGet Capabilities/*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetCapabilities']/*:DCP/*:HTTP/*:Get/@*:href -endpt.GetCapabilities.Get#Project#trueGoto set GetCapabilities operation endpointXPATHtrue()END - +a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0"); + + + + + 30000 + + + + No Authorization + + + + + + + + + + + Capabilities + ResponseAsXml + Get Capabilities + capabilities + #TestCase# + true + + + service + service + #TestSuite# + service + #TestCase# + true + + + version + version + #TestSuite# + version + #TestCase# + true + + + endpt.GetCapbilities.Get + ResponseAsXml + Get Capabilities + /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetCapabilities']/*:DCP/*:HTTP/*:Get/@*:href + + endpt.GetCapabilities.Get + #Project# + true + + + + + + + + Goto set GetCapabilities operation endpoint + XPATH + true() + END + + + + + - Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. User specified parameters are dropped in this request. + Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. User specified parameters are dropped in this request. + <xml-fragment/> - truefalse + true + false + + + UTF-8 ${#Project#serviceEndpoint} - - 30000200import de.interactive_instruments.etf.suim.* -import de.interactive_instruments.* + + + + 30000 + + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; +import de.interactive_instruments.*; if(!messageExchange.hasResponse()) { - throw new TranslatableAssertionError("TR.noDataReturned") + throw new TranslatableAssertionError("TR.noDataReturned"); } if(messageExchange.responseContent.size()>7) { final String xmlProlog = messageExchange.responseContent.substring(0,7); if(!xmlProlog.trim().startsWith("<")) { - throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ) + throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ); } -}import de.interactive_instruments.etf.suim.* +} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - +a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0"); + + + + Basic + Basic + Global HTTP Settings + + + @@ -150,21 +386,146 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");QUERY xs:string GetCapabilities - + - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + + + + + + + Capabilities + ResponseAsXml + Get Capabilities with parameters + capabilities + #TestCase# + true + + + service + service + #TestSuite# + service + #TestCase# + true + + + version + version + #TestSuite# + version + #TestCase# + true + + + endpt.GetCapabilities.Get + ResponseAsXml + Get Capabilities with parameters + /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetCapabilities']/*:DCP/*:HTTP/*:Get/@*:href + + endpt.GetCapabilities.Get + #Project# + true + - CapabilitiesResponseAsXmlGet Capabilities with parameterscapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#trueendpt.GetCapabilities.GetResponseAsXmlGet Capabilities with parameters/*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetCapabilities']/*:DCP/*:HTTP/*:Get/@*:href -endpt.GetCapabilities.Get#Project#truecapabilitiesserviceWFSversion2.0.0qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.124+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.863+01:00Validate Capabilites response against xsi:schemaLocation. - + + + + + + + + + + capabilities + + + + service + WFS + + + version + 2.0.0 + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.124+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.863+01:00 + + + + + + Validate Capabilites response against xsi:schemaLocation. + + + - Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. User specified parameters are dropped in this request. + Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. User specified parameters are dropped in this request. + <xml-fragment/> UTF-8 ${#Project#endpt.GetCapabilities.Get} - - 20030000import javax.xml.transform.stream.StreamSource; + + + + + 200 + + + + + 30000 + + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -258,8 +619,16 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - + + + + + Basic + Basic + Global HTTP Settings + + + @@ -269,29 +638,144 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");QUERY xs:string GetCapabilities - + + + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + VERSION + ${#TestSuite#version} + QUERY + + - qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateCheck if the endpoints from the Capabilites are accesable and if basic requirements are met to query the service. The first found FeatureType and the first found OutputFormat from the Capabilities are taken for one GetFeature and one DescribeFeatureType request. This test case will most likely fail if FeatureTypes or OutputFormats are listed in the (manually edited) Capabilities document which the underlying service implementation is not capabile to serve. featureTypeNameoutputFormatfeatureTypeNamespacefeatureTypeNamespacePrefix - + + + + qaf.ShortDescription + + + + qaf.Author + + + + qaf.CreationDate + + + + qaf.Version + + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + + + + qaf.LastUpdateDate + + + + + + + Check if the endpoints from the Capabilites are accesable and if basic requirements are met to query the service. The first found FeatureType and the first found OutputFormat from the Capabilities are taken for one GetFeature and one DescribeFeatureType request. This test case will most likely fail if FeatureTypes or OutputFormats are listed in the (manually edited) Capabilities document which the underlying service implementation is not capabile to serve. + + + + + + + featureTypeName + + + + outputFormat + + + + featureTypeNamespace + + + + featureTypeNamespacePrefix + + + + + + + - Request Capabilities, expect a Capabilites document is returned which lists at least one usable FeatureType. + Request Capabilities, expect a Capabilites document is returned which lists at least one usable FeatureType. + <xml-fragment/> UTF-8 ${#Project#endpt.GetCapabilities.Get} - - 30000200import de.interactive_instruments.etf.suim.* + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("//*:FeatureType[1]");import de.interactive_instruments.etf.suim.* +a.exists("//*:FeatureType[1]"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.notExists(" //*:FeatureType[1]/*:Name[not(namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')])] ", "TR.featureTypeUnknownNamespace")import de.interactive_instruments.etf.suim.* +a.notExists(" //*:FeatureType[1]/*:Name[not(namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')])] ", "TR.featureTypeUnknownNamespace"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("//*:FeatureType[1]/*:OutputFormats/*:Format, /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value", "TR.noOutputFormats");import de.interactive_instruments.etf.suim.* +a.exists("//*:FeatureType[1]/*:OutputFormats/*:Format, /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value", "TR.noOutputFormats"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");BasicBasicGlobal HTTP Settings - +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + Basic + Basic + Global HTTP Settings + + + @@ -301,13 +785,75 @@ a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");QUERY xs:string GetCapabilities - + - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + - Extract FeatureType name, namespace, namespace prefix and an OutputFormatExtract name of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:NamefeatureTypeNameTransfer_PropertiestrueExtract OutputFormat of FeatureTypeResponseAsXmlGetCapabilitiesif (exists(//*:FeatureType[1]/*:OutputFormats/*:Format)) + + + Extract FeatureType name, namespace, namespace prefix and an OutputFormat + + + + Extract name of FeatureType + ResponseAsXml + GetCapabilities + //*:FeatureType[1]/*:Name + featureTypeName + Transfer_Properties + true + + + Extract OutputFormat of FeatureType + ResponseAsXml + GetCapabilities + if (exists(//*:FeatureType[1]/*:OutputFormats/*:Format)) then //*:FeatureType[1]/*:OutputFormats/*:Format -else /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value[1]outputFormatTransfer_PropertiestrueExtract namespace of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:Name/namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')]featureTypeNamespaceTransfer_PropertiestrueExtract namespace prefixResponseAsXmlGetCapabilitiessubstring-before(//*:FeatureType[1]/*:Name, ':')featureTypeNamespacePrefixTransfer_PropertiestrueTechnical test step, which extracts the endpoints from the Capabilities and executes the test steps 'GetFeature' and 'DescribeFeatureType' with the first found FeatureTypeName, found in the Capabilities (previous test step 'GetCapabilities').Request the first found FeatureType from the Capabilities to check if the GetFeature endpoint is available. Called by 'Activate Operations'.<xml-fragment/>${#Project#endpt.GetFeature.Get}20030000import de.interactive_instruments.etf.suim.* +} + + + + + + Request the first found FeatureType from the Capabilities to check if the GetFeature endpoint is available. Called by 'Activate Operations'. + + <xml-fragment/> + + ${#Project#endpt.GetFeature.Get} + + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTGetFeatureQUERYRESULTTYPEhitsQUERYTYPENAMES${Transfer_Properties#featureTypeName}QUERYOUTPUTFORMAT${Transfer_Properties#outputFormat}QUERYNAMESPACESxmlns(${Transfer_Properties#featureTypeNamespacePrefix},${Transfer_Properties#featureTypeNamespace})QUERYRequest the first found OutputFormat from the Capabilities to check if the DescribeFeatureType endpoint is available. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. Called by 'Activate Operations'.<xml-fragment/>${#Project#endpt.DescribeFeatureType.Get}20030000import de.interactive_instruments.etf.suim.* +a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + SERVICE + ${#TestSuite#service} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + REQUEST + GetFeature + QUERY + + + RESULTTYPE + hits + QUERY + + + TYPENAMES + ${Transfer_Properties#featureTypeName} + QUERY + + + OUTPUTFORMAT + ${Transfer_Properties#outputFormat} + QUERY + + + NAMESPACES + xmlns(${Transfer_Properties#featureTypeNamespacePrefix},${Transfer_Properties#featureTypeNamespace}) + QUERY + + + + + + + + Request the first found OutputFormat from the Capabilities to check if the DescribeFeatureType endpoint is available. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. Called by 'Activate Operations'. + + <xml-fragment/> + + + ${#Project#endpt.DescribeFeatureType.Get} + + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:schema", "TR.missingSchemaRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTDescribeFeatureTypeQUERYOUTPUTFORMATapplication/gml+xml; version=3.2QUERYqaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.130+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.866+01:00EndpointsAvailabletrueCheck if the service is still available and the Test initialisation phase has been completed successfully. - +ph.getTestCase().setPropertyValue("EndpointsAvailable", "true"); + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.130+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.866+01:00 + + + EndpointsAvailable + true + + + + + + Check if the service is still available and the Test initialisation phase has been completed successfully. + + + - Requests the Capabilities document to check if the service is still up and running + Requests the Capabilities document to check if the service is still up and running + <xml-fragment/> - truefalse + true + false + + + UTF-8 ${#Project#endpt.GetCapabilities.Get} - - 30000/*/@version${#TestSuite#version}falsefalsefalse200import de.interactive_instruments.etf.suim.* + + + + 30000 + + + + + + /*/@version + ${#TestSuite#version} + false + false + false + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - +a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0"); + + + + Basic + Basic + Global HTTP Settings + + + @@ -366,21 +1132,130 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");QUERY xs:string GetCapabilities - + + + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY + - Technical test step. Transfer basic data.CapabilitiesResponseAsXmlGetCapabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#truecapabilitiesserviceWFSversion2.0.0qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateTest module for checking Capabilities related information.SEQUENTIAL + + + + + capabilities + + + + service + WFS + + + version + 2.0.0 + + + qaf.ShortDescription + + + + qaf.Author + + + + qaf.CreationDate + + + + qaf.Version + + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + + + + qaf.LastUpdateDate + + + + + + + + + + Test module for checking Capabilities related information. + + SEQUENTIAL + + +
Relevant Requirements: @@ -396,33 +1271,125 @@ Relevant Requirements:

-Source: Abstract Test Case 'Conformance Classes']]>
f739929b-aa73-4a10-ac57-ffdf5ee50c14capabilitiesserviceversionqaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateSINGLETON_AND_WAIT - +Source: Abstract Test Case 'Conformance Classes']]> + + + + + + f739929b-aa73-4a10-ac57-ffdf5ee50c14 + + + capabilities + + + service + + + version + + + qaf.ShortDescription + + + qaf.Author + + + qaf.CreationDate + + + qaf.Version + + + qaf.AssociatedRequirements + + + qaf.ExpectedResults + + + qaf.Status + + + qaf.LastUpdateDate + + + + SINGLETON_AND_WAIT + + + + <xml-fragment/> UTF-8 ${#Project#endpt.GetCapabilities.Get} - - import de.interactive_instruments.etf.suim.* + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='ImplementsBasicWFS']/ows:DefaultValue", "ImplementsBasicWFS", "TRUE", "TR.operationsMetadataConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='ImplementsBasicWFS']/ows:DefaultValue", "ImplementsBasicWFS", "TRUE", "TR.operationsMetadataConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='KVPEncoding']/ows:DefaultValue", "KVPEncoding", "TRUE", "operationsMetadataConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/ows:OperationsMetadata/ows:Constraint[@name='KVPEncoding']/ows:DefaultValue", "KVPEncoding", "TRUE", "operationsMetadataConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsAdHocQuery']/ows:DefaultValue", "ImplementsAdHocQuery", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsAdHocQuery']/ows:DefaultValue", "ImplementsAdHocQuery", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsResourceId']/ows:DefaultValue", "ImplementsResourceId", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsResourceId']/ows:DefaultValue", "ImplementsResourceId", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinStandardFilter']/ows:DefaultValue", "ImplementsMinStandardFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinStandardFilter']/ows:DefaultValue", "ImplementsMinStandardFilter", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinSpatialFilter']/ows:DefaultValue", "ImplementsMinSpatialFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinSpatialFilter']/ows:DefaultValue", "ImplementsMinSpatialFilter", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinTemporalFilter']/ows:DefaultValue", "ImplementsMinTemporalFilter", "TRUE", "TR.filterConformanceClassNotSupported");import de.interactive_instruments.etf.suim.* +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinTemporalFilter']/ows:DefaultValue", "ImplementsMinTemporalFilter", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinimumXPath']/ows:DefaultValue", "ImplementsMinimumXPath", "TRUE", "TR.filterConformanceClassNotSupported");BasicBasicGlobal HTTP Settings - +a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constraint[@name='ImplementsMinimumXPath']/ows:DefaultValue", "ImplementsMinimumXPath", "TRUE", "TR.filterConformanceClassNotSupported"); + + + + Basic + Basic + Global HTTP Settings + + + @@ -432,38 +1399,169 @@ a.equals("/*:WFS_Capabilities/fes:Filter_Capabilities/fes:Conformance/fes:Constr QUERY xs:string GetCapabilities - + + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + service + ${#TestSuite#service} + QUERY + + + VERSION + ${#TestSuite#version} - ACCEPTVERSIONS${#TestSuite#version}QUERYservice${#TestSuite#service}QUERYVERSION${#TestSuite#version} + -
SERVICEWFSVERSION2.0.0
- + + + + + + SERVICE + WFS + + + VERSION + 2.0.0 + + + + - excludeFeatureTypes + + excludeFeatureTypes + + - - - - - - - - - - - - - - - - - authUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetCapabilities.Getendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorinteractive instruments GmbHetf.version1.0.5etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-direct-soapui-project.xmletf.creation.date2017-05-15T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2021-04-29T11:30:00etf.dependency.idsEID18d66578-6ad6-3d3d-a090-0cf885c61de1serviceEndpoint - - - - import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; -import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep + + authUser + + + + authPwd + + + + etf.ignore.properties + excludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.date + + + authMethod + basic + + + FirstFeatureTypeName + + + + testIntensive + + + + endpt.GetCapabilities.Get + + + + endpt.GetFeature.Get + + + + endpt.DescribeFeatureType.Get + + + + endpt.GetFeature.Post + + + + endpt.DescribeFeatureType.Post + + + + endpt.GetPropertyValue.Get + + + + endpt.GetPropertyValue.Post + + + + endpt.ListStoredQueries.Get + + + + endpt.ListStoredQueries.Post + + + + endpt.DescribeStoredQueries.Get + + + + endpt.DescribeStoredQueries.Post + + + + blacklisted.outputFormats + text/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1 + + + etf.tag.ids + EIDe51620af-bcf5-4719-ab0e-ef6226a572fa + + + etf.translation.template.collection.id + EIDfadd4929-fa60-4781-b658-703bbfe3f4eb + + + etf.author + interactive instruments GmbH + + + etf.version + 1.0.5 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.reference + https://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-direct-soapui-project.xml + + + etf.creation.date + 2017-05-15T00:00:00 + + + etf.supported.test.object.type.ids + EID9b6ef734-981e-4d60-aa81-d6730a1c6389 + + + etf.last.update.date + 2021-04-29T11:30:00 + + + etf.dependency.ids + EID85df0f3f-f55a-3944-a88f-f1cb4763336d + + + serviceEndpoint + + + + + + + + import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; +import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep; import com.eviware.soapui.model.testsuite.TestStepResult; @@ -474,9 +1572,8 @@ def requirements = project.getTestSuiteByName("TestSetup")?. log.info("Results: "); for( testSuiteR in runner?.getResults() ) { for( testCaseR in testSuiteR?.getResults() ) { - for( testStepR in testCaseR?.getResults() ) { - - if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { + for( testStepR in testCaseR?.getResults() ) { + if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { if (testStepR.testStep instanceof HttpTestRequestStep || testStepR.testStep instanceof RestTestRequestStep) { testStepR.testStep.testRequest.assertionList.each{ // Extract ID which is seperated with a whitespace and a doublecolon @@ -492,7 +1589,7 @@ for( testSuiteR in runner?.getResults() ) { // Todo: Save the requirements as an object in a map requirements.getPropertyList().each { - log.info(it.getName()) + log.info(it.getName()); if(it.getName().contains(id)) { log.error(" - "+it.getName()+" :" ); log.error(" "+it.getValue()); @@ -508,5 +1605,6 @@ for( testSuiteR in runner?.getResults() ) { } } } - -
+ + + diff --git a/service/ds-wfs-pre-defined-soapui-project.xml b/service/ds-wfs-pre-defined-soapui-project.xml index 04cbe2542..b246eb2c9 100644 --- a/service/ds-wfs-pre-defined-soapui-project.xml +++ b/service/ds-wfs-pre-defined-soapui-project.xml @@ -1,21 +1,41 @@ -
The test suite is divided into three test modules. In the first module 'Initialization and basic checks', basic queries are send to the service to ensure the endpoints are available. Thereupon, metadata are gathered from the responses (i.e. available FeatureTypes, there namespaces, etc. ). The 'Capabilities' and the 'Stored Query' test modules contain the actual test cases, derived from the Abstract Test Cases. If a test case in the first module fails, the two other modules are skipped!

There are a few test cases and test steps that are marked as 'technical test step' or 'technical test case' in the description. They are used to control the test execution flow of the steps. The description text of a technical test step indicates the test steps that are executed. If a technical test step fails, the other test steps, which have been called by the technical test step, should be checked first. To examine a reported issue, the assertion messages should be compared with the service responses which are included in the report. If the response contains an exception report, the request should be checked for 'incorrect' parameters (i.e. non-existing Feature Type ID). The test step description should refer to a point, from where the information has been gathered (i.e. from a previous request where the Feature Type ID was listed).

Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

Source: Conformance Class 'Pre-defined WFS']]>
- - Perform basic check to ensure all endpoints listed in the Capabilities are available, and initialize the Executable Test Suite with gathered information. + + +
The test suite is divided into three test modules. In the first module 'Initialization and basic checks', basic queries are send to the service to ensure the endpoints are available. Thereupon, metadata are gathered from the responses (i.e. available FeatureTypes, there namespaces, etc. ). The 'Capabilities' and the 'Stored Query' test modules contain the actual test cases, derived from the Abstract Test Cases. If a test case in the first module fails, the two other modules are skipped!

There are a few test cases and test steps that are marked as 'technical test step' or 'technical test case' in the description. They are used to control the test execution flow of the steps. The description text of a technical test step indicates the test steps that are executed. If a technical test step fails, the other test steps, which have been called by the technical test step, should be checked first. To examine a reported issue, the assertion messages should be compared with the service responses which are included in the report. If the response contains an exception report, the request should be checked for 'incorrect' parameters (i.e. non-existing Feature Type ID). The test step description should refer to a point, from where the information has been gathered (i.e. from a previous request where the Feature Type ID was listed).

Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

Source: Conformance Class 'Pre-defined WFS']]> +
+ + + + + Perform basic check to ensure all endpoints listed in the Capabilities are available, and initialize the Executable Test Suite with gathered information. If this test case fails, all other test cases will be skipped! Ensure that the schema locations and all endpoints can be queried! -Please note that for technical reasons this Executable Test Suite requires that schema locations must be accessible without any authentication mechanism. - true - - SEQUENTIAL - - version2.0.0serviceWFS - - Technical test case. Initialize loggers and set credentials for the test run. - - - qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.115+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.862+01:00etf.technicalSteptrueTechnical test case for updating query parameters + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.115+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.862+01:00 + + + etf.technicalStep + true + + + + + + Technical test case for updating query parameters + + + + + Check if the service is available. - - - Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. - <xml-fragment/> - truefalse - UTF-8 - ${#Project#serviceEndpoint} - - 30000200import de.interactive_instruments.etf.suim.* -import de.interactive_instruments.* + + + + + + + Check if the service is available. + + + + + Implementation note: The GetCapabilities request includes both the "AcceptVersions" and the "version" parameters. Strictly, for WFS 2.0 / OWS Common 1.1, only the "AcceptVersions" parameter is specified. However, for backward compatibility, the "version" parameter, which has been used in earlier versions of the WFS standard, is still included as a deprecated parameter in OWS Common 1.1. OWS Common 1.1.0 states: "A server may also optionally implement the old-style version negotiation mechanism so that old clients that send GetCapabilities requests containing a 'version' parameter can be served." To cover both the old and the newer version negotiation approach, the request includes both parameters. + + <xml-fragment/> + true + false + + + + UTF-8 + ${#Project#serviceEndpoint} + + + + 30000 + + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; +import de.interactive_instruments.*; if(!messageExchange.hasResponse()) { - throw new TranslatableAssertionError("TR.noDataReturned") + throw new TranslatableAssertionError("TR.noDataReturned"); } if(messageExchange.responseContent.size()>7) { final String xmlProlog = messageExchange.responseContent.substring(0,7); if(!xmlProlog.trim().startsWith("<")) { - throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ) + throw new TranslatableAssertionError("TR.invalidXmlProlog", "prolog", xmlProlog.replaceAll("\\p{C}", "?") ); } -}import de.interactive_instruments.etf.suim.* +} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - - - - - - REQUEST - GetCapabilities - QUERY - xs:string - GetCapabilities - - - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY - - CapabilitiesResponseAsXmlGetCapabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#truecapabilities +a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0"); + + + + Basic + Basic + Global HTTP Settings + + + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + + + + + + + Capabilities + ResponseAsXml + GetCapabilities + capabilities + #TestCase# + true + + + service + service + #TestSuite# + service + #TestCase# + true + + + version + version + #TestSuite# + version + #TestCase# + true + + + + + + capabilities + + ALKIS INSPIRE Download Service ALKIS INSPIRE Download Service by XtraServer * AAA Suite @@ -2249,16 +2410,78 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0"); -]]>serviceWFSversion2.0.0qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.124+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.863+01:00Validate Capabilites response against xsi:schemaLocation. - - - - <xml-fragment/> - - UTF-8 - ${#Project#serviceEndpoint} - - 20030000import javax.xml.transform.stream.StreamSource; +]]> + + + + service + WFS + + + version + 2.0.0 + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.124+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.863+01:00 + +
+ + + + Validate Capabilites response against xsi:schemaLocation. + + + + + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + + + + 200 + + + + + 30000 + + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -2352,56 +2575,241 @@ a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - - - - - - REQUEST - GetCapabilities - QUERY - xs:string - GetCapabilities - - - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY - - qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateCheck if the endpoints from the Capabilites are accesable and if basic requirements are met to query the service. The first found FeatureType and the first found OutputFormat from the Capabilities are taken for one GetFeature and one DescribeFeatureType request. This test case will most likely fail if FeatureTypes or OutputFormats are listed in the (manually edited) Capabilities document which the underlying service implementation is not capabile to serve. featureTypeNameoutputFormatfeatureTypeNamespacefeatureTypeNamespacePrefix - - - Request Capabilities, expect a Capabilites document is returned which lists at least one usable FeatureType. - <xml-fragment/> - - UTF-8 - ${#Project#serviceEndpoint} - - 30000200import de.interactive_instruments.etf.suim.* + + + + + Basic + Basic + Global HTTP Settings + + + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + + + + + qaf.ShortDescription + + + + qaf.Author + + + + qaf.CreationDate + + + + qaf.Version + + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + + + + qaf.LastUpdateDate + + + + + + + Check if the endpoints from the Capabilites are accesable and if basic requirements are met to query the service. The first found FeatureType and the first found OutputFormat from the Capabilities are taken for one GetFeature and one DescribeFeatureType request. This test case will most likely fail if FeatureTypes or OutputFormats are listed in the (manually edited) Capabilities document which the underlying service implementation is not capabile to serve. + + + + + + + featureTypeName + + + + outputFormat + + + + featureTypeNamespace + + + + featureTypeNamespacePrefix + + + + + + + + + Request Capabilities, expect a Capabilites document is returned which lists at least one usable FeatureType. + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("//*:FeatureType[1]");import de.interactive_instruments.etf.suim.* +a.exists("//*:FeatureType[1]"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.notExists(" //*:FeatureType[1]/*:Name[not(namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')])] ", "TR.featureTypeUnknownNamespace")import de.interactive_instruments.etf.suim.* +a.notExists(" //*:FeatureType[1]/*:Name[not(namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')])] ", "TR.featureTypeUnknownNamespace"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("//*:FeatureType[1]/*:OutputFormats/*:Format, /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value", "TR.noOutputFormats");import de.interactive_instruments.etf.suim.* +a.exists("//*:FeatureType[1]/*:OutputFormats/*:Format, /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value", "TR.noOutputFormats"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");BasicBasicGlobal HTTP Settings - - - - - - REQUEST - GetCapabilities - QUERY - xs:string - GetCapabilities - - - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY - - Extract FeatureType name, namespace, namespace prefix and an OutputFormatExtract name of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:NamefeatureTypeNameTransfer_PropertiestrueExtract OutputFormat of FeatureTypeResponseAsXmlGetCapabilitiesif (exists(//*:FeatureType[1]/*:OutputFormats/*:Format)) +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + Basic + Basic + Global HTTP Settings + + + + + + + + REQUEST + GetCapabilities + QUERY + xs:string + GetCapabilities + + + + SERVICE + ${#TestSuite#service} + QUERY + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + + + + Extract FeatureType name, namespace, namespace prefix and an OutputFormat + + + + Extract name of FeatureType + ResponseAsXml + GetCapabilities + //*:FeatureType[1]/*:Name + featureTypeName + Transfer_Properties + true + + + Extract OutputFormat of FeatureType + ResponseAsXml + GetCapabilities + if (exists(//*:FeatureType[1]/*:OutputFormats/*:Format)) then //*:FeatureType[1]/*:OutputFormats/*:Format -else /*:WFS_Capabilities/*:OperationsMetadata/*:Operation[@name='GetFeature']/*:Parameter[@name='outputFormat']/*:AllowedValues/*:Value[1]outputFormatTransfer_PropertiestrueExtract namespace of FeatureTypeResponseAsXmlGetCapabilities//*:FeatureType[1]/*:Name/namespace::*[name()=substring-before(//*:FeatureType[1]/*:Name, ':')]featureTypeNamespaceTransfer_PropertiestrueExtract namespace prefixResponseAsXmlGetCapabilitiessubstring-before(//*:FeatureType[1]/*:Name, ':')featureTypeNamespacePrefixTransfer_PropertiestrueTechnical test step, which extracts the endpoints from the Capabilities and executes the test steps 'GetFeature' and 'DescribeFeatureType' with the first found FeatureTypeName, found in the Capabilities (previous test step 'GetCapabilities').Request the first found FeatureType from the Capabilities to check if the GetFeature endpoint is available. Called by 'Activate Operations'. Note<xml-fragment/>${#Project#endpt.GetFeature.Get}20030000import de.interactive_instruments.etf.suim.* + + + + + + + Request the first found FeatureType from the Capabilities to check if the GetFeature endpoint is available. Called by 'Activate Operations'. Note + + <xml-fragment/> + + ${#Project#endpt.GetFeature.Get} + + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTGetFeatureQUERYRESULTTYPEhitsQUERYTYPENAMES${Transfer_Properties#featureTypeName}QUERYOUTPUTFORMAT${Transfer_Properties#outputFormat}QUERYNAMESPACESxmlns(${Transfer_Properties#featureTypeNamespacePrefix},${Transfer_Properties#featureTypeNamespace})QUERYRequest the first found OutputFormat from the Capabilities to check if the DescribeFeatureType endpoint is available. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. Called by 'Activate Operations'.<xml-fragment/>${#Project#endpt.GetFeature.Get}20030000import de.interactive_instruments.etf.suim.* +a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + SERVICE + ${#TestSuite#service} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + REQUEST + GetFeature + QUERY + + + RESULTTYPE + hits + QUERY + + + TYPENAMES + ${Transfer_Properties#featureTypeName} + QUERY + + + OUTPUTFORMAT + ${Transfer_Properties#outputFormat} + QUERY + + + NAMESPACES + xmlns(${Transfer_Properties#featureTypeNamespacePrefix},${Transfer_Properties#featureTypeNamespace}) + QUERY + + + + + + + + Request the first found OutputFormat from the Capabilities to check if the DescribeFeatureType endpoint is available. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. Called by 'Activate Operations'. + + <xml-fragment/> + + + ${#Project#endpt.GetFeature.Get} + + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:schema", "TR.missingSchemaRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTDescribeFeatureTypeQUERYOUTPUTFORMATapplication/gml+xml; version=3.2QUERYqaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.130+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.866+01:00 - Technical test case. Parse GetCapabilities and DescribeFeatureType responses for meta data and check the number of available Features. -The gathered information are used in other technical (scripted) test cases. In most cases ALL other TestCases will fail if the TestSetup phase has not been completed.1800000 - - - - qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.129+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.865+01:00etf.technicalSteptrueAutoConfigurationCompletedfalse - - featureTypeNameadv:AX_Wohnplatzversion2.0.0outputFormattext/xml; subtype=gml/3.2.1FT.NAMESPACES.XFT.NAMESPACES.GETFT.PROPERTY.NAMEFT.NAMEFT.PREFIXFT.NAMESPACEFT.NAMESPACESfeatureTypeNamespaceWfs2xmlns(adv,http://www.adv-online.de/namespaces/adv/gid/6.0) - - - - <xml-fragment/> - - UTF-8 - ${#Project#serviceEndpoint} - - 30000200import com.eviware.soapui.support.XmlHolder +a.exists("/*:schema", "TR.missingSchemaRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + SERVICE + ${#TestSuite#service} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + REQUEST + DescribeFeatureType + QUERY + + + OUTPUTFORMAT + application/gml+xml; version=3.2 + QUERY + + + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.130+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.866+01:00 + + + + + + Technical test case. Parse GetCapabilities and DescribeFeatureType responses for meta data and check the number of available Features. +The gathered information are used in other technical (scripted) test cases. In most cases ALL other TestCases will fail if the TestSetup phase has not been completed. + + 1800000 + + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.129+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.865+01:00 + + + etf.technicalStep + true + + + AutoConfigurationCompleted + false + + + + + + + + + featureTypeName + adv:AX_Wohnplatz + + + version + 2.0.0 + + + outputFormat + text/xml; subtype=gml/3.2.1 + + + FT.NAMESPACES.X + + + + FT.NAMESPACES.GET + + + + FT.PROPERTY.NAME + + + + FT.NAME + + + + FT.PREFIX + + + + FT.NAMESPACE + + + + FT.NAMESPACES + + + + featureTypeNamespaceWfs2 + xmlns(adv,http://www.adv-online.de/namespaces/adv/gid/6.0) + + + + + + + + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + + + 30000 + + + + + 200 + + + + + + import com.eviware.soapui.support.XmlHolder import de.interactive_instruments.etf.suim.* /* @@ -2481,8 +3163,7 @@ public class OutputFormat { this.outputFormat = outputFormat; this.type = FormatType.UNKNOWN; - if(outputFormat.indexOf("xml")!=-1 || - outputFormat.indexOf("gml")!=-1) + if(outputFormat.indexOf("xml")!=-1 || outputFormat.indexOf("gml")!=-1) { type=FormatType.XML; }else if(outputFormat.indexOf("json")!=-1) { @@ -2561,41 +3242,71 @@ void initOutputFormats(final XmlHolder capabilitiesXML) { operation+"\"]"; String allowedValue=""; - if(serviceTypeVersion=="2.0.0") + if(serviceTypeVersion=="2.0.0") allowedValue = "/*:AllowedValues"; final String owsValueXPath="/*:Parameter[@name=\""+parameter+"\"]"+ allowedValue+"/*:Value"; String[] values = capabilitiesXML.getNodeValues(operationXPath+owsValueXPath); - log.info(operationXPath+owsValueXPath) - - if(values.size()==0) { + log.info(operationXPath+owsValueXPath); + if(values.size()==0) { throw new Exception(this, "Unable to find \""+operation+"\""); } return values; } initOutputFormats(holder); -import de.interactive_instruments.etf.suim.* + + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");BasicBasicGlobal HTTP Settings - - - - - - REQUEST - GetCapabilities - QUERY - xs:string - GetCapabilities - - - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION${#TestSuite#version}QUERY - - - Technical test step, used to analyze the service. Determines available OutputFormats, FeatureTypes, FeatureType properties and namespaces from the Capabilities document aggregated with information from DescribeFeatureType and GetFeature responses. Executes the test steps 'Get Schema Definition' and 'Get number of Features in DB' for each FeatureTypeName which were found in the Capabilities (previous test step 'GetCapabilities'). - - Get the schema definition for one FeatureType. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. For technical reasons the schema must be publicly accesible without authentication and the test step will fail if this is not the case! Called by 'Analyze WFS Capabilities'.<xml-fragment/>${#Project#endpt.DescribeFeatureType.Get}import com.eviware.soapui.support.XmlHolder -import de.interactive_instruments.* -import de.interactive_instruments.etf.suim.TranslatableAssertionError + + + + + + + Get the schema definition for one FeatureType. This test step will most likely fail, if the Output Format is listed in the Capabilities but not supported by the implementing service. If the service is capable to serve the requested Output Format but rejects the request, there might be an issue with the encoding of whitespaces ( %20 ) from the request. For technical reasons the schema must be publicly accesible without authentication and the test step will fail if this is not the case! Called by 'Analyze WFS Capabilities'. + + <xml-fragment/> + + ${#Project#endpt.DescribeFeatureType.Get} + + + + import com.eviware.soapui.support.XmlHolder; +import de.interactive_instruments.*; +import de.interactive_instruments.etf.suim.TranslatableAssertionError; -def holder = new XmlHolder( messageExchange.responseContentAsXml ) +def holder = new XmlHolder( messageExchange.responseContentAsXml ); def schemaLocations = holder.getNodeValues('//@schemaLocation'); -def Credentials credentials = null +def Credentials credentials = null; /* -String user = messageExchange.modelItem.testStep.testCase.testSuite.project.getPropertyValue('authUser') -String passwd = messageExchange.modelItem.testStep.testCase.testSuite.project.getPropertyValue('authPwd') +String user = messageExchange.modelItem.testStep.testCase.testSuite.project.getPropertyValue('authUser'); +String passwd = messageExchange.modelItem.testStep.testCase.testSuite.project.getPropertyValue('authPwd'); if(!SUtils.isNullOrEmpty(user)) { - credential = new Credentials(user, passwd) + credential = new Credentials(user, passwd); } */ int getHttpResponseCode(String url, def credentials){ - def connection = UriUtils.openConnection( new URI(UriUtils.ensureUrlEncodedParams(url)), credentials ) + def connection = UriUtils.openConnection( new URI(UriUtils.ensureUrlEncodedParams(url)), credentials ); if (!(connection instanceof HttpURLConnection)) { throw new IllegalArgumentException("Cannot open a HTTP connection for URL '"+url+"'"); } connection.setConnectTimeout(11000); connection.setReadTimeout(91000); connection.setRequestMethod("GET"); - return connection.getResponseCode() + return connection.getResponseCode(); } if(schemaLocations!=null) { @@ -2666,53 +3390,351 @@ if(schemaLocations!=null) { } } } -30000200import de.interactive_instruments.etf.suim.* + + + + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:schema", "TR.missingSchemaRootElement");BasicBasicGlobal HTTP Settingsservice${#TestSuite#service}QUERYversion${#TestSuite#version}QUERYrequestDescribeFeatureTypeQUERYOUTPUTFORMAT${Transfer_Properties#outputFormat}QUERYGet the number of available Feature Types with a GetFeature request with RESULTTYPE=hits. Called by 'Analyze WFS Capabilities'.<xml-fragment/>${#Project#endpt.GetFeature.Get}exists(/*:ServiceExceptionReport) or (/*:ExceptionReport)falsefalsefalsefalsefalse20030000import de.interactive_instruments.etf.suim.* +a.exists("/*:schema", "TR.missingSchemaRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + service + ${#TestSuite#service} + QUERY + + + version + ${#TestSuite#version} + QUERY + + + request + DescribeFeatureType + QUERY + + + OUTPUTFORMAT + ${Transfer_Properties#outputFormat} + QUERY + + + + + + + + Get the number of available Feature Types with a GetFeature request with RESULTTYPE=hits. Called by 'Analyze WFS Capabilities'. + + <xml-fragment/> + + ${#Project#endpt.GetFeature.Get} + + + + exists(/*:ServiceExceptionReport) or (/*:ExceptionReport) + false + false + false + false + false + + + + + 200 + + + + + 30000 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement");BasicBasicGlobal HTTP SettingsSERVICE${#TestSuite#service}QUERYVERSION${#TestSuite#version}QUERYREQUESTGetFeatureQUERYRESULTTYPEhitsQUERYTYPENAMES${Transfer_Properties#featureTypeName}QUERYOUTPUTFORMAT${Transfer_Properties#outputFormat}QUERYNAMESPACES${Transfer_Properties#featureTypeNamespaceWfs2}QUERY#Project#endpt.GetFeature.Get#Project#endpt.GetFeature.GetTEMPLATE#Project#endpt.GetFeature.Get - Dieser Testfall wird lediglich für die Persistierung von XTF-OWSGTL Objekten genutzt und ist deaktiviert. - - This test step stores objects that can be accessed via the de.interactive_instruments.ObjectSaver class.de.interactive_instruments.xtf.wfs.CapabilitiesThis test step stores objects that can be accessed via the de.interactive_instruments.ObjectSaver class.qaf.ShortDescriptionqaf.Authorherrmannqaf.CreationDate2014-01-13T12:24:44.132+01:00qaf.Version1.0.0qaf.AssociatedRequirementsqaf.ExpectedResultsqaf.StatusIMPLEMENTEDqaf.LastUpdateDate2014-01-13T14:10:42.868+01:00etf.technicalSteptrueCheck if the service is available and the Test initialisation phase has been completed successfully. - - - Requests the Capabilities document to check if the service is still up and running - <xml-fragment/> - truefalse - UTF-8 - ${#Project#serviceEndpoint} - - 30000/*/@version${#TestSuite#version}falsefalsefalse200import de.interactive_instruments.etf.suim.* +a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement"); + + + + Basic + Basic + Global HTTP Settings + + + + + + SERVICE + ${#TestSuite#service} + QUERY + + + VERSION + ${#TestSuite#version} + QUERY + + + REQUEST + GetFeature + QUERY + + + RESULTTYPE + hits + QUERY + + + TYPENAMES + ${Transfer_Properties#featureTypeName} + QUERY + + + OUTPUTFORMAT + ${Transfer_Properties#outputFormat} + QUERY + + + NAMESPACES + ${Transfer_Properties#featureTypeNamespaceWfs2} + QUERY + + + #Project#endpt.GetFeature.Get + #Project#endpt.GetFeature.Get + TEMPLATE + #Project#endpt.GetFeature.Get + + + + + + + + Dieser Testfall wird lediglich für die Persistierung von XTF-OWSGTL Objekten genutzt und ist deaktiviert. + + + + This test step stores objects that can be accessed via the de.interactive_instruments.ObjectSaver class. + + + + + de.interactive_instruments.xtf.wfs.Capabilities + + + + + + + This test step stores objects that can be accessed via the de.interactive_instruments.ObjectSaver class. + + + + + + + + qaf.ShortDescription + + + + qaf.Author + herrmann + + + qaf.CreationDate + 2014-01-13T12:24:44.132+01:00 + + + qaf.Version + 1.0.0 + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + IMPLEMENTED + + + qaf.LastUpdateDate + 2014-01-13T14:10:42.868+01:00 + + + etf.technicalStep + true + + + + + + Check if the service is available and the Test initialisation phase has been completed successfully. + + + + + Requests the Capabilities document to check if the service is still up and running + + <xml-fragment/> + true + false + + + + UTF-8 + ${#Project#serviceEndpoint} + + + + 30000 + + + + + + /*/@version + ${#TestSuite#version} + false + false + false + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement");import de.interactive_instruments.etf.suim.* +a.exists("/*:WFS_Capabilities", "TR.missingCapabilitiesRootElement"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.equals("/*:WFS_Capabilities/@version", "Capabilities version", "2.0.0");BasicBasicGlobal HTTP Settings - - - - - - REQUEST - GetCapabilities - QUERY - xs:string - GetCapabilities - - - SERVICE${#TestSuite#service}QUERYACCEPTVERSIONS${#TestSuite#version}QUERYVERSION2.0.0QUERY - - Technical test step. Transfer basic data.CapabilitiesResponseAsXmlGetCapabilitiescapabilities#TestCase#trueserviceservice#TestSuite#service#TestCase#trueversionversion#TestSuite#version#TestCase#trueCheck if the auto configuration test case in the TestSetup phase has been completed without errors. In most cases ALL other TestCases will fail if the TestSetup phase has not been completed.capabilities +} + + + + + capabilities + + ALKIS INSPIRE Download Service ALKIS INSPIRE Download Service by XtraServer * AAA Suite @@ -4830,7 +5852,62 @@ if(!"true".equals(autoConfigurationCompleted)) { -]]>serviceWFSversion2.0.0qaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateTest module for checking Capabilities related information.SEQUENTIAL]]> + + + + service + WFS + + + version + 2.0.0 + + + qaf.ShortDescription + + + + qaf.Author + + + + qaf.CreationDate + + + + qaf.Version + + + + qaf.AssociatedRequirements + + + + qaf.ExpectedResults + + + + qaf.Status + + + + qaf.LastUpdateDate + + +
+ + + + + + + Test module for checking Capabilities related information. + + SEQUENTIAL + + +
Relevant Requirements: @@ -4839,33 +5916,105 @@ Relevant Requirements:

-Source: Abstract Test Case 'Extended capabilities']]>
96964cba-9ef1-4188-9e87-47bca74559d4capabilitiesserviceversionqaf.ShortDescriptionqaf.Authorqaf.CreationDateqaf.Versionqaf.AssociatedRequirementsqaf.ExpectedResultsqaf.Statusqaf.LastUpdateDateSINGLETON_AND_WAIT - - - - <xml-fragment/> - - UTF-8 - ${#Project#serviceEndpoint} - - import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Extended capabilities']]> + + + + + + 96964cba-9ef1-4188-9e87-47bca74559d4 + + + capabilities + + + service + + + version + + + qaf.ShortDescription + + + qaf.Author + + + qaf.CreationDate + + + qaf.Version + + + qaf.AssociatedRequirements + + + qaf.ExpectedResults + + + qaf.Status + + + qaf.LastUpdateDate + + + + SINGLETON_AND_WAIT + + + + + + + <xml-fragment/> + + UTF-8 + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]", "TR.capabilities.extended.inspire.missingElement");BasicBasicGlobal HTTP Settings - - - - - - request - GetCapabilities - QUERY - xs:string - GetCapabilities - - - ACCEPTVERSIONS${#TestSuite#version}QUERYservice${#TestSuite#service}QUERY - -
+ + + + Basic + Basic + Global HTTP Settings + + + + + + + + request + GetCapabilities + QUERY + xs:string + GetCapabilities + + + + ACCEPTVERSIONS + ${#TestSuite#version} + QUERY + + + service + ${#TestSuite#service} + QUERY + + + + + + + + +
Relevant Requirements: @@ -4875,9 +6024,65 @@ Relevant Requirements:

Source: Abstract Test Case 'Provide Response Language' -]]>
938f750f-00ed-4100-b6ad-cc32c10ffeb3SINGLETON_AND_WAIT<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +]]> + + + + + + 938f750f-00ed-4100-b6ad-cc32c10ffeb3 + + + SINGLETON_AND_WAIT + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:ResponseLanguage/inspire_common:Language", "TR.capabilities.extended.inspire.missingElement");BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERY
+ + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + + + + + + +
Relevant Requirements: @@ -4888,9 +6093,65 @@ Regardless of the response language, the list of supported languages is invarian

-Source: Abstract Test Case 'Provide Supported Languages']]>
938f750f-00ed-4100-b6ad-cc32c10ffeb3SINGLETON_AND_WAIT<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Provide Supported Languages']]> + + + + + + 938f750f-00ed-4100-b6ad-cc32c10ffeb3 + + + SINGLETON_AND_WAIT + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:DefaultLanguage/inspire_common:Language", "TR.capabilities.extended.inspire.missingElement");BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERY
+ + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + + + + + + +
Relevant Requirements: @@ -4903,27 +6164,150 @@ Regardless of the response language, the list of supported languages is invarian

-Source: Abstract Test Case 'Provide Default Language']]>
938f750f-00ed-4100-b6ad-cc32c10ffeb3SINGLETON_AND_WAITRequest Capabilities without Language parameter.<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Provide Default Language']]> + + + + + + 938f750f-00ed-4100-b6ad-cc32c10ffeb3 + + + SINGLETON_AND_WAIT + + + + + + Request Capabilities without Language parameter. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValues( "/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:DefaultLanguage/inspire_common:Language", "/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:ResponseLanguage/inspire_common:Language" -);BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYRequest Capabilities with an unsupported Language code. It is assumed, that the service does not support the 'Chinese' ('chi' ISO 639-2/B code) language.<xml-fragment/>${#Project#serviceEndpoint}30000200import de.interactive_instruments.etf.suim.* +); + + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + + + + + + Request Capabilities with an unsupported Language code. It is assumed, that the service does not support the 'Chinese' ('chi' ISO 639-2/B code) language. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 30000 + + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValues( "/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:DefaultLanguage/inspire_common:Language", "/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:ResponseLanguage/inspire_common:Language" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValuesInStep( "/*:WFS_Capabilities/ows:ServiceIdentification/ows:Abstract", "Request GetCapabilities", -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equalPathValuesInStep( "/*:WFS_Capabilities/ows:ServiceIdentification/ows:Title", "Request GetCapabilities", -);BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYLANGUAGEchiQUERY
+ + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + LANGUAGE + chi + QUERY + + + + + + + + +
Relevant Requirements: @@ -4938,12 +6322,86 @@ based on ISO 639-2/B alpha 3 codes as used in INSPIRE Metadata Implementing Rule

-Source: Abstract Test Case 'Language affects capabilities']]>
f8615ee2-19af-468c-9031-e5acf761a9baSINGLETON_AND_WAIT7ca0b228-93b3-4e29-8a05-b1a040d153d5SINGLETON_AND_WAITGet Capabilities and check that the GetCapabilities OnlineResource exists.<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Language affects capabilities']]> + + + + + + f8615ee2-19af-468c-9031-e5acf761a9ba + + + SINGLETON_AND_WAIT + + + + + + 7ca0b228-93b3-4e29-8a05-b1a040d153d5 + + + SINGLETON_AND_WAIT + + + + + + Get Capabilities and check that the GetCapabilities OnlineResource exists. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.existsNonEmptyText( "/*:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name='GetCapabilities']/ows:DCP/ows:HTTP/ows:Get[1]/@xlink:href", "GetCapabilities operation href" -);BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYversion2.0.0QUERYSupportedLanguage codes ResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +); + + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + version + 2.0.0 + QUERY + + + + + + + + + SupportedLanguage codes + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -4955,33 +6413,96 @@ string-join( (/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:DefaultLanguage/inspire_common:Language, /*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:SupportedLanguage/inspire_common:Language), ',') -supportedLanguageCodesTransfer_PropertiestrueGetCapabilities OnlineResourceResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; + + supportedLanguageCodes + Transfer_Properties + true + + + GetCapabilities OnlineResource + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; - /*:WFS_Capabilities/ows:OperationsMetadata/ows:Operation[@name="GetCapabilities"]/ows:DCP/ows:HTTP/ows:Get[1]/@xlink:href -getCapabilitiesOnlineResourceTransfer_PropertiestruegetCapabilitiesOnlineResourceresponseLanguageCodesupportedLanguageCodesTechnical test step. The SupportedLanguage codes are extracted from the previous GetCapabilities response (test step 'Request GetCapabilities'). Executes 'Request GetCapabilities in SupportedLanguage' for each SupportedLanguage code.Executed by 'Loop through Supported Language codes' with all SupportedLanguage codes.<xml-fragment/>${#getCapabilitiesOnlineResource}30000200import de.interactive_instruments.xtf.* -SOAPUI_I.init(log, context, messageExchange) -final ProjectHelper ph = new ProjectHelper() - -import de.interactive_instruments.etf.suim.* +testRunner.gotoStepByName("End test"); + + + + + + Executed by 'Loop through Supported Language codes' with all SupportedLanguage codes. + + <xml-fragment/> + + ${#getCapabilitiesOnlineResource} + + + + 30000 + + + + + + 200 + + + + + import de.interactive_instruments.xtf.*; +SOAPUI_I.init(log, context, messageExchange); +final ProjectHelper ph = new ProjectHelper(); + +import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); @@ -4989,7 +6510,13 @@ a.equals( "/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:ResponseLanguage/inspire_common:Language", "ResponseLanguage", ph.getTransferProperty("responseLanguageCode") -); + + + + + + Language,{$language}) } -]]><etfTranslate what="TR.missingElementWithValue"/>falsefalsefalseBasicBasicGlobal HTTP SettingsSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYversion2.0.0QUERYLANGUAGE${#responseLanguageCode}QUERY#getCapabilitiesOnlineResource#getCapabilitiesOnlineResourceTEMPLATE#getCapabilitiesOnlineResource
]]> + + <etfTranslate what="TR.missingElementWithValue"/> + false + false + false + + + + Basic + Basic + Global HTTP Settings + + + + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + version + 2.0.0 + QUERY + + + LANGUAGE + ${#responseLanguageCode} + QUERY + + + #getCapabilitiesOnlineResource + #getCapabilitiesOnlineResource + TEMPLATE + #getCapabilitiesOnlineResource + + + + + + + + + + + + + + +
@@ -5018,7 +6600,86 @@ inspire_dls:ExtendedCapabilities schema.

-Source: Abstract Test Case 'Service Metadata']]>
938f750f-00ed-4100-b6ad-cc32c10ffeb3SINGLETON_AND_WAITCapabilitiesurlToTestServiceMetadataRecordRequest Capabilities to check for the MetadataUrl<xml-fragment/>${#Project#serviceEndpoint}BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYversion2.0.0QUERYINSPIREServiceMetadataUrlResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +Source: Abstract Test Case 'Service Metadata']]> + + + + + + 938f750f-00ed-4100-b6ad-cc32c10ffeb3 + + + SINGLETON_AND_WAIT + + + + + + + + Capabilities + + + + urlToTest + + + + ServiceMetadataRecord + + + + + + + + + Request Capabilities to check for the MetadataUrl + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + version + 2.0.0 + QUERY + + + + + + + + + INSPIREServiceMetadataUrl + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -5027,15 +6688,45 @@ declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1 declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; /*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities/inspire_common:MetadataUrl/inspire_common:URL -EndpointRequest and check external ServiceMetadatatrueGetCapabilitiesURL from CapabilitiesResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; + + Endpoint + Request and check external ServiceMetadata + true + + + GetCapabilitiesURL from Capabilities + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; - -//ows:Operation[@name='GetCapabilities'][1]/ows:DCP/ows:HTTP/ows:Get/@xlink:hrefEndpointCheck ServiceMetadata in CapabilitiestrueCapabilitiesResponseAsXmlRequest GetCapabilitiesCapabilitiesTransfer_PropertiestrueExternalServiceMetadataXPATHdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +//ows:Operation[@name='GetCapabilities'][1]/ows:DCP/ows:HTTP/ows:Get/@xlink:href + Endpoint + Check ServiceMetadata in Capabilities + true + + + Capabilities + ResponseAsXml + Request GetCapabilities + + Capabilities + Transfer_Properties + true + + + + + + + + ExternalServiceMetadata + XPATH + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -5043,94 +6734,196 @@ declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; -string-length(//inspire_dls:ExtendedCapabilities/inspire_common:MetadataUrl/inspire_common:URL)>0Internal Service Metadata endCheck Metadata that are included in the ExtendedCapabilities section<xml-fragment/>https://www.wfs.nrw.de/geobasis/wfs_nw_inspire-adressen_hk?import de.interactive_instruments.etf.suim.* +string-length(//inspire_dls:ExtendedCapabilities/inspire_common:MetadataUrl/inspire_common:URL)>0 + Internal Service Metadata end + + + + + + + Check Metadata that are included in the ExtendedCapabilities section + + <xml-fragment/> + + + https://www.wfs.nrw.de/geobasis/wfs_nw_inspire-adressen_hk? + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.existsNonEmptyText( "//inspire_dls:ExtendedCapabilities/inspire_common:MetadataDate", "TR.capabilities.extended.inspire.missingElement" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Namespace", "TR.missingSpatialDataSetIdentifierNamespace" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Code", "TR.capabilities.extended.inspire.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_common:MetadataPointOfContact", "TR.capabilities.extended.inspire.missingElement" -);import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/*:WFS_Capabilities/ows:ServiceIdentification/ows:Keywords[ows:Keyword='infoFeatureAccessService']", "TR.missingInfoFeatureAccessService" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/*:WFS_Capabilities/ows:ServiceIdentification/ows:Abstract", "TR.capabilities.ows.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/*:WFS_Capabilities/ows:ServiceIdentification/ows:Title", "TR.capabilities.ows.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_common:ResourceType", "TR.capabilities.extended.inspire.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_common:ResourceLocator", "TR.capabilities.extended.inspire.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.equals( "//inspire_dls:ExtendedCapabilities/inspire_common:SpatialDataServiceType", "SpatialDataServiceType", "download", "TR.capabilities.extended.inspire.invalidValue" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//*:FeatureType[string-length(ows:WGS84BoundingBox/ows:LowerCorner)=0]", "TR.capabilities.ft.missingOwsWgs84BoundingBox" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_common:TemporalReference", "TR.capabilities.extended.inspire.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_common:Conformity", "TR.capabilities.extended.inspire.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//ows:ServiceIdentification/ows:Fees", "TR.capabilities.ows.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//ows:ServiceIdentification/ows:AccessConstraints", "TR.capabilities.ows.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo", "TR.capabilities.ows.missingElement" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//ows:ServiceProvider/ows:ProviderName", "TR.capabilities.ows.missingElement" -)declare namespace wfs='http://www.opengis.net/wfs/2.0'; +); + + + + + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -5144,38 +6937,139 @@ for $featureType in //*:FeatureType where string-length($featureType/*:MetadataURL/@xlink:href)=0 return <name>{$featureType/*:Name/text()}</name> } -</etfTranslate><etfTranslate what="TR.missingWfsMetadataUrl"/>falsefalsefalseBasicBasicGlobal HTTP SettingsSERVICEWFSQUERYACCEPTVERSIONS2.0.0QUERYREQUESTGetCapabilitiesQUERYTechnical test step. Iterate over all Metadata URLs and check with 'Get Metadata from Capabilities' that response contains Metadata.Called by 'Loop Metadata URLs from Capabilities' with an URL found in the ExtendedCapabilites.<xml-fragment/>${#urlToTest}20030000xsi:schemaLocationimport de.interactive_instruments.etf.suim.* +testRunner.gotoStepByName("Internal Service Metadata end"); + + + + + + Called by 'Loop Metadata URLs from Capabilities' with an URL found in the ExtendedCapabilites. + + <xml-fragment/> + + ${#urlToTest} + + + + 200 + + + + + 30000 + + + + + xsi:schemaLocation + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata/gmd:fileIdentifier", "TR.missingMdFileIdentifier" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata", "TR.invalidIsoMetadata" -)BasicBasicGlobal HTTP Settings#urlToTest#urlToTestTEMPLATE#urlToTestSkipScenario1XPATHdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +); + + + + Basic + Basic + Global HTTP Settings + + + + + + #urlToTest + #urlToTest + TEMPLATE + #urlToTest + + + + + + + + + + + + + SkipScenario1 + XPATH + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -5183,60 +7077,179 @@ declare namespace xlink='http://www.w3.org/1999/xlink'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; -empty(//inspire_dls:ExtendedCapabilities/inspire_common:MetadataUrl/inspire_common:URL)Test endUses the MetadataUrl from the ExtendedCapabilities to request the ServiceMetadata.<xml-fragment/>http://nowhere20030000import de.interactive_instruments.etf.suim.* +empty(//inspire_dls:ExtendedCapabilities/inspire_common:MetadataUrl/inspire_common:URL) + Test end + + + + + + + Uses the MetadataUrl from the ExtendedCapabilities to request the ServiceMetadata. + + <xml-fragment/> + + + http://nowhere + + + + 200 + + + + + 30000 + + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("//@*:schemaLocation", "TR.missingSchemaLocation");import de.interactive_instruments.etf.suim.* +a.exists("//@*:schemaLocation", "TR.missingSchemaLocation"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata", "TR.notIsoMetadata" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn", "TR.metadata.operatesOn.missingElement" -) import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.notExists( "//gmd:MD_Metadata/gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn[empty(@xlink:href)]", "TR.metadata.operatesOn.missingHref" -)BasicBasicGlobal HTTP SettingsdatasetIdentifiersOperatesOnResponseAsXmlRequest and check external ServiceMetadatadeclare namespace gmd='http://www.isotc211.org/2005/gmd'; +); + + + + Basic + Basic + Global HTTP Settings + + + + + + + + + + + datasetIdentifiersOperatesOn + ResponseAsXml + Request and check external ServiceMetadata + declare namespace gmd='http://www.isotc211.org/2005/gmd'; declare namespace srv='http://www.isotc211.org/2005/srv'; declare namespace gco='http://www.isotc211.org/2005/gco'; -string-join(//srv:operatesOn/@uuidref,',')datasetIdentifiersList#Project#trueServiceMetadataRecordResponseAsXmlRequest and check external ServiceMetadataServiceMetadataRecordTransfer_PropertiestrueTechnical test step which will loop over all Metadata URLs which were found in the external Service Metadata and execute test step 'Get Metadata from Service Metadata'.Called by 'Loop Metadata URLs from Service Metadata' with an URL found in the external Service Metadata.<xml-fragment/>true${#urlToTest}30000200import de.interactive_instruments.etf.suim.* + + + + + + + Called by 'Loop Metadata URLs from Service Metadata' with an URL found in the external Service Metadata. + + <xml-fragment/> + true + + ${#urlToTest} + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata", "TR.notIsoMetadata" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//gmd:MD_Metadata/gmd:fileIdentifier", "TR.missingElement" -) + + + + + + { @@ -5246,10 +7259,57 @@ if (contains('${#Project#datasetIdentifiersList}', $id)) then the MD_Identifier exists in the Service metadata. else ( {$id/text()},${#Project#datasetIdentifiersList} ) } -]]><etfTranslate what="TR.missingMdIdentifier"> +]]> + + <etfTranslate what="TR.missingMdIdentifier"> <INFO>the MD_Identifier exists in the Service metadata.</INFO> -</etfTranslate>falsefalsefalseBasicBasicGlobal HTTP Settings#urlToTest#urlToTestTEMPLATE#urlToTest
SERVICEWFSVERSION2.0.0
-Test module for checking Stored Query specific functionalities.SEQUENTIAL + false + false + false + + + + Basic + Basic + Global HTTP Settings + + + + + + #urlToTest + #urlToTest + TEMPLATE + #urlToTest + + + + + + + + + + + + + SERVICE + WFS + + + VERSION + 2.0.0 + + + + + Test module for checking Stored Query specific functionalities. + + SEQUENTIAL + + + @@ -5267,38 +7327,232 @@ query.

-Source: Abstract Test Case 'Predefined Stored Query']]>
938f750f-00ed-4100-b6ad-cc32c10ffeb3SINGLETON_AND_WAITsupportedCrssupportedLanguagesspatialDataSetIdentifierCodesspatialDataSetIdentifierNamespacesstoredQueryIdcrslanguagedataSetIdCodedataSetIdNamespaceReqest DescribeStoreQueries and test that the DescribeStoredQueries response contains at least one StoredQueryDescription with the Parameters: 'CRS', 'DataSetIdCode', 'DataSetIdNamespace' and 'Language'.<xml-fragment/>${#Project#endpt.DescribeStoredQueries.Get}xsi:schemaLocation30000200import de.interactive_instruments.etf.suim.* +Source: Abstract Test Case 'Predefined Stored Query']]> + + + + + + 938f750f-00ed-4100-b6ad-cc32c10ffeb3 + + + SINGLETON_AND_WAIT + + + + + + + + supportedCrs + + + + supportedLanguages + + + + spatialDataSetIdentifierCodes + + + + spatialDataSetIdentifierNamespaces + + + + storedQueryId + + + + crs + + + + language + + + + dataSetIdCode + + + + dataSetIdNamespace + + + + + + + + + Reqest DescribeStoreQueries and test that the DescribeStoredQueries response contains at least one StoredQueryDescription with the Parameters: 'CRS', 'DataSetIdCode', 'DataSetIdNamespace' and 'Language'. + + <xml-fragment/> + + ${#Project#endpt.DescribeStoredQueries.Get} + + + + + xsi:schemaLocation + + + + + 30000 + + + + + 200 + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists("/*:DescribeStoredQueriesResponse/*:StoredQueryDescription[./*:Parameter/@name='CRS' and ./*:Parameter/@name='DataSetIdCode' and ./*:Parameter/@name='DataSetIdNamespace' and ./*:Parameter/@name='Language']", "TR.manual.missingInspireStoredQuery"); -import de.interactive_instruments.etf.suim.* + + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); // Todo warning for TG Recommendation 13 -a.exists("/*:DescribeStoredQueriesResponse/*:StoredQueryDescription[@id='http://inspire.ec.europa.eu/operation/download/GetSpatialDataSet']", "TR.manual.GetSpatialDataSetIdentifier");import de.interactive_instruments.etf.suim.* +a.exists("/*:DescribeStoredQueriesResponse/*:StoredQueryDescription[@id='http://inspire.ec.europa.eu/operation/download/GetSpatialDataSet']", "TR.manual.GetSpatialDataSetIdentifier"); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "/*:DescribeStoredQueriesResponse", "missingStoredQueriesRootElement" -)BasicBasicGlobal HTTP SettingsREQUESTDescribeStoredQueriesQUERYVERSION2.0.0QUERYSERVICEWFSQUERYStored Query IDResponseAsXmlRequest and check DescribeStoredQueriesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +); + + + + Basic + Basic + Global HTTP Settings + + + + + + REQUEST + DescribeStoredQueries + QUERY + + + VERSION + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + + + + + + + Stored Query ID + ResponseAsXml + Request and check DescribeStoredQueries + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; -/*:DescribeStoredQueriesResponse/*:StoredQueryDescription[./*:Parameter/@name='DataSetIdCode' and ./*:Parameter/@name='DataSetIdCode' and ./*:Parameter/@name='DataSetIdNamespace' and ./*:Parameter/@name='Language']/@idstoredQueryIdTransfer_PropertiestrueRequest GetCapabilities and check that SpatialDataSetIdentifier exist.<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +/*:DescribeStoredQueriesResponse/*:StoredQueryDescription[./*:Parameter/@name='DataSetIdCode' and ./*:Parameter/@name='DataSetIdCode' and ./*:Parameter/@name='DataSetIdNamespace' and ./*:Parameter/@name='Language']/@id + storedQueryId + Transfer_Properties + true + + + + + + + Request GetCapabilities and check that SpatialDataSetIdentifier exist. + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Namespace", "TR.missingSpatialDataSetIdentifierNamespace" -)import de.interactive_instruments.etf.suim.* +); + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( "//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Code", "TR.capabilities.extended.inspire.missingElement" -) - - -BasicBasicGlobal HTTP SettingsACCEPTVERSIONS2.0.0QUERYSERVICEWFSQUERYREQUESTGetCapabilitiesQUERYsupportedCrsResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; - -string-join( distinct-values( (//*:DefaultCRS, //*:OtherCRS) ), ',' )supportedCrsTransfer_PropertiestruesupportedLanguagesResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +); + + + + Basic + Basic + Global HTTP Settings + + + + + + ACCEPTVERSIONS + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + REQUEST + GetCapabilities + QUERY + + + + + + + + + supportedCrs + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; + +string-join( distinct-values( (//*:DefaultCRS, //*:OtherCRS) ), ',' ) + supportedCrs + Transfer_Properties + true + + + supportedLanguages + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace ows='http://www.opengis.net/ows/1.1'; declare namespace fes='http://www.opengis.net/fes/2.0'; declare namespace gml='http://www.opengis.net/gml/3.2'; @@ -5309,94 +7563,325 @@ declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0 string-join( distinct-values((/*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:DefaultLanguage/inspire_common:Language, /*:WFS_Capabilities/ows:OperationsMetadata/ows:ExtendedCapabilities/inspire_dls:ExtendedCapabilities[1]/inspire_common:SupportedLanguages/inspire_common:SupportedLanguage/inspire_common:Language)), -',')supportedLanguagesTransfer_PropertiestruespatialDataSetIdentifierCodesResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +',') + supportedLanguages + Transfer_Properties + true + + + spatialDataSetIdentifierCodes + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; -string-join( (//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Code), ',' )spatialDataSetIdentifierCodesTransfer_PropertiestruespatialDataSetIdentifierNamespacesResponseAsXmlRequest GetCapabilitiesdeclare namespace wfs='http://www.opengis.net/wfs/2.0'; +string-join( (//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Code), ',' ) + spatialDataSetIdentifierCodes + Transfer_Properties + true + + + spatialDataSetIdentifierNamespaces + ResponseAsXml + Request GetCapabilities + declare namespace wfs='http://www.opengis.net/wfs/2.0'; declare namespace inspire_dls='http://inspire.ec.europa.eu/schemas/inspire_dls/1.0'; declare namespace inspire_common='http://inspire.ec.europa.eu/schemas/common/1.0'; -string-join( (//inspire_dls:ExtendedCapabilities/inspire_dls:SpatialDataSetIdentifier/inspire_common:Namespace), ',' )spatialDataSetIdentifierNamespacesTransfer_PropertiestrueTechnical test step. 'CRS', 'DataSetIdCode', 'DataSetIdNamespace' and 'Language' are extracted from the previous GetCapabilities response (test step 'Request GetCapabilities'). Executes 'Invoke Stored Query with CRS, Language, SpatialDataSetIdentifier' for each parameter combination.A GetFeature request executed by 'Loop through CRS, Language, SpatialDataSetIdentifier' with all combinations of the 'CRS', 'DataSetIdCode', 'DataSetIdNamespace' and 'Language' parameters and the Stored Query ID extracted from the previous DescribeStoredQueries response (test step 'Request and check DescribeStoredQueries').<xml-fragment/>${#Project#endpt.DescribeStoredQueries.Get}20030000xsi:schemaLocationimport de.interactive_instruments.etf.suim.* +testRunner.gotoStepByName("End test"); + + + + + + A GetFeature request executed by 'Loop through CRS, Language, SpatialDataSetIdentifier' with all combinations of the 'CRS', 'DataSetIdCode', 'DataSetIdNamespace' and 'Language' parameters and the Stored Query ID extracted from the previous DescribeStoredQueries response (test step 'Request and check DescribeStoredQueries'). + + <xml-fragment/> + + + ${#Project#endpt.DescribeStoredQueries.Get} + + + + 200 + + + + + 30000 + + + + + + xsi:schemaLocation + + + + + import de.interactive_instruments.etf.suim.*; Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement");import com.eviware.soapui.support.XmlHolder; -import de.interactive_instruments.etf.suim.* -import de.interactive_instruments.xtf.* +a.exists("/*:FeatureCollection", "TR.missingFeatureCollectionRootElement"); + + + + + import com.eviware.soapui.support.XmlHolder; +import de.interactive_instruments.etf.suim.*; +import de.interactive_instruments.xtf.*; -def xml = new XmlHolder(messageExchange.responseContentAsXml) +def xml = new XmlHolder(messageExchange.responseContentAsXml); -SOAPUI_I.init(log, context, messageExchange) -final ProjectHelper ph = new ProjectHelper() +SOAPUI_I.init(log, context, messageExchange); +final ProjectHelper ph = new ProjectHelper(); String expectedCrs = ph.getTransferProperty("crs"); Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); -def node = xml.getDomNode("/*:FeatureCollection/*:boundedBy/gml:Envelope/@srsName") +def node = xml.getDomNode("/*:FeatureCollection/*:boundedBy/gml:Envelope/@srsName"); if (node != null){ a.equals("/*:FeatureCollection/*:boundedBy/gml:Envelope/@srsName", "CRS", expectedCrs, "TR.unexpectedCRS"); } -BasicBasicGlobal HTTP SettingsREQUESTGetFeatureQUERYVERSION2.0.0QUERYSERVICEWFSQUERYSTOREDQUERY_ID${Transfer_Properties#storedQueryId}QUERYCRS${Transfer_Properties#crs}QUERYDataSetIdCode${Transfer_Properties#dataSetIdCode}QUERYDataSetIdNamespace${Transfer_Properties#dataSetIdNamespace}QUERYLanguage${Transfer_Properties#language}QUERY
- - serviceEndpoint - - - excludeFeatureTypes - - - - - - - featureTypeList - - - - srsnamelist - - - - - - - - - - - - - - datasetIdentifiersListFirstFeatureFirstFeatureIdauthUserauthPwdetf.ignore.propertiesexcludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.dateauthMethodbasicFirstFeatureTypeNametestIntensiveendpt.GetFeature.Getendpt.DescribeFeatureType.Getendpt.GetFeature.Postendpt.DescribeFeatureType.Postendpt.GetPropertyValue.Getendpt.GetPropertyValue.Postendpt.ListStoredQueries.Getendpt.ListStoredQueries.Postendpt.DescribeStoredQueries.Getendpt.DescribeStoredQueries.Postblacklisted.outputFormatstext/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1etf.tag.idsEIDe51620af-bcf5-4719-ab0e-ef6226a572faetf.translation.template.collection.idEIDfadd4929-fa60-4781-b658-703bbfe3f4ebetf.authorGeonovumetf.version1.0.10etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-pre-defined-soapui-project.xmletf.creation.date2017-01-27T00:00:00etf.supported.test.object.type.idsEID9b6ef734-981e-4d60-aa81-d6730a1c6389etf.last.update.date2021-04-29T11:30:00 - - - - import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; + + + + + Basic + Basic + Global HTTP Settings + + + + + + REQUEST + GetFeature + QUERY + + + VERSION + 2.0.0 + QUERY + + + SERVICE + WFS + QUERY + + + STOREDQUERY_ID + ${Transfer_Properties#storedQueryId} + QUERY + + + CRS + ${Transfer_Properties#crs} + QUERY + + + DataSetIdCode + ${Transfer_Properties#dataSetIdCode} + QUERY + + + DataSetIdNamespace + ${Transfer_Properties#dataSetIdNamespace} + QUERY + + + Language + ${Transfer_Properties#language} + QUERY + + + + + + + + + + + serviceEndpoint + + + + excludeFeatureTypes + + + + + + featureTypeList + + + + srsnamelist + + + + + + datasetIdentifiersList + + + + FirstFeature + + + + FirstFeatureId + + + + authUser + + + + authPwd + + + + etf.ignore.properties + excludeFeatureTypes, srsnamelist, blacklisted.outputFormats, authUser, authPwd, authMethod, FirstFeature, FirstFeatureId, GetFeatureURL, featureTypeList, datasetIdentifiersList, featureTypeList, FirstFeatureTypeName, testIntensive, endpt.GetFeature.Get, endpt.DescribeFeatureType.Get, endpt.GetFeature.Post, endpt.DescribeFeatureType.Post, endpt.GetPropertyValue.Get, endpt.GetPropertyValue.Post, endpt.ListStoredQueries.Get, endpt.ListStoredQueries.Post, endpt.DescribeStoredQueries.Get, endpt.DescribeStoredQueries.Post, etf.translation.template.collection.id, etf.tag.ids, etf.author, etf.version, etf.last.editor, etf.reference, etf.creation.date + + + authMethod + basic + + + FirstFeatureTypeName + + + + testIntensive + + + + endpt.GetFeature.Get + + + + endpt.DescribeFeatureType.Get + + + + endpt.GetFeature.Post + + + + endpt.DescribeFeatureType.Post + + + + endpt.GetPropertyValue.Get + + + + endpt.GetPropertyValue.Post + + + + endpt.ListStoredQueries.Get + + + + endpt.ListStoredQueries.Post + + + + endpt.DescribeStoredQueries.Get + + + + endpt.DescribeStoredQueries.Post + + + + blacklisted.outputFormats + text/xml; subtype=gml/3.1.1, application/gml+xml; version=3.1 + + + etf.tag.ids + EIDe51620af-bcf5-4719-ab0e-ef6226a572fa + + + etf.translation.template.collection.id + EIDfadd4929-fa60-4781-b658-703bbfe3f4eb + + + etf.author + Geonovum + + + etf.version + 1.0.10 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.reference + https://github.com/inspire-eu-validation/ets-repository/tree/master/service/ds-wfs-pre-defined-soapui-project.xml + + + etf.creation.date + 2017-01-27T00:00:00 + + + etf.supported.test.object.type.ids + EID9b6ef734-981e-4d60-aa81-d6730a1c6389 + + + etf.last.update.date + 2021-04-29T11:30:00 + + + + + + + import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep import com.eviware.soapui.model.testsuite.TestStepResult; @@ -5410,7 +7895,7 @@ for( testSuiteR in runner?.getResults() ) { for( testCaseR in testSuiteR?.getResults() ) { for( testStepR in testCaseR?.getResults() ) { - if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { + if(testStepR.getStatus()!=TestStepResult.TestStepStatus.OK) { if (testStepR.testStep instanceof HttpTestRequestStep || testStepR.testStep instanceof RestTestRequestStep) { testStepR.testStep.testRequest.assertionList.each{ // Extract ID which is seperated with a whitespace and a doublecolon @@ -5426,7 +7911,7 @@ for( testSuiteR in runner?.getResults() ) { // Todo: Save the requirements as an object in a map requirements.getPropertyList().each { - log.info(it.getName()) + log.info(it.getName()); if(it.getName().contains(id)) { log.error(" - "+it.getName()+" :" ); log.error(" "+it.getValue()); @@ -5442,5 +7927,6 @@ for( testSuiteR in runner?.getResults() ) { } } } - - + + + \ No newline at end of file diff --git a/service/template_service/service_wmts1.0_idee_landuse.xml b/service/template_service/service_wmts1.0_idee_landuse.xml index 901780ccd..897558c1e 100644 --- a/service/template_service/service_wmts1.0_idee_landuse.xml +++ b/service/template_service/service_wmts1.0_idee_landuse.xml @@ -24,15 +24,15 @@ Instituto Geográfico Nacional - + Instituto Geográfico Nacional - + ign@fomento.es - + pointOfContact @@ -88,14 +88,14 @@ 179 89 LC.LandCoverSurfaces - + - LandCover + LandCover image/png @@ -119,14 +119,14 @@ 179 89 LU.ExistingLandUse - + - ExistingLandUse + ExistingLandUse image/png diff --git a/service/vs-wms-soapui-project.xml b/service/vs-wms-soapui-project.xml index e53e8f3aa..67d3db5a3 100644 --- a/service/vs-wms-soapui-project.xml +++ b/service/vs-wms-soapui-project.xml @@ -1,11 +1,17 @@ - + +
-Please report any issues or problems in GitHub. +Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'View Service WMS']]>
+Source: Conformance Class 'View Service WMS']]> +
+ + + @@ -36,7 +42,18 @@ Source: -]]>SEQUENTIAL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version} + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + + + + + + + + + + + + + + + + + + <xml-fragment/>http://inspire.ec.europa.eu/layer/layer.en.xml20030000No Authorization + + + + + + + <xml-fragment/> + + http://inspire.ec.europa.eu/layer/layer.en.xml + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + + + + + + + + + Test that the XML capabilities document is schema valid.

-

More information: XML schema validation

]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint} import javax.xml.transform.stream.StreamSource; +} + + + + + + + Test that the XML capabilities document is schema valid.

+

More information: XML schema validation

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import javax.xml.transform.stream.StreamSource; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Schema; import javax.xml.validation.Validator @@ -219,7 +371,46 @@ if(makeInitialRequest){ writer.write(file); writer.close() return tempFile; - }No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}
Test that the GetCapabilities operation is supported implementing the Get View Service Metadata.

-

More information: GetCapabilities request parameters

]]>
<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; + + + + +
+ + + Test that the GetCapabilities operation is supported implementing the Get View Service Metadata.

+

More information: GetCapabilities request parameters

]]> +
+ + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ String[] assertParams = ['parameter', 'request']; throw new TranslatableAssertionError('TR.noMandatoryParameterNotFail', assertParams); @@ -249,7 +509,47 @@ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseConte if (!(xml_root.ServiceException.size() == 1 || xml_root.Exception.size() == 1)){ String[] assertParams = ['parameter', 'request']; throw new TranslatableAssertionError('TR.noMandatoryParameterNotFail', assertParams); -}30000No Authorizationservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ String[] assertParams = ['parameter', 'request']; throw new TranslatableAssertionError('TR.wrongParameterNotFail', assertParams); @@ -258,7 +558,55 @@ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseConte if (!(xml_root.ServiceException.size() == 1 || xml_root.Exception.size() == 1)){ String[] assertParams = ['parameter', 'request']; throw new TranslatableAssertionError('TR.wrongParameterNotFail', assertParams); -}30000No AuthorizationrequestzzzzQUERYzzzzservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + request + zzzz + QUERY + zzzz + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ String[] assertParams = ['parameter', 'service']; throw new TranslatableAssertionError('TR.noMandatoryParameterNotFail', assertParams); @@ -270,7 +618,47 @@ def xml_root = parser.parseText(messageExchange.response.responseContent); if (!(xml_root.ServiceException.size() == 1 || xml_root.Exception.size() == 1)){ String[] assertParams = ['parameter', 'service']; throw new TranslatableAssertionError('TR.noMandatoryParameterNotFail', assertParams); -}30000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilities<xml-fragment/>${#Project#serviceEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; if(messageExchange.response.responseContent == null){ String[] assertParams = ['parameter', 'service']; throw new TranslatableAssertionError('TR.wrongParameterNotFail', assertParams); @@ -282,8 +670,60 @@ def xml_root = parser.parseText(messageExchange.response.responseContent); if (!(xml_root.ServiceException.size() == 1 || xml_root.Exception.size() == 1)){ String[] assertParams = ['parameter', 'service']; throw new TranslatableAssertionError('TR.wrongParameterNotFail', assertParams); -}30000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservicezzzzQUERYzzzz
Test that a language section is provided to fulfil the language requirements.

-

More information: Language section in Extended Capabilities

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
Test that the metadata of the View Service is published in a Discovery Service.

-

More information: View Service Metadata in Discovery Service

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestCase#metadataEndpoint}20030000No Authorization + + + +
+ + + Test that the metadata of the View Service is published in a Discovery Service.

+

More information: View Service Metadata in Discovery Service

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestCase#metadataEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +tc.getTestStepByName('http-request-metadata').setDisabled(true); + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual09' -);No AuthorizationrequestGetCapabilitiesQUERYxs:string${#Project#request}service${#Project#service}QUERY${#Project#service}metadataEndpointhttps://www.nationaalgeoregister.nl/geonetwork/srv/dut/csw?service=CSW&version=2.0.2&request=GetRecordById&outputschema=http://www.isotc211.org/2005/gmd&elementsetname=full&id=b196f948-5d87-4eb4-9854-a93841c3877f
Test that Title, Abstract and AccessConstraints elements are provided.

-

More information: Mapping of service metadata elements

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
Test that a ResourceType element is given and the value is fixed to 'service'.

-

More information: Resource type is service

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a ResourceType element is given and the value is fixed to 'service'.

+

More information: Resource type is service

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that a Resource Locator element is provided within the Extended Capabilities section.

-

More information: Resource locator

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a Resource Locator element is provided within the Extended Capabilities section.

+

More information: Resource locator

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
+ + + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual13' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Projec#service}Test that, in case of a MetadataURL element is provided, a linkage is provided to a metadata document.

-

More information: Map Coupled Resource metadata URL

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
Test that a SpatialDataService Type element is given within the ExtendedCapabilities section.

-

More information: Map SDS Type with Extended Capabilities

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a SpatialDataService Type element is given within the ExtendedCapabilities section.

+

More information: Map SDS Type with Extended Capabilities

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that at least one keyword from the "Classification of Spatial data Services" is provided.

-

More information: Keyword Node

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that at least one keyword from the "Classification of Spatial data Services" is provided.

+

More information: Keyword Node

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that if additional keywords are provided they are mapped into a KeywordList element.

-

More information: Keyword List

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that if additional keywords are provided they are mapped into a KeywordList element.

+

More information: Keyword List

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that keywords are mapped as Keyword and MandatoryKeyword elements into ExtendedCapabilities section.

-

More information: Keyword within ExtendedCapabilities

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that keywords are mapped as Keyword and MandatoryKeyword elements into ExtendedCapabilities section.

+

More information: Keyword within ExtendedCapabilities

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that a Geographic Bounding Box is given for each Layer element.

-

More information: Geographic BoundingBox

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + +
+ + + Test that a Geographic Bounding Box is given for each Layer element.

+

More information: Geographic BoundingBox

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual19' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}
Test that one of the following dates (date of publication, date of last revision or date of creation) is provided.

-

More information: Date type

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that one of the following dates (date of publication, date of last revision or date of creation) is provided.

+

More information: Date type

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that at least one TemporalReference is given into the ExtendedCapabilities section.

-

More information: Temporal reference

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that at least one TemporalReference is given into the ExtendedCapabilities section.

+

More information: Temporal reference

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that is provided a Degree element indicating the degree of conformity with the implementing rules provided in Art. 7.1 (Interoperability of spatial data sets and services) of the INSPIRE Directive [Directive 2007/2/EC].

-

More information: Degree of conformity

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that is provided a Degree element indicating the degree of conformity with the implementing rules provided in Art. 7.1 (Interoperability of spatial data sets and services) of the INSPIRE Directive [Directive 2007/2/EC].

+

More information: Degree of conformity

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that is provided a Conformity element into the Extended Capabilities section.

-

More information: Conformity

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that is provided a Conformity element into the Extended Capabilities section.

+

More information: Conformity

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that a Fees node is provided defining the conditions for access and use.

-

More information: Fees node

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a Fees node is provided defining the conditions for access and use.

+

More information: Fees node

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that the responsible party information is mapped to the wms:ContactOrganization element of the wms:ContactPersonPrimary within the wms:ContactInformation element.

-

More information: Contact Organization

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that the responsible party information is mapped to the wms:ContactOrganization element of the wms:ContactPersonPrimary within the wms:ContactInformation element.

+

More information: Contact Organization

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that the responsible party role is mapped to the ContactPosition element within the ContactInformation section.

-

More information: Contact Position

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that the responsible party role is mapped to the ContactPosition element within the ContactInformation section.

+

More information: Contact Position

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that are provided a OrganisationName and Emailaddress elements within the MetadataPointOfcontact section.

-

More information: Point of Contact

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that are provided a OrganisationName and Emailaddress elements within the MetadataPointOfcontact section.

+

More information: Point of Contact

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that a MetadataPointOfContact element is provided within the ExtendedCapabilities section.

-

More information: Point of Contact in Extended Capabilities

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a MetadataPointOfContact element is provided within the ExtendedCapabilities section.

+

More information: Point of Contact in Extended Capabilities

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that is provided a MetadataDate element within the ExtendedCapabilities section.

-

More information: Metadata Date

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that is provided a MetadataDate element within the ExtendedCapabilities section.

+

More information: Metadata Date

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that GetCapabilities operation metadata is mapped to the wms:GetCapabilities element.

-

More information: GetCapabilities Operation Metadata

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that GetCapabilities operation metadata is mapped to the wms:GetCapabilities element.

+

More information: GetCapabilities Operation Metadata

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that the GetMap metadata is mapped to the wms:GetMap element and that either PNG or GIF format (without LZW compression) with transparency is supported.

-

More information: GetMap Operation Metadata

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that the GetMap metadata is mapped to the wms:GetMap element and that either PNG or GIF format (without LZW compression) with transparency is supported.

+

More information: GetMap Operation Metadata

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that each layer element contains a Title element.

-

More information: Layer Title

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that each layer element contains a Title element.

+

More information: Layer Title

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that each layer element contains an Abstract element.

-

More information: Layer Abstract

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that each layer element contains an Abstract element.

+

More information: Layer Abstract

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that the additional keywords describing the layer are mapped to the KeywordList element.

-

More information: Layer Keyword

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that the additional keywords describing the layer are mapped to the KeywordList element.

+

More information: Layer Keyword

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that the boundingbox of each layer is mapped to the BoundingBox element.

-

More information: Layer Geographic Bounding Box

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that the boundingbox of each layer is mapped to the BoundingBox element.

+

More information: Layer Geographic Bounding Box

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that AuthorityURL and Identifier elements are used.

-

More information: Layer Authority URL

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that AuthorityURL and Identifier elements are used.

+

More information: Layer Authority URL

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that in each layer, the layer name is mapped into the Name element.

-

More information: Layer Name

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that in each layer, the layer name is mapped into the Name element.

+

More information: Layer Name

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
Test that a supported CRS is provided based on ETRS89 for continental Europe and on ITRS outside continental Europe.

-

More information: Layer coordinate Reference system

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + +
+ + + Test that a supported CRS is provided based on ETRS89 for continental Europe and on ITRS outside continental Europe.

+

More information: Layer coordinate Reference system

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +}]]> + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual40' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}
Test that a style is provided with the name of the default style defined in the INSPIRE Data Specification for the theme of the layer.

-

More information: Layer Default Style

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual43' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual44' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}Test that each style has a human-readable name mapped to Title element and a unique identifier mapped to Name element.

-

More information: Layer Style Title and Name

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
Test that a legend is provided into LegendURL element for each style and supported language defined in the View Service.

-

More information: Layer Style Legend URL

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}language${#Project#language}QUERY${#Project#language}<xml-fragment/>${#TestCase#legendEndpoint}20030000No Authorization + + + +
+ + + Test that a legend is provided into LegendURL element for each style and supported language defined in the View Service.

+

More information: Layer Style Legend URL

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#Project#language} + QUERY + ${#Project#language} + + + + + + + + + + + <xml-fragment/> + + ${#TestCase#legendEndpoint} + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +tsGetLegend.setDisabled(true); + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual47' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}languagedutlegendEndpoint
Test that is provided a Dimension element to declare one or more dimensional parameters.

-

More information: Layer Dimension Pairs

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
SEQUENTIAL452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200/* +} + + + + + + + + + SEQUENTIAL + + + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + + /* def httpResponseHeaders = context.testCase.testSteps["http-request-getmap-default-parameters"].testRequest.response.responseHeaders; def format_requested = context.expand( '${#TestSuite#format}' ); def format_response = httpResponseHeaders["Content-Type"][0]; assert (format_requested == format_response); */ def format_requested = context.expand( '${#TestSuite#format}' ); -assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested));30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYxs:stringVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERYTest that the VERSION parameter in GetMap operation is mandatory.

-

More information: GetMap Version Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested)); + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + xs:string + + + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + + + +
+ + + Test that the VERSION parameter in GetMap operation is mandatory.

+

More information: GetMap Version Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'VERSION']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1313,7 +3037,111 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'VERSION']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1323,8 +3151,136 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#TestSuite#wrongValue}QUERYzzzzLAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}
Test that the REQUEST parameter in GetMap operation is mandatory.

-

More information: GetMap Request Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#TestSuite#wrongValue} + QUERY + zzzz + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + +
+ + + Test that the REQUEST parameter in GetMap operation is mandatory.

+

More information: GetMap Request Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'REQUEST']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1334,7 +3290,111 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'REQUEST']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1344,8 +3404,136 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUEST${#TestSuite#wrongValue}QUERYzzzzSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}
Test that the LAYERS parameter in GetMap operation is mandatory.

-

More information: GetMap Layers Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + ${#TestSuite#wrongValue} + QUERY + zzzz + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + +
+ + + Test that the LAYERS parameter in GetMap operation is mandatory.

+

More information: GetMap Layers Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'LAYERS']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1355,7 +3543,111 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'LAYERS']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1365,13 +3657,253 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#wrongValue}QUERYzzzzSTYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}
Test that the STYLES parameter in GetMap operation is mandatory.

-

More information: GetMap Styles Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#wrongValue} + QUERY + zzzz + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + +
+ + + Test that the STYLES parameter in GetMap operation is mandatory.

+

More information: GetMap Styles Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'STYLES']; if(!(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('image'))){ throw new TranslatableAssertionError('TR.getMapResponseWithEmptyStyleParameterNotImage', assertParams); } -30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLESQUERYCRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; + + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + + QUERY + + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'STYLES']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1381,7 +3913,111 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'STYLES']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1391,8 +4027,136 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#wrongValue}QUERYzzzzCRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#bbox}QUERY${#TestSuite#bbox}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}
Test that the CRS parameter in GetMap operation is mandatory.

-

More information: GetMap CRS Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#wrongValue} + QUERY + zzzz + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#bbox} + QUERY + ${#TestSuite#bbox} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + +
+ + + Test that the CRS parameter in GetMap operation is mandatory.

+

More information: GetMap CRS Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'CRS']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1402,7 +4166,87 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'CRS']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1412,8 +4256,106 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#wrongValue}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERY
Test that the BBOX parameter in GetMap operation is mandatory.

-

More information: GetMap BBOX Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#wrongValue} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + + + +
+ + + Test that the BBOX parameter in GetMap operation is mandatory.

+

More information: GetMap BBOX Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'BBOX']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1423,7 +4365,111 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}WIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'BBOX']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1433,8 +4479,136 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERY${#Project#version}LAYERS${#TestSuite#layers}QUERY${#TestSuite#layers}STYLES${#TestSuite#styles}QUERY${#TestSuite#styles}CRS${#TestSuite#crs}QUERY${#TestSuite#crs}BBOX${#TestSuite#wrongValue}QUERYz,z,z,zWIDTH${#TestSuite#width}QUERY${#TestSuite#width}HEIGHT${#TestSuite#height}QUERY${#TestSuite#height}FORMAT${#TestSuite#format}QUERY${#TestSuite#format}
Test that the WIDTH and HEIGHT parameters in GetMap operation are mandatory.

-

More information: GetMap Width and Height Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + ${#Project#version} + + + + + LAYERS + ${#TestSuite#layers} + QUERY + ${#TestSuite#layers} + + + + + STYLES + ${#TestSuite#styles} + QUERY + ${#TestSuite#styles} + + + + + CRS + ${#TestSuite#crs} + QUERY + ${#TestSuite#crs} + + + + + BBOX + ${#TestSuite#wrongValue} + QUERY + z,z,z,z + + + + + WIDTH + ${#TestSuite#width} + QUERY + ${#TestSuite#width} + + + + + HEIGHT + ${#TestSuite#height} + QUERY + ${#TestSuite#height} + + + + + FORMAT + ${#TestSuite#format} + QUERY + ${#TestSuite#format} + + + + + + + +
+ + + Test that the WIDTH and HEIGHT parameters in GetMap operation are mandatory.

+

More information: GetMap Width and Height Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'WIDTH AND HEIGHT']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1444,7 +4618,79 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYFORMAT${#TestSuite#format}QUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'WIDTH AND HEIGHT']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1454,12 +4700,116 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#wrongValue}QUERYHEIGHT${#TestSuite#wrongValue}QUERYFORMAT${#TestSuite#format}QUERY
Test that the FORMAT parameter in GetMap operation is mandatory.

-

More information: GetMap Format Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'FORMAT']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1469,7 +4819,84 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapNoMandatoryParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'FORMAT']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1479,10 +4906,290 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#wrongValue}QUERY
Test that the service accepts the optional parameter TRANSPARENT.

-

More information: GetMap Transparent Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200def format_requested = context.expand( '${#TestSuite#format}' ); -assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested));30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERYTRANSPARENTTRUEQUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200def format_requested = context.expand( '${#TestSuite#format}' ); -assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested));30000No AuthorizationREQUESTGetMapQUERYGetMapSERVICE${#Project#service}QUERY${#Project#service}VERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERYTRANSPARENTFALSEQUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200import de.interactive_instruments.etf.suim.TranslatableAssertionError; +} + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#wrongValue} + QUERY + + + + + +
+ + + Test that the service accepts the optional parameter TRANSPARENT.

+

More information: GetMap Transparent Parameter

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + + def format_requested = context.expand( '${#TestSuite#format}' ); +assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested)); + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + + + SERVICE + ${#Project#service} + QUERY + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + TRANSPARENT + TRUE + QUERY + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + + def format_requested = context.expand( '${#TestSuite#format}' ); +assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains(format_requested)); + + + + + 30000 + + + + No Authorization + + + + + + REQUEST + GetMap + QUERY + GetMap + + + + + SERVICE + ${#Project#service} + QUERY + ${#Project#service} + + + + + VERSION + ${#Project#version} + QUERY + + + LAYERS + ${#TestSuite#layers} + QUERY + + + STYLES + ${#TestSuite#styles} + QUERY + + + CRS + ${#TestSuite#crs} + QUERY + + + BBOX + ${#TestSuite#bbox} + QUERY + + + WIDTH + ${#TestSuite#width} + QUERY + + + HEIGHT + ${#TestSuite#height} + QUERY + + + FORMAT + ${#TestSuite#format} + QUERY + + + TRANSPARENT + FALSE + QUERY + + + + + + + + + <xml-fragment/> + + ${#TestSuite#getMapEndpoint} + + + + 200 + + + + + import de.interactive_instruments.etf.suim.TranslatableAssertionError; String[] assertParams = ['parameter', 'TRANSPARENT']; if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml')){ def xml_root = new XmlSlurper().parseText(messageExchange.response.responseContent); @@ -1492,9 +5199,327 @@ if(messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('x } else{ throw new TranslatableAssertionError('TR.getMapWrongParameterNotFail', assertParams); -}30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#layers}QUERYSTYLES${#TestSuite#styles}QUERYCRS${#TestSuite#crs}QUERYBBOX${#TestSuite#bbox}QUERYWIDTH${#TestSuite#width}QUERYHEIGHT${#TestSuite#height}QUERYFORMAT${#TestSuite#format}QUERYTRANSPARENT${#TestSuite#wrongValue}QUERY
Test that the service accepts the optional parameter EXCEPTIONS.

-

More information: GetMap Exceptions

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestSuite#getMapEndpoint}200assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml'));30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#wrongValue}QUERYSTYLES${#TestSuite#wrongValue}QUERYCRS${#TestSuite#wrongValue}QUERYBBOX${#TestSuite#wrongValue}QUERYWIDTH${#TestSuite#wrongValue}QUERYHEIGHT${#TestSuite#wrongValue}QUERYFORMAT${#TestSuite#wrongValue}QUERY<xml-fragment/>${#TestSuite#getMapEndpoint}200assert (messageExchange.getResponseHeaders().get('Content-Type', 'value').contains('xml'));30000No AuthorizationREQUESTGetMapQUERYSERVICE${#Project#service}QUERYVERSION${#Project#version}QUERYLAYERS${#TestSuite#wrongValue}QUERYSTYLES${#TestSuite#wrongValue}QUERYCRS${#TestSuite#wrongValue}QUERYBBOX${#TestSuite#wrongValue}QUERYWIDTH${#TestSuite#wrongValue}QUERYHEIGHT${#TestSuite#wrongValue}QUERYFORMAT${#TestSuite#wrongValue}QUERYEXCEPTIONSXMLQUERY
getMapEndpointlayersstylescrsbboxwidthheightformatwrongValue
SEQUENTIALTest that cascaded layers provide a valid metadata through a Discovery Service.

-

More information: LinkViewService Discover

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
Test that the cascaded layer metadata is included as in the original view service.

-

More information: LinkViewService Layer Metadata

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#TestCase#metadataEndpoint}20030000No Authorization + + + +
+ + + Test that the cascaded layer metadata is included as in the original view service.

+

More information: LinkViewService Layer Metadata

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#TestCase#metadataEndpoint} + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + + + + + metadataEndpoint
<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +ts.setDisabled(true);]]> + + + + + + metadataEndpoint + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual63' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual64' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual65' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +); + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + + + + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.testManual67' -);No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}
SEQUENTIALTest that the service accepts the parameter LANGUAGE to request the capabilities document in an specific language.

-

More information: Language Parameter

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERYversion${#Project#version}QUERYlanguage${#TestCase#defaultLanguage}QUERYdefaultLanguagedut
Test that Titles and Abstracts are not affected when the LANGUAGE parameter is absent or unsupported.

-

More information: Language Default

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}language${#TestCase#wrongLanguage}QUERY${TestCase#wrongLanguage} + + + + + defaultLanguage + dut + + +
+ + + Test that Titles and Abstracts are not affected when the LANGUAGE parameter is absent or unsupported.

+

More information: Language Default

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#wrongLanguage} + QUERY + ${TestCase#wrongLanguage} + + + + + + + + + + wrongLanguagezzzz
Test that the service Language Response changes according with the request.

-

More information: Language Response

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYGetCapabilitiesservice${#Project#service}QUERY${#Project#service}version${#Project#version}QUERY${#Project#version}language${#TestCase#language}QUERY${#TestCase#language} + + + + + wrongLanguage + zzzz + + +
+ + + Test that the service Language Response changes according with the request.

+

More information: Language Response

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + GetCapabilities + + + + + service + ${#Project#service} + QUERY + ${#Project#service} + + + + + version + ${#Project#version} + QUERY + ${#Project#version} + + + + + language + ${#TestCase#language} + QUERY + ${#TestCase#language} + + + + + + + + + + languagedut
Test that the capabilities document contains the language elements with the correct multiplicity.

-

More information: Language Supported

]]>
452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL + + + + + language + dut + + +
+ + + Test that the capabilities document contains the language elements with the correct multiplicity.

+

More information: Language Supported

]]> +
+ + + + + 452f3b7c-9db1-47c7-9621-6f76b761feea + + + PARALLELL + + + + + +
serviceEndpointserviceWMSversion1.3.0extended_capabilities_scenariolastServiceEndpointauthUserauthPwdauthMethodbasicetf.ignore.propertiesservice, version, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwdetf.tag.idsEID7c15a770-986a-4aa0-b4cd-7facbca96a1detf.translation.template.collection.idEIDfa68eb83-a25a-4009-84dd-036de4539c93etf.supported.test.object.type.idsEID9981e87e-d642-43b3-ad5f-e77469075e74etf.authorConsortium Bilbomatica, Guadaltel & Geogramaetf.creation.date2018-11-07T00:00:00etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.last.update.date2021-03-09T12:55:00etf.version1.0.10etf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/vs-wms-soapui-project.xmltestIntensive
\ No newline at end of file +} + + + + + + + + + serviceEndpoint + + + + service + WMS + + + version + 1.3.0 + + + extended_capabilities_scenario + + + + lastServiceEndpoint + + + + authUser + + + + authPwd + + + + authMethod + basic + + + etf.ignore.properties + service, version, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwd + + + etf.tag.ids + EID7c15a770-986a-4aa0-b4cd-7facbca96a1d + + + etf.translation.template.collection.id + EIDfa68eb83-a25a-4009-84dd-036de4539c93 + + + etf.supported.test.object.type.ids + EID9981e87e-d642-43b3-ad5f-e77469075e74 + + + etf.author + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2018-11-07T00:00:00 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.last.update.date + 2021-07-13T10:30:00 + + + etf.version + 1.0.11 + + + etf.reference + https://github.com/inspire-eu-validation/ets-repository/tree/master/service/vs-wms-soapui-project.xml + + + testIntensive + + + + + + + + \ No newline at end of file diff --git a/service/vs-wmts-soapui-project.xml b/service/vs-wmts-soapui-project.xml index e86e72f7c..deca3ff63 100644 --- a/service/vs-wmts-soapui-project.xml +++ b/service/vs-wmts-soapui-project.xml @@ -1,11 +1,24 @@ - + +
-This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub. +This is a draft version. It has limitations and is expected to contain errors. Please report any issues or problems in GitHub.

Known limitations are documented in the description of the applicable test case or test assertion.

-Source: Conformance Class 'View Service WMTS']]>
SEQUENTIAL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYxs:stringGetCapabilitiesservice${#Project#service}QUERY${#Project#serviceEndpoint}version${#Project#version}QUERY + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + xs:string + GetCapabilities + + + + service + ${#Project#service} + QUERY + ${#Project#serviceEndpoint} + + + + + version + ${#Project#version} + QUERY + + + + + + + + + + + + + + <xml-fragment/>${#TestSuite#inspireLayerRegister}20030000No AuthorizationlayerLC.LandCoverSurfaces + + + + + + + <xml-fragment/> + + ${#TestSuite#inspireLayerRegister} + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + + + + layer + LC.LandCoverSurfaces + + + + + + + + + Test that GetCapabilities operation and GetTile operation are implemented.

-

More information: Implemented Operations

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>${#Project#defaultGetTile_Endpoint}20030000No Authorizationservice${#Project#service}QUERYrequestGetTileQUERYversion${#Project#version}QUERYlayerairealQUERYstyledefaultQUERYformatimage/pngQUERYtilematrixsetdefault028mmQUERYtilematrix0QUERYtilecol0QUERYtilerow0QUERY + + + +
+ + + Test that GetCapabilities operation and GetTile operation are implemented.

+

More information: Implemented Operations

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#defaultGetTile_Endpoint} + + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + service + ${#Project#service} + QUERY + + + request + GetTile + QUERY + + + version + ${#Project#version} + QUERY + + + layer + aireal + QUERY + + + style + default + QUERY + + + format + image/png + QUERY + + + tilematrixset + default028mm + QUERY + + + tilematrix + 0 + QUERY + + + tilecol + 0 + QUERY + + + tilerow + 0 + QUERY + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', @@ -176,9 +403,179 @@ a.exists( //Msg: The GetTileOperation check is automatic only for InspireCRS84Quad TileMatrixSet (that is an INSPIRE recommendation). It has not been found in the service capabilities document. // Check manually that the GetTile operation is implemented. Check that a GetTile request can be done and that a valid response is returned. - No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
Test that common request parameters are implemented for the View Service operations.

-

More information: Common Request Parameters

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>${#Project#defaultGetTile_Endpoint}200 -30000No AuthorizationserviceWMTSQUERYrequestGetTileQUERYversion1.0.0QUERYlayerairealQUERYstyledefaultQUERYformatimage/pngQUERYtilematrixsetdefault028mmQUERYtilematrix0QUERYtilecol0QUERYtilerow0QUERYlanguageQUERY<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationserviceQUERYrequestGetCapabilitiesQUERYversion1.0.0QUERYlanguageQUERY<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* +} + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.getTileOperationCommonParameters' ); //Msg: The GetTileOperation check is automatic only for InspireCRS84Quad TileMatrixSet (that is a INSPIRE recommendation). It has not been found in the service capabilities document. -// Check manually that "service", "request" and "language" parameters are implemented for the GetTile operation.No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
Test that the View Service metadata, Operations Metadata, Layers Metadata and Languages response parameters are contained in the Get View Service operation response.

-

More information: Get View Service Metadata

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL
Test that a Metadata element is provided for each Layer pointing to the metadata document.

-

More information: Layer Metadata Element

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>http://www.ign.es/csw-inspire/srv/spa/csw?SERVICE=CSW&VERSION=2.0.2&REQUEST=GetRecordById&outputSchema=http://www.isotc211.org/2005/gmd&ElementSetName=full&ID=spaignMDT200 -30000No Authorization + + + +
+ + + Test that a Metadata element is provided for each Layer pointing to the metadata document.

+

More information: Layer Metadata Element

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + + <xml-fragment/> + + http://www.ign.es/csw-inspire/srv/spa/csw?SERVICE=CSW&VERSION=2.0.2&REQUEST=GetRecordById&outputSchema=http://www.isotc211.org/2005/gmd&ElementSetName=full&ID=spaignMDT + + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + + + + +
Test that an Operation element is provided to map the GetCapabilities operation.

-

More information: Operation GetCapabilities

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL + + + +
+ + + Test that an Operation element is provided to map the GetCapabilities operation.

+

More information: Operation GetCapabilities

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + +
Test that a element is provided to map the GetTile operation.

-

More information: Operation GetTile

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>${#Project#defaultGetTile_Endpoint}20030000No AuthorizationserviceWMTSQUERYrequestGetTileQUERYversion1.0.0QUERYlayerEL.GridCoverageQUERYstyleElevacionesQUERYformatimage/pngQUERYtilematrixsetInspireCRS84QuadQUERYtilematrix0QUERYtilecol1QUERYtilerow0QUERY + + + +
+ + + Test that a element is provided to map the GetTile operation.

+

More information: Operation GetTile

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#defaultGetTile_Endpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + service + WMTS + QUERY + + + request + GetTile + QUERY + + + version + 1.0.0 + QUERY + + + layer + EL.GridCoverage + QUERY + + + style + Elevaciones + QUERY + + + format + image/png + QUERY + + + tilematrixset + InspireCRS84Quad + QUERY + + + tilematrix + 0 + QUERY + + + tilecol + 1 + QUERY + + + tilerow + 0 + QUERY + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.getTileOperationMandatoryFormat' -);No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
Test that each layer is uniquely identified by a harmonished name.

-

More information: Layer Metadata

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL
Test that Layer Title is mapped to Title element for each layer with the harmonished title. The harmonised title of a layer for an INSPIRE spatial data theme is defined in [Directive 2007/2/EC] and shall be subject to multilingualism.

-

More information: Layer Resource Title

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL + + + +
+ + + Test that Layer Title is mapped to Title element for each layer with the harmonished title. The harmonised title of a layer for an INSPIRE spatial data theme is defined in [Directive 2007/2/EC] and shall be subject to multilingualism.

+

More information: Layer Resource Title

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + +
Test that if an Abstract element is provided, it is not empty and it is written in the language of the Capabilities document.

-

More information: Layer Abstract

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL + + + +
+ + + Test that if an Abstract element is provided, it is not empty and it is written in the language of the Capabilities document.

+

More information: Layer Abstract

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.checkAbstractLanguage' ); -//Msg: Check manually that the language of the Abstract element content matches with the language of the Capabilities document.No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
Test that a list of keywords is provided into a Keywords element in each layer.

-

More information: Layer Keywords

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL
Test that a WGS84BoundingBox element is provided defining the minimum rectagle bounding the service data.

-

More information: Layer Geographic Bounding Box

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL + + + +
+ + + Test that a WGS84BoundingBox element is provided defining the minimum rectagle bounding the service data.

+

More information: Layer Geographic Bounding Box

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + +
Test that the data is provided using at least one geographical coordinate system based on ETRS89 in continental Europe and ITRS outside continental Europe.

-

More information: ETRS89 or ITRS coordinate reference system

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL + + + +
+ + + Test that the data is provided using at least one geographical coordinate system based on ETRS89 in continental Europe and ITRS outside continental Europe.

+

More information: ETRS89 or ITRS coordinate reference system

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.checkTileMatrixSetCRS' ); //Msg: Check that the data is provided using at least one geographical coordinate system based on ETRS89 in continental Europe and ITRS outside continental Europe. -// Check manually that the TileMatrixSet has either no SupportedCRS element or one that matches the CRS identifier of one of the ETRS89 based or ITRS based coordinate systems.No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
Test that each style has a unique identifier mapped to Identifier element and if a human-readable name is included, it is mapped to Title element.

-

More information: Layer Style Title and Identifier

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL
Test that if a legend is provided it is mapped into a LegendURL element and the language is according with the language of the capabilities document.

-

More information: Layer Style Legend URL

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>${#Project#serviceEndpoint}200 -30000No AuthorizationrequestGetCapabilitiesQUERYxs:stringversion${#Project#version}QUERYservice${#Project#service}QUERYlanguagespaQUERY<xml-fragment/>http://servicios.idee.es/wmts/mdt/leyendas/Elevaciones.png20030000No Authorization + + + +
+ + + Test that if a legend is provided it is mapped into a LegendURL element and the language is according with the language of the capabilities document.

+

More information: Layer Style Legend URL

]]> +
+ + + + + 12c49af9-925c-4121-bb67-15bc355499f5 + + + PARALLELL + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + 200 + + + + + + 30000 + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + xs:string + + + + + version + ${#Project#version} + QUERY + + + service + ${#Project#service} + QUERY + + + language + spa + QUERY + + + + + + + + + <xml-fragment/> + + http://servicios.idee.es/wmts/mdt/leyendas/Elevaciones.png + + + + 200 + + + + + 30000 + + + + No Authorization + + + + + + + + + + <xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', 'TR.manual.checkLegendLanguage' ); -//Msg: Check manually that the language of the texts included in the legend match with the requested language.No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
inspireLayerRegisterhttp://inspire.ec.europa.eu/layer/layer.en.xmldefaultGetTile_RequestdefaultGetTile_LayerdefaultGetTile_StyledefaultGetTile_FormatdefaultGetTile_TileMatrixSetdefaultGetTile_TileMatrixdefaultGetTile_TileColdefaultGetTile_TileRowdefaultGetTile_LanguagedefaultGetTile_Endpoint
SEQUENTIALTest that the WMTS GetTile operation implements all the parameters according to the Commission Regulation (EC) No 976/2009.

-

More information: GetTile Operation

]]>
12c49af9-925c-4121-bb67-15bc355499f5PARALLELL<xml-fragment/>${#Project#defaultGetTile_Endpoint}20030000No AuthorizationserviceQUERYrequestGetTileQUERYversion1.0.0QUERYlayerairealQUERYstyledefaultQUERYformatimage/pngQUERYtilematrixsetdefault028mmQUERYtilematrix0QUERYtilecol0QUERYtilerow0QUERY<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.* + + + + + + + + <xml-fragment/> + + ${#Project#serviceEndpoint} + + + + import de.interactive_instruments.etf.suim.* Assert a = new Assert(messageExchange, context, log, Assert.INSPIRE_DS_NS); a.exists( '//zzzz', @@ -1062,4 +2226,148 @@ a.exists( //Msg: The GetTile Operation parameters implementation check is automatic only for InspireCRS84Quad TileMatrixSet (that is a INSPIRE recommendation). It has not been found in the service capabilities document. // Check manually that "service", "request", "version", "layer", "style", "format", "tilematrixset", "tilematrix", "tilecol" and "tilerow" parameters are mandatory for the GetTile operation. -No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERY
serviceEndpointserviceWMTSversion1.0.0lastServiceEndpointauthUserauthPwdetf.ignore.propertiesservice, version, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwd, defaultGetTile_Request, defaultGetTile_Layer, defaultGetTile_Style, defaultGetTile_Format, defaultGetTile_TileMatrixSet, defaultGetTile_TileMatrix, defaultGetTile_TileCol, defaultGetTile_TileRow,defaultGetTile_Language, defaultGetTile_Endpointetf.tag.idsEID7c15a770-986a-4aa0-b4cd-7facbca96a1detf.translation.template.collection.idEIDb02cc4ae-60e1-47a5-8e5a-7f9769ffd113etf.supported.test.object.type.idsEIDae35f7cd-86d9-475a-aa3a-e0bfbda2bb5fetf.authorConsortium Bilbomatica, Guadaltel & Geogramaetf.creation.date2018-11-07T00:00:00etf.last.editorConsortium Bilbomatica, Guadaltel & Geogramaetf.last.update.date2020-03-11T18:00:00etf.version1.0.2etf.referencehttps://github.com/inspire-eu-validation/ets-repository/tree/master/service/vs-wms-soapui-project.xmltestIntensiveauthMethoddefaultGetTile_RequestdefaultGetTile_LayerdefaultGetTile_StyledefaultGetTile_FormatdefaultGetTile_TileMatrixSetdefaultGetTile_TileMatrixdefaultGetTile_TileColdefaultGetTile_TileRowdefaultGetTile_LanguagedefaultGetTile_Endpoint
+ + + + + No Authorization + + + + + + request + GetCapabilities + QUERY + + + service + ${#Project#service} + QUERY + + + + + + + + + + + serviceEndpoint + + + + service + WMTS + + + version + 1.0.0 + + + lastServiceEndpoint + + + + authUser + + + + authPwd + + + + etf.ignore.properties + service, version, extended_capabilities_scenario, lastServiceEndpoint, authUser, authPwd, defaultGetTile_Request, defaultGetTile_Layer, defaultGetTile_Style, defaultGetTile_Format, defaultGetTile_TileMatrixSet, defaultGetTile_TileMatrix, defaultGetTile_TileCol, defaultGetTile_TileRow,defaultGetTile_Language, defaultGetTile_Endpoint + + + etf.tag.ids + EID7c15a770-986a-4aa0-b4cd-7facbca96a1d + + + etf.translation.template.collection.id + EIDb02cc4ae-60e1-47a5-8e5a-7f9769ffd113 + + + etf.supported.test.object.type.ids + EIDae35f7cd-86d9-475a-aa3a-e0bfbda2bb5f + + + etf.author + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.creation.date + 2018-11-07T00:00:00 + + + etf.last.editor + Consortium Bilbomatica, Guadaltel & Geograma + + + etf.last.update.date + 2020-03-11T18:00:00 + + + etf.version + 1.0.2 + + + etf.reference + https://github.com/inspire-eu-validation/ets-repository/tree/master/service/vs-wms-soapui-project.xml + + + testIntensive + + + + authMethod + + + + defaultGetTile_Request + + + + defaultGetTile_Layer + + + + defaultGetTile_Style + + + + defaultGetTile_Format + + + + defaultGetTile_TileMatrixSet + + + + defaultGetTile_TileMatrix + + + + defaultGetTile_TileCol + + + + defaultGetTile_TileRow + + + + defaultGetTile_Language + + + + defaultGetTile_Endpoint + + + + + + + + diff --git a/testquery-noggeo.xq b/testquery-noggeo.xq index 2741f4630..683053694 100644 --- a/testquery-noggeo.xq +++ b/testquery-noggeo.xq @@ -1,10 +1,16 @@ +declare namespace act-core='http://inspire.ec.europa.eu/schemas/act-core/4.0'; +declare namespace af='http://inspire.ec.europa.eu/schemas/af/4.0'; declare namespace bu-base='http://inspire.ec.europa.eu/schemas/bu-base/4.0'; declare namespace bu-core2d='http://inspire.ec.europa.eu/schemas/bu-core2d/4.0'; declare namespace hh='http://inspire.ec.europa.eu/schemas/hh/4.0'; declare namespace ef='http://inspire.ec.europa.eu/schemas/ef/4.0'; +declare namespace mr-core='http://inspire.ec.europa.eu/schemas/mr-core/4.0'; declare namespace pf='http://inspire.ec.europa.eu/schemas/pf/4.0'; declare namespace nz-core ='http://inspire.ec.europa.eu/schemas/nz-core/4.0'; declare namespace elu='http://inspire.ec.europa.eu/schemas/elu/4.0'; +declare namespace er-b='http://inspire.ec.europa.eu/schemas/er-b/4.0'; +declare namespace er-c='http://inspire.ec.europa.eu/schemas/er-c/4.0'; +declare namespace er-v='http://inspire.ec.europa.eu/schemas/er-v/4.0'; declare namespace gelu='http://inspire.ec.europa.eu/schemas/gelu/4.0'; declare namespace plu='http://inspire.ec.europa.eu/schemas/plu/4.0'; declare namespace selu='http://inspire.ec.europa.eu/schemas/selu/4.0'; @@ -49,9 +55,17 @@ declare namespace lcr='http://inspire.ec.europa.eu/schemas/lcr/4.0'; declare namespace lcv='http://inspire.ec.europa.eu/schemas/lcv/4.0'; declare namespace hb='http://inspire.ec.europa.eu/schemas/hb/4.0'; declare namespace mu='http://inspire.ec.europa.eu/schemas/mu/3.0'; +declare namespace om='http://www.opengis.net/om/2.0'; +declare namespace oi='http://inspire.ec.europa.eu/schemas/oi/4.0'; +declare namespace omor='http://inspire.ec.europa.eu/schemas/omor/3.0'; +declare namespace omso='http://inspire.ec.europa.eu/schemas/omso/3.0'; declare namespace pd='http://inspire.ec.europa.eu/schemas/pd/4.0'; -declare namespace ps='http://inspire.ec.europa.eu/schemas/ps/4.0'; +declare namespace ps='http://inspire.ec.europa.eu/schemas/ps/4.0'; +declare namespace so='http://inspire.ec.europa.eu/schemas/so/4.0'; declare namespace sr='http://inspire.ec.europa.eu/schemas/sr/4.0'; +declare namespace su-core='http://inspire.ec.europa.eu/schemas/su-core/4.0'; +declare namespace su-grid='http://inspire.ec.europa.eu/schemas/su-grid/4.0'; +declare namespace su-vector='http://inspire.ec.europa.eu/schemas/su-vector/4.0'; declare namespace tn='http://inspire.ec.europa.eu/schemas/tn/4.0'; declare namespace tn-a='http://inspire.ec.europa.eu/schemas/tn-a/4.0'; declare namespace tn-c='http://inspire.ec.europa.eu/schemas/tn-c/4.0'; diff --git a/testquery.xq b/testquery.xq index b33fee01f..d91f0070f 100644 --- a/testquery.xq +++ b/testquery.xq @@ -1,10 +1,16 @@ +declare namespace act-core='http://inspire.ec.europa.eu/schemas/act-core/4.0'; +declare namespace af='http://inspire.ec.europa.eu/schemas/af/4.0'; declare namespace bu-base='http://inspire.ec.europa.eu/schemas/bu-base/4.0'; declare namespace bu-core2d='http://inspire.ec.europa.eu/schemas/bu-core2d/4.0'; declare namespace hh='http://inspire.ec.europa.eu/schemas/hh/4.0'; declare namespace ef='http://inspire.ec.europa.eu/schemas/ef/4.0'; +declare namespace mr-core='http://inspire.ec.europa.eu/schemas/mr-core/4.0'; declare namespace pf='http://inspire.ec.europa.eu/schemas/pf/4.0'; declare namespace nz-core ='http://inspire.ec.europa.eu/schemas/nz-core/4.0'; declare namespace elu='http://inspire.ec.europa.eu/schemas/elu/4.0'; +declare namespace er-b='http://inspire.ec.europa.eu/schemas/er-b/4.0'; +declare namespace er-c='http://inspire.ec.europa.eu/schemas/er-c/4.0'; +declare namespace er-v='http://inspire.ec.europa.eu/schemas/er-v/4.0'; declare namespace gmlcov='http://www.opengis.net/gmlcov/1.0'; declare namespace gelu='http://inspire.ec.europa.eu/schemas/gelu/4.0'; declare namespace plu='http://inspire.ec.europa.eu/schemas/plu/4.0'; @@ -49,9 +55,17 @@ declare namespace lcr='http://inspire.ec.europa.eu/schemas/lcr/4.0'; declare namespace lcv='http://inspire.ec.europa.eu/schemas/lcv/4.0'; declare namespace hb='http://inspire.ec.europa.eu/schemas/hb/4.0'; declare namespace mu='http://inspire.ec.europa.eu/schemas/mu/3.0'; +declare namespace om='http://www.opengis.net/om/2.0'; +declare namespace oi='http://inspire.ec.europa.eu/schemas/oi/4.0'; +declare namespace omor='http://inspire.ec.europa.eu/schemas/omor/3.0'; +declare namespace omso='http://inspire.ec.europa.eu/schemas/omso/3.0'; declare namespace pd='http://inspire.ec.europa.eu/schemas/pd/4.0'; -declare namespace ps='http://inspire.ec.europa.eu/schemas/ps/4.0'; +declare namespace ps='http://inspire.ec.europa.eu/schemas/ps/4.0'; +declare namespace so='http://inspire.ec.europa.eu/schemas/so/4.0'; declare namespace sr='http://inspire.ec.europa.eu/schemas/sr/4.0'; +declare namespace su-core='http://inspire.ec.europa.eu/schemas/su-core/4.0'; +declare namespace su-grid='http://inspire.ec.europa.eu/schemas/su-grid/4.0'; +declare namespace su-vector='http://inspire.ec.europa.eu/schemas/su-vector/4.0'; declare namespace tn='http://inspire.ec.europa.eu/schemas/tn/4.0'; declare namespace tn-a='http://inspire.ec.europa.eu/schemas/tn-a/4.0'; declare namespace tn-c='http://inspire.ec.europa.eu/schemas/tn-c/4.0'; diff --git a/v4_uuids.txt b/v4_uuids.txt index 0f84014fd..287865976 100644 --- a/v4_uuids.txt +++ b/v4_uuids.txt @@ -12,20 +12,28 @@ EID242272e0-3f0a-4e9c-9643-657c4d6d304a Statistical report table type for metada EID6242ed25-8553-4836-9814-ce8dcc188501 Auxiliary Conformance Classes for Buildings 3D EIDfe1f3796-0ebf-4960-a6f7-f935e087fa4b Tag 'Data Theme: Administrative Units' EIDb9a5d0b9-db01-4799-ae2a-c321bfa018d9 Tag 'Data Theme: Addresses' +EID4a922b02-a384-45b8-91ff-e28e99009eff Tag 'Data Theme: Agricultural and Aquaculture Facilities' +EID0bff7ac8-cd7b-46dc-a2d5-7218ddcab8e1 Tag 'Data Theme: Atmospheric Conditions and Meteorological Geographical Features' EIDb7bc5972-ca3a-4275-a9ba-c913d2b724a3 Tag 'Data Theme: Bio-geographical Regions' EIDae91aeb9-5fd2-43b6-a678-11c17f5ad63c Tag 'Data Theme: Buildings' EID94000e12-3021-4ba6-827e-a59eefd7a3c8 Tag 'Data Theme: Cadastral Parcels' EID2dc93016-36ba-4b93-88fd-7e47a9312c80 Tag 'Data Theme: Elevations' +EIDe1eb0f28-1b87-4223-b695-8a2d24565ce6 Tag 'Data Theme: Energy Resources' EIDbe54594f-cae7-4b22-aca7-54c74fdab1a7 Tag 'Data Theme: Environmental Monitoring Facilities' EID589db923-b4c4-4979-b618-a84ea3228df4 Tag 'Data Theme: Geographical Names' EID08e3f9ed-f58a-4a46-a207-96d06f1c2d38 Tag 'Data Theme: Geology' EID461f5a03-05f6-45d8-bc10-fbaf6483b9ff Tag 'Data Theme: Habitats and Biotopes' EID83fc91d3-bdf1-486e-ba8f-cd2c43e14413 Tag 'Data Theme: Hydrography' EID320f0a12-0155-4a95-b331-cbfc501482d5 Tag 'Data Theme: Land Cover' +EID32a64c52-6061-4dd4-9356-9e4873857470 Tag 'Data Theme: Oceanographic geographical features' +EIDcf365ad1-38b9-4c3e-86ac-d75b1eccf97f Tag 'Data Theme: Mineral Resources' +EID998f1d2b-49da-4a8a-88c7-210080010f8c Tag 'Data Theme: Orthoimagery' EID39e30ae4-08ed-4862-a36a-13c3b054abbe Tag 'Data Theme: Population Distribution' EID3b94dcaf-7eb8-466f-82ed-7dcd3e362b94 Tag 'Data Theme: Production and Industrial Facilities' EIDb1b53238-efe4-4975-8e2d-a194c20a2e74 Tag 'Data Theme: Protected Sites' EID2654e659-82d6-4584-a94b-f9cd75a817b7 Tag 'Data Theme: Sea Regions' +EID57914240-3457-4c8f-96a0-347440b3d739 Tag 'Data Theme: Soil' +EIDaba29c5b-b0e6-4e2c-908d-ea6c7df08824 Tag 'Data Theme: Statistical Units' EID169dad4a-2b71-4077-9e85-e686b7373b05 Tag 'Data Theme: Transport Networks' EIDef38c5e8-a1a3-41fe-8815-ced1f74ac23e Tag 'Data Theme: Utility and Government Services' @@ -299,6 +307,39 @@ EID867c91d4-757e-4b7d-ad03-78402da6a677 Case EID2d960548-bdb5-44c2-9654-bd1eb37ba7f3 Step EID2bcd11dd-c3e2-4529-adff-271e9171f6f0 Assertion +EID8736653c-eee8-4546-a802-ec62f1792262 ETS ac-mf-dc +EID86f4d051-7982-4f3c-9016-24dd10bc7015 Module +EIDd545839b-9df7-4397-bffa-43f417fa7778 Case +EID8dacdec0-c206-43e6-9ae8-8dd337964c9d Step +EID4a78dad7-3c99-445d-82a2-51d06406747f Assertion + +EID7bc56fcd-d29d-4a71-b6d1-c283e6b63b2c ETS ac-mf-gml +EIDa2f9b0b2-b94f-437c-8b1a-1c117c986f61 Module +EID004f0f1e-81bc-4801-9a86-06caef94a7c7 Case +EID180794b1-bd1e-44ff-91f5-40b4716a8e80 Step +EID8d26c7a3-3ffe-408c-9b67-057c4c92ab69 Assertion + +EIDe714b79c-6219-4177-acb3-e01ac8f4549d ETS ac-mf-rs +EIDd2f06af3-11a8-4412-9e20-aab450408e06 Module +EID9f12686e-24e9-40a5-a345-4692b46e7177 Case +EID45b9f438-68ae-4dc6-82e6-2cb5ca33a43b Step +EIDa8a1b87b-15a3-4507-8ddb-6cf04c245c3a Assertion + +EIDac70176c-224c-47ea-864a-b53344a2dec8 ETS ac-mf-ia +EID84b24674-d047-49a0-8f3e-9d1cddcb1e02 Module +EID1f9b60c9-db17-4b42-bf13-06c84ef6827f Case code-list +EID9adc77c5-f977-4963-a39b-28e204f09053 Step +EIDbf6abd7c-e39f-4000-80a5-9c958d0f04b2 Assertion 1 +EID24e3e19a-dcf1-43d1-a889-9617177bdc26 Assertion 2 + +EID850a0120-7637-4aef-84aa-5673832e518a ETS ac-mf-as +EIDaeae2544-663a-4525-8806-0e1f113fa2ab Module +EID210be6ab-c026-428b-b265-8a1bc180b121 Case specific req +EID9e50e500-487a-4d1a-9ad9-56c24e2ed593 Step +EID37c61844-5244-4ead-8dc3-1135308fd1ef Assertion 1 +EID1232f3ea-af52-4044-aafb-e42e6ad06857 Assertion 2 +EIDaa6f9ea5-3ed1-4a1e-9d8c-599bb4cacbdf Assertion 3 + EIDe6800faf-2e56-47df-831a-75a96b35f33d ETS ad-gml EID81be9bf4-e5f6-4c49-bf43-55904f89775f Module EID3b4e3f12-c11c-4f67-b37a-dc47b817046c Case basic @@ -488,6 +529,60 @@ EID9e7c0300-2ad8-4a75-a610-d79fe9e358f4 Case specific requirement EID99711317-350d-49fc-9715-190d2589a056 Step EID10df4e4d-6196-4b05-83e0-6edbba9a1a42 Assertion +EIDe009440c-e545-4227-9967-aff1b26f8c81 ETS er-gml +EID39f817f2-4199-447d-b153-8c9bbb2e253f Module +EIDb002df69-652a-460c-94ba-55ff79975cff Case basic +EIDc3624339-6e7e-4a83-91bb-e1ae5423ee7a Step +EID1a0afa1c-5c77-427b-82de-141df86195c5 Assertion + +EIDb87f5e2e-72d8-40e5-a0fd-34e3829f9426 ETS er-rs +EID91f0a36b-e823-44be-9f02-d08de780672e Module +EIDd4f0d9c7-9886-4bb5-8fd5-b7873db7242c Case +EID41a59183-bcf1-4a20-9ea9-95bda3b58afd Step +EID0aa2cb1e-f430-4cd5-8f49-c9ca81b674d2 Assertion + +EIDfad66155-f16c-4e9a-8c6c-a010f3c6de11 ETS er-dc +EID9381687d-a186-41b1-ae1e-e1e49f40f0a7 Module +EID6fa14cfe-199a-494d-a3a2-c00348f6ee65 Case +EIDfd2e6868-064a-4c89-83e8-7c3fee30373e Step +EIDc525ff06-b1cb-4a1c-9c34-cb2f304c0079 Assertion + +EID018c7222-6d56-4b4b-8df3-ac511914fe85 ETS er-ia +EID5dbdd059-91c4-4c9e-8445-96869943ce22 Module +EID86701538-4d8a-4fc9-8d6e-a15a7a006fe7 Case codelist +EIDaa12c8f5-9479-4616-8eef-ff5284b52944 Step +EID5824b3be-d750-4b46-ba05-d81e31be7f77 Assertion 1 +EIDa27b92a0-d8b4-490b-95a2-0453cacfce57 Assertion 2 +EIDab7566cb-9976-4561-9826-2469843fb5db Assertion 3 +EID2a17fcce-affd-415a-8200-2cfb71f87480 Assertion 4 + +EID9b6e3765-3744-40ee-98ec-243ac978915f ETS er-as +EID2935f00d-2ff0-443b-8622-90622119fb98 Module +EID898c524f-e062-4669-bf38-89e5c7414e50 Case codelist +EID6e19663d-57f0-4a32-8982-d9c3abfc0024 Step +EID83ad4ac1-de87-4d44-8b73-35bce4401ed9 Assertion 1 +EID1dbdd865-c0e7-48be-9801-b0a4d31442b7 Assertion 2 +EID339de31a-7bc5-4e69-88b8-d9142ca06bb7 Case constraints +EID632ee4b0-60f4-4649-83c9-ee51fcf567d9 Step +EIDace437b7-d387-43b2-b031-2438e4d86fb4 Assertion 1 +EID411a27e6-6f5a-4265-8dba-cd2fa0174447 Assertion 2 +EIDf9143848-65e2-41dc-bfbd-a375611ec2e0 Assertion 3 +EID9226146b-2a80-4f06-999b-cc3d41b75d53 Case specific req +EIDc812b2f3-c048-4076-bef6-f8f79db0b428 Step +EID7967a57c-0fda-41da-88b0-f71888549d03 Assertion + +EID599aa296-6000-452f-9b97-18d0565f6b36 ETS er-c-as +EID02a43498-e31a-45c2-8b4f-8b0be25b0a58 Module +EIDbfe11cb3-9e79-485b-a739-84d63e5cdd34 Case codelist +EID9dbf7687-720a-4bb3-8790-03db8545561a Step +EID2234bb5d-680f-4967-88d9-f515fad29500 Assertion + +EID0901c212-8b06-4c29-b648-c411678b9369 ETS er-v-as +EIDa52853f1-2b98-4640-aeef-5cb4b92580d5 Module +EIDc4f7d775-91d7-486e-8140-8f12bbd41701 Case +EID019c0d3d-68b7-4323-8811-013a6c87ac4b Step +EIDee2ff8e4-9367-47fb-ac19-b2e58344958b Assertion + EID5aab5d8a-e432-47dd-b072-7cbf520035be ETS nz-as EID1e2dd0b2-dbcd-404c-9f64-dfcd504f1303 Module @@ -539,6 +634,45 @@ EID942b30b2-273d-43a3-9ea3-37f3260abb38 Case EIDde4e2bf8-f227-4275-a106-69984588c1bd Step EID695f0325-5684-446f-8d11-62e0683e5ac5 Assertion +EID1ca3be4d-1953-45c7-960c-4e87dd1bc487 ETS af-dc +EID1489f0dc-01c8-49f9-a852-704a9fb0056f Module +EID274cde25-6ecc-4af3-ac50-0242faf08a91 Case +EIDcf0f8773-23b2-4c6a-89ee-6082274c7fee Step +EID6a7d608d-477d-45ef-bba7-da61365f772e Assertion + +EID2e792ebf-e98e-42d3-850d-80bbb0b568b9 ETS af-gml +EIDf84aea6e-996b-4a3b-b057-4ded7e5bb565 Module +EID472bcaa4-daca-4e4c-b1b6-3e795682ef14 Case +EID0721fecb-a48e-42b5-b89c-8f02bd9c36a2 Step +EIDaf194554-8e3a-44b0-93fc-faef659cf99c Assertion + +EID2d2491df-b01e-4527-a089-82d6ffa88a80 ETS af-rs +EID3f82cb4c-9b9b-42b8-91a1-ae989dfd112d Module +EID1f8d8a65-61f4-427d-a741-80af1428fb32 Case +EIDd84cbd12-e2a3-436a-a697-eed7c59cf2b2 Step +EID081d5e01-c0a3-4514-b53b-e894e53b14cc Assertion + +EID36dec890-a302-442e-ae35-1edcfa5ca4dd ETS af-ia +EID7a668cad-72fb-486a-aee2-136cb2ade243 Module +EID59992272-4dba-44a3-868c-5d1bc2a39b07 Case +EID295d688e-2919-4345-9800-3b334d2c8571 Step +EIDff9d5675-79b4-49e0-b20e-2ada3315967a Assertion + +EIDd718e45d-8cdb-4876-957a-51a35ba9fafa ETS af-as +EID7d3ae123-27d5-4e97-99a5-36cc63f345d8 Module +EID660f1e95-a224-49c2-b6f3-2a607049af06 Case activity complex +EIDa837a7a8-711b-47a7-ba40-b5de2ca6e724 Step +EIDe629831a-8ca0-40c7-85a5-7ca0086bf9df Assertion +EIDdd230141-12b0-4b3c-aab3-0758f4e22627 Assertion +EIDcc2ea174-ee13-4c6a-9879-31ac23b907fd Case code-list +EID7e1755a2-0d25-4592-9566-1e8a16be4d6c Step +EID454d9e4e-c179-4655-86af-22b2963e6c5f Assertion +EID28ef49d8-5d93-4f7b-ae1c-8fb8a0884a4c Assertion +EIDec4f4bff-7dc0-4bcc-a204-693c34ca29e0 Assertion +EIDc2a9af91-54ea-43ae-bce6-5b93f0648874 Case constraints +EID67530cea-6e12-4ca0-bbbc-143c38903f9e Step +EID1acd410c-18d7-422a-916e-c54aff44742b Assertion + EID1f9bc92a-5879-4e9b-bcbe-1d2d0cab0aab ETS cp-as EID052df133-b598-4f1c-957f-8354751fc3c3 Module EID67cce5c3-336e-4a5b-b6be-4cc4a6daba61 Case mor @@ -723,6 +857,59 @@ EID4f1a045a-3f2f-4754-a75b-d364bd6d5857 Case EID7cf4e5a3-a9d9-46a5-be52-d004334dc6b0 Step EIDe6a9aa1d-adc2-44a3-89cb-dca2aab09276 Assertion + + + +EIDdd6d5c5f-6d38-45a1-b85d-b9f2606bff2d ETS oi-dc +EID13b36e8b-34cf-4d97-828e-0e67199b3597 Module +EID483ccbc8-b9ad-4148-9f78-64edf814fc33 Case +EID7e0eca03-601b-487a-b105-cbf5df803067 Step +EIDc37e190a-64c7-496e-b14c-b81ba4673098 Assertion + +EID2151146d-da46-4242-9471-0918db59abb5 ETS oi-gml +EID686d34dd-2be8-4844-a197-35eddc222f33 Module +EID741f21de-c085-465d-b85d-965fe74e4973 Case +EID8b27fd4e-aa5f-4bde-96b1-0543100dde97 Step +EID808fd756-61a7-44f2-9976-c4b6c2f56fe9 Assertion + +EID1b65c0d1-6374-4638-a489-86ba4d5c39d6 ETS oi-rs +EIDfbfca6c7-46af-4f10-8c97-cdfc55f980be Module +EIDb8b7f803-0e29-4bf9-9454-34c44cbc45f3 Case +EID1e9065b1-9111-4f69-aa9b-d794d98183d8 Step +EID06669fcb-6f6f-4bb2-a440-8c7f441e3ac7 Assertion +EID2131143f-1cd3-4f9c-bf2e-65eab52944a0 Assertion + +EID3476ab51-fd62-4b19-a563-f3c05373c2ed ETS oi-ia +EID688eb6f6-e3d0-47f3-8b23-5bd12cc09c73 Module +EID6e72abbc-b1f3-4018-9457-77b6180431f3 Case features +EID0ad3d97b-9fc8-4a18-9720-e41e296a3343 Step +EIDf18da8dc-6262-449a-8906-4c4b67d0576d Assertion +EID750cb51b-f685-4190-a2fd-a2c3cfcf5056 Assertion + +EID46af85e3-f8cc-4812-b8b7-36d99897084c ETS oi-as +EIDaccf0328-4b59-4612-a5be-072fd546f4f2 Module +EIDf5dff14f-c572-44dc-a787-cdc33ae6f456 Case code-list +EID2df54360-6fd2-4696-ba52-2a8c05c9ce73 Step +EID118ccd41-c0cb-42a0-99f4-5ec151775f40 Assertion +EID806cc3e9-9cf3-4974-96ea-5a9af91c217a Case constraints +EID741b2315-86ba-4a5e-b5a4-9ed122ef0e27 Step +EID4dace3f9-d6bb-4a55-9865-46e616742c84 Assertion +EID5bd69b8c-b8fe-4d33-92e6-51e3ec9212d0 Assertion +EID12eeef04-fee4-4bc5-a10b-5665aa5344a4 Assertion +EID94e6e2c2-1b98-4c1f-9cb8-e7bef8960ad6 Assertion +EID45c6ca4c-83f5-4aab-ab77-972d703c2d5f Assertion +EIDc46b251b-633a-43e7-bac4-6cac6ce0c7a5 Assertion +EIDf0c967ca-f53b-42aa-8ded-cb2317a85f2e Assertion +EID8e25d666-a568-45d0-afdb-06f7df8cc768 Case external objects identifier +EID5a3bd82a-72af-42cf-b1fa-a70f4379c194 Step +EIDc5b0ed8e-0050-4456-afb0-2a512061dd09 Assertion +EID57f4191f-d7b5-4cad-b930-6e0f8348e7ee Case specific requirement +EID8c7b3e2c-538b-4d51-912a-a6f9e15460ff Step +EIDd9b67838-3c4f-4994-9240-59df98e219b7 Assertion +EIDe5a0b0a1-0886-4fdb-8f44-624c339a02e8 Assertion + + + EID4a6ad3fe-8ae8-467e-a6e4-aef6bdff8a66 ETS sd-as EIDe72234c6-15f2-4be6-8f38-92fad508d02e Module EID06c8a121-112a-4b0e-867b-c5f362588fdc Case @@ -1047,6 +1234,97 @@ EIDd4859e5d-1794-44f6-a2b3-88c466940078 Case constraints EIDf7932163-8752-42cf-9c50-7981fce16169 Step EIDcd5eb847-70f0-4842-a442-a2c0270311d3 Assertion +EID62825579-45ef-4ec3-8669-4f95a3ac60da ETS of-gml +EIDeb9409be-46bf-4f80-baa6-519875de7abf Module +EID3d40dc91-3b28-4a99-b026-8a314c9ea1db Case basic +EIDb184b5b6-3b0e-4cf7-a9ff-2e9e1035e4c2 Step +EIDaa49dddc-3d79-4435-aee2-887f0daf0f42 Assertion + +EID6827884c-c30d-464d-9ee7-3b9874b83c7f ETS of-rs +EID1ace0256-2ecb-4cae-a602-f641edbe9144 Module +EID2a1c8e00-4025-4a29-a19a-24691fd8839b Case +EID87d6affe-10ac-4b55-baf5-7a3357cb2a7c Step +EIDf1cde9ee-592f-4518-a07a-41c837589f35 Assertion + +EIDaaec0d06-e36d-41db-bc3c-b425466435e5 ETS of-dc +EIDcbfb8416-bc2e-48e4-86fd-e98e545bbb20 Module +EIDe595ef38-10c2-4614-91f3-1d5f2d428f85 Case +EIDd9d2a132-ee84-46f1-bfa0-99c26a621425 Step +EID9e07d975-f539-4ade-b7c3-35d5a042926e Assertion + +EID7f3dd0a4-a0af-4fd6-a507-fee53db7742d ETS of-ia +EIDc84eb1df-2dea-42c8-8c34-b6c67bbd6b38 Module +EIDe374bc49-f6e7-4f3c-9205-1db8a0a73560 Case +EIDbcaa7386-0e1b-48fd-bd88-fea4e16da90e Step +EID779c2ee5-a6ec-4a48-b75e-aa2d2379f766 Assertion + +EIDc030d752-2559-4ef2-9267-2d7d844720aa ETS of-as +EID420480f9-b192-4db2-983e-3d3a7a0f1279 Module +EID38d4a792-6fa8-4646-a122-571716bcdf0f Case specific req +EID3a5ef0eb-8e05-41f4-bfbc-61b0fb65325f Step +EID5b6aa998-88ad-4b2f-bdbe-abebfb61c854 Assertion 1 +EIDa0a79de1-b278-4e15-8df3-19a5c6f4aa78 Assertion 2 +EID75d22d93-d893-423e-8113-2339e62bd0bd Assertion 3 + +EID1b45ee05-c7f1-471c-89a4-5e603ce3f056 ETS mr-gml +EIDa211babb-284b-4531-9fe1-b9481a1adb31 Module +EID4a877270-2206-4e8f-ae9e-5425e691e483 Case basic +EID25623850-1afc-440b-86c3-71310f91257b Step +EID1f1fc575-14bd-4a8e-891c-891ef7f2453d Assertion + +EIDcd930d18-2ad2-48d8-ac82-75f8af6733b6 ETS mr-rs +EIDd4f9d9db-80f5-4d31-8f36-f1ecdc23cc06 Module +EID3f476bd3-2706-40df-94ca-db8f2fe51f6c Case +EID51371794-a1db-473e-937b-bfdc4871d3dd Step +EID6cd908fa-5be0-45ad-b37b-f5e87cd2733c Assertion + +EIDd2d1c565-7bdb-4da5-b13b-5b1f14e6aed1 ETS mr-dc +EIDd82ca250-27ef-4a61-aca7-c9b3e153e12c Module +EIDf9942618-a002-4189-a563-a83a7febb68e Case +EID51862538-e935-44a7-9166-45f6e284a040 Step +EID81101732-ea39-40d6-9d33-0c9531258be8 Assertion + +EID0ac8bdce-710a-4287-92ca-6444cbbb2263 ETS mr-ia +EID82f55df6-6730-4e18-a1b6-ad100aa08f2c Module +EID489fcb53-15b6-4703-93b1-94ddce73c386 Case code-list +EID89b4bcc2-3215-4052-b3e8-1b438e00dee7 Step +EID7a2e8a9a-2575-4b14-b27a-4382160d045c Assertion 1 +EID4397804e-a998-48e7-a158-ba1587012b10 Assertion 2 +EID56305900-2b3b-4ef4-b2c4-ff353daac4a2 Assertion 3 +EIDad9e5bf2-14cc-4f6e-8b86-002a13f04610 Case features +EID86c1cc97-45e9-4994-a645-b625573e358a Step +EID27c95b42-e90c-4abc-acda-044571edc8e0 Assertion 1 +EID61c74cda-e40d-4dfe-9146-3efe71f072bb Assertion 2 +EIDcfdb4e05-0b94-4007-8e0e-a8d968b332ba Assertion 3 +EID8163fa76-ac34-4c1f-8555-9a182a2a50f4 Assertion 4 +EID2835e5f5-0d7d-4602-ae9d-b1b3a82046c8 Assertion 5 +EID4cd7d324-d4a9-45ff-b1bb-a525709792fe Assertion 6 +EID3ffe53b1-a885-40f2-8c1d-66b80a6c72d5 Assertion 7 +EIDd5742595-70a7-4ae3-a778-e18d476373e3 Assertion 8 +EID54151ba6-9b03-4abb-9736-b647edff9264 Assertion 9 +EIDf447b997-3a16-4884-9850-56ab5f509fe6 Assertion 10 +EIDfaa3ae8e-d42e-40eb-83a1-026adb938e5d Assertion 11 + +EIDda904b41-b762-4aca-8af4-204f427ba3e8 ETS mr-as +EID9a262a9b-d213-4acc-b467-470b49d4553b Module +EIDdb310ddf-ada9-4083-9fd0-246bc0756d73 Case code-list +EIDb39bb34b-ea16-4227-9af8-41209dfec66c Step +EID05100efe-19d1-47b4-8953-df6087619516 Assertion 1 +EIDd22cfed8-ed04-4ca0-8aa6-5f204ff9055e Assertion 2 +EIDc20049d4-ec9e-499e-aea4-e5a7faf81939 Assertion 3 +EIDdea31829-25ee-470f-9044-f1a366b94720 Assertion 4 +EID974b9814-d4c8-40a5-a96a-23b8acc58fba Assertion 5 +EID56917e3e-7b23-4e86-ad42-888610e6ed0a Assertion 6 +EID6bd5401a-1d5f-465f-babe-1b56d4f326dc Assertion 7 +EID2f01edd5-674c-4f66-8961-5019b12c4f3d Assertion 8 +EID114ab2da-9fb1-4d08-a260-972808a97616 Assertion 9 +EIDb7f49c64-3a63-4a71-8ca4-e63d4bc61790 Assertion 10 +EIDfdea62cf-fccc-4c44-87a6-8034388e32c1 Assertion 11 +EID01b77339-1317-4fca-86c9-924c7a3ee484 Case specific requirement +EIDaef4e005-d48d-449f-9069-90687d5feb2d Step +EIDe1e8e05a-55fc-4331-b3b4-0c32f1b6241c Assertion + + EIDc4ed72f4-c06a-4deb-a9ee-5d3bfa8a0423 ETS pf-dc EIDfc1910a9-8e33-4a0a-8e7c-b913d2fc8327 Module EID7ac3f5aa-9a1c-4221-99d1-6af5647199c5 Case @@ -1157,8 +1435,85 @@ EID12b938fb-9beb-48f3-8f9a-04a7a032e68f Case EIDa22e82a6-f271-4cb5-83cb-58598ec0a18a Step EID46ba1bb8-7598-4775-8622-4d488eb20377 Assertion - - +EID31880338-6fe3-486c-8f3e-7086a20490c4 ETS so-gml +EIDa99b0a58-4ef7-4074-b546-bba50dd4fd55 Module +EIDf15e6095-bfc5-4dcd-87dd-d7134f981414 Case basic +EID92f935b9-57d9-4616-ac3f-06b94604d5d3 Step +EID0f5b2265-baa2-4780-9b0c-ef62f579c81e Assertion + +EID6f90ab57-9b10-4f67-859a-fd62d75f32c2 ETS so-rs +EIDdf49cbbf-ca5d-43aa-b171-3aa692dfc47d Module +EID3edc4412-643d-425a-b7eb-eb4abbbaeac5 Case +EID3ec75e1b-db43-494e-90be-7dbf0e03ac07 Step +EID36c08800-f207-4e81-a7d3-c57537f35272 Assertion + +EID480f945a-d0c8-4582-a1fe-775cea3d1f48 ETS so-dc +EID5717ba48-fb52-4aab-89d6-432e1875d1ea Module +EIDbcc7c44e-8a44-46f0-b577-10da992b4f62 Case +EIDc9fd8df8-0235-4d57-be60-1445b19a7a7e Step +EID9676ee28-0380-4435-bd15-bc4e62afb37f Assertion + +EID28051c99-ff98-480c-b8c1-b502333cc3cd ETS so-ia +EID4a718a43-3738-4a57-aa9e-a1dbbda89bd9 Module +EID90bfaac5-d8c9-4f50-b609-09ad11af0c27 Case code-list +EID80717d9e-882c-4ffa-8047-83e9c0d11523 Step +EIDe6bb652a-5eb3-4c80-ad51-2bccb514d7d8 Assertion 1 +EIDe96c38e2-f605-461b-a081-8bc899b638c2 Assertion 2 +EID6cb80752-1f3a-4955-a50b-eaf514ef01a9 Case features +EID4363223e-2f3a-4632-bbf1-f4dee7245b49 Step +EID75c73399-09f8-4d53-ae32-058cdefd4960 Assertion 1 +EID8acb2ed5-76d0-4722-bcab-dde4e20ea587 Assertion 2 +EIDd8ecbb07-94d1-43f1-92f0-d8ae08b02edf Assertion 3 +EID1c41bb29-4e2f-4b74-99d7-0a8562b099d2 Assertion 4 +EID5268e34e-4505-473d-891b-337f38f8eb85 Assertion 5 +EID2ce8dd67-35a4-484f-ab73-743723d724fa Assertion 6 +EID2351bde4-a6dc-4e89-acf8-d74cd5cd63cf Assertion 7 +EID288dcb02-f27f-4e67-8ac7-ebcdbc2c741e Assertion 8 +EID0ce2c904-39b5-45f0-bda2-4b21f50f668c Assertion 9 +EID8c0590d0-cd28-4dcf-8ee4-12a6ffad2770 Assertion 10 +EIDbc106a36-f58b-43e7-87d9-9d2cf36edd55 Assertion 11 +EID8b94e7dc-7783-4dd5-a6f7-30551ddb44b5 Assertion 12 +EID46f74093-8c7b-4810-aaf0-0f1d836a6664 Assertion 13 +EID5e7d43e9-c2e8-44a8-b6db-6e105473150f Assertion 14 +EID09314227-ebf1-44af-8def-1bf4fe52b06c Assertion 15 +EID261a0f07-a1a4-439f-bbf3-238b75c1a014 Assertion 16 +EID23f854a1-78c7-4f5b-a310-766b58696bcf Assertion 17 + +EID09b2bdfc-54fd-4884-b9bd-59f18dff358b ETS so-as +EID88a83353-3140-4c29-8844-6a9c7dbc549d Module +EID347a1861-dd87-4e29-97f7-240d47fe34f1 Case code-list +EID38cabd7f-b5d9-4d2f-8665-7319ab84bb2c Step +EID340cb9fb-701d-4785-8e22-5d87cc2fbaf1 Assertion 1 +EIDa913d5bd-ee11-42cd-af81-180b68da619d Assertion 2 +EIDa9e46ae2-f8c3-434c-a61b-a33800c0d60b Assertion 3 +EID6c515c34-90be-47a8-ab97-84b7831aecea Assertion 4 +EIDd50789bc-4b3b-4f45-b190-af02c1e60b2d Assertion 5 +EID14733f29-4c30-4962-9988-75864e9930eb Assertion 6 +EIDb7902d99-008b-49c4-9be7-e62d7383f1a5 Assertion 7 +EID65359871-f5d5-4d58-86e6-cbc81ffd6497 Assertion 8 +EID0c181a40-0895-4382-b180-0bc63d2a1e75 Assertion 9 +EIDfa9947e0-c02f-4447-9d5a-cf1bb5f11564 Assertion 10 +EIDb41cdb39-f5b0-4f30-8265-cc1f900ab8ba Assertion 11 +EID498e468c-e308-4eb8-9da0-4be937311d64 Assertion 12 +EID70c6d902-9e4c-4171-a04a-f685a207ab0d Assertion 13 +EID4692039c-67fa-4548-91b3-5d044a700973 Assertion 14 +EID9300bc1f-a06d-4e02-8f68-f0701e947225 Assertion 15 +EIDe6fb3efd-0d8a-4045-8408-8c38ecee4f7b Case constraints +EIDdb852351-046e-4132-9bc9-9afe13087942 Step +EIDda005b9f-699b-4155-93f5-00d5a1093193 Assertion 1 +EID0e2ace3e-b419-4403-8b4c-e7a72e0afd2c Assertion 2 +EIDf230b1a8-f841-4f7c-be9d-b010e8776887 Assertion 3 +EID529acc8b-d10b-4914-91b7-b1f7d2d3654e Assertion 4 +EID0076c8d1-e4e7-4e7a-9b21-22831bcfeb30 Assertion 5 +EIDa1031e89-44dd-45b4-98f4-b9366f28998a Assertion 6 +EID89f5280f-5a60-42e1-8220-a2a0b1885b6e Assertion 7 +EIDb4106228-c1a1-45cc-9923-324c5a5d075e Assertion 8 +EIDd3b574ba-2cb3-4253-8cfb-6ca4b27f6da6 Case specific req +EID45083a17-4b3c-45f8-89be-2d5262058f29 Step +EID2fc1727c-02cb-4fb8-a626-030a94f1501f Assertion 1 +EIDa3e7fc8f-7cdb-4156-92ed-9101a6e37b4c Assertion 2 +EID5aec21b8-8126-4784-9e9f-abd06c0aa200 Assertion 3 +EIDc5603fa7-c6b8-4350-b14f-2c7bc049d9b1 Assertion 4 EID80294b80-ac86-479d-a2cd-af07878c508a ETS sr-dc EID0edc3efd-1a0b-4ab2-9fc1-c04e8f99eefb Module @@ -1194,8 +1549,87 @@ EID63ca888e-7208-4b9f-93ed-26ec9cf10503 Assertion 1 EID9e6c1cb5-e07c-4968-b90a-6508bc372508 Assertion 2 EID85e5158d-11b6-4f88-9834-a86504259a2e Assertion 3 - - +EID7d36c5e8-5bbe-4af6-9c37-3038f6282ae1 ETS su-gml +EID528962d2-f9e1-4758-8e04-b7f4b6af7610 Module +EID9aa368b0-2e45-4a46-ad38-087d43abb308 Case +EIDc8f5484e-e4b7-422a-9d34-1ac80eefc166 Step +EIDeec3e19a-fc79-4ab0-8a49-ed961d63b4b2 Assertion + +EID94a1fde1-c547-4d77-9cd4-5e454f54416d ETS su-dc +EID0e247699-d8db-4322-babd-42a4404cc3d7 Module +EIDc44d9607-6bb6-45e9-98bb-3d46991a8c03 Case +EID2ee701b9-e791-45fb-9bc5-b0c7426b9b9e Step +EID7a793398-74d4-4d84-904e-39f8a887bbd9 Assertion + +EIDe5ce9075-371e-4c8d-97e1-017e3b72e14a ETS su-rs +EID49e7c49b-d01a-4d25-bafc-cda7aa78d691 Module +EID936f743e-2516-40fc-a640-4c9367e05137 Case +EID60f45050-996b-42ea-88af-5d35634f2b34 Step +EID6ac8c365-d0f0-4237-b293-cb3feac79fc6 Assertion + +EIDc513fcc8-8e0a-4ed6-b29f-bfba96cc0fb8 ETS su-ia +EID448003cf-e696-4fe8-9465-e19ad726c606 Module +EID7de0c82b-77e2-46b5-bf5c-9a9f3edfc853 Case code-list +EIDb4092461-7726-4ff4-a9e0-6a1b62769e13 Step +EIDbc8578b4-7d68-4b57-b93d-3bc6d730fdb4 Assertion +EID979e9b1c-aaec-436f-a53f-739c201aedb3 Case feature references +EIDa638bf39-b4c7-484d-a8d9-2bac3181b120 Step +EID29ddf170-3174-46d0-bc5f-a931627caf08 Assertion 1 +EIDb9a59199-d438-4abb-98e1-32738a531adb Assertion 2 +EID2cfafe3d-3128-4bfe-a350-405512f571f3 Assertion 3 +EID8998ad09-f718-42c5-9a77-6f1a55ac36e1 Assertion 4 +EID30fb49ad-8e45-4e23-bc7e-5d17f3e27328 Assertion 5 +EID9b56e11b-93b0-421d-a0bd-84e9e6a3bc10 Assertion 6 +EID52d612fd-db1e-40b7-aaee-ceb2e7f9e606 Assertion 7 +EIDa4d9988b-4a5f-429d-8a1f-5acd86b20065 Assertion 8 +EID726456f5-777a-4635-af51-72563613baa0 Assertion 9 +EIDc1c32e8c-dd10-41f3-a5f7-b5d6613bcbff Assertion 10 +EID49cae70e-ed19-4ed2-b589-0ac8cd544921 Assertion 11 +EID2aeb5148-9705-4e00-a51a-e05b8b772a37 Assertion 12 +EIDf0c9900c-e699-4945-b6cc-fc42985ac82d Assertion 13 +EIDfc2a967d-365d-41d1-99f9-0b6d927b6ae2 Assertion 14 +EIDba6aac8b-384e-4428-ae81-0135b953ae67 Assertion 15 +EID8d5d4353-a1a9-4df9-8fdc-22394af3d5ef Assertion 16 +EIDf13091ce-4ff7-4fc5-b5e5-918cfe2d988b Assertion 17 +EID5c8b5cf8-b32a-4474-a8fd-07597516b8e8 Assertion 18 +EID9f1fdecb-e7e2-4098-8916-60ed56e4df62 Assertion 19 + +EID4a8fffca-2603-4a16-b8e4-6e2c659e50be ETS su-as +EIDe443ec1c-6e2a-44ec-ac14-337942beb79a Module +EIDe7ea4551-a4a1-4272-8f43-5a811103b5a0 Case specific requirements +EID02e8a72f-6e0c-4248-8702-bdf9f2e2e86b Step +EIDbb70073c-6460-4dde-8b51-6bf986c01a97 Assertion 1 +EIDcaadcfaa-30c7-4554-9076-08c8ef066c6d Assertion 2 +EID0854792a-ff38-4827-92d0-79baa24b5653 Assertion 3 +EID30e0914a-31c0-44eb-adc9-a8b741e0c6bf Assertion 4 + +EID529582ee-f03f-4386-acd3-b880c26bcb31 ETS su-grid-as +EID9be16e89-ab2c-43e2-8b6c-acc81f5d15d9 Module +EID361032ad-ee1d-41df-bdaf-3f0820cf559d Case constraints +EIDbaa49c79-ba26-42d9-845e-a2e4d1c92a9a Step +EIDcb27c5b4-6776-412b-b9ed-3dcc90acbfab Assertion 1 +EID08951320-a070-4e85-8811-398b0d294047 Assertion 2 +EIDf41456ab-0cef-426c-8802-b192a46ae285 Assertion 3 +EIDf4f1ee97-db35-43a5-ab0c-a28facda10f2 Assertion 4 +EIDf75d4ceb-b6ce-434f-9f74-0a687b7fffc9 Assertion 5 + +EID33a36524-2997-4ac5-9eb4-0d7ea7008122 ETS su-vector-as +EID908f48b5-c729-4db5-b9e4-eddb0ffa14ed Module +EIDafa19d99-16b6-4d31-9729-fc877df3f4b2 Case codelist +EID0b7e8eda-a728-4df2-8623-ade8b691a5c7 Step +EID96b54fcd-5436-46b3-98f6-e1b00560e3cf Assertion +EID686bf1d1-ee3c-423f-b1e0-037b54c6ed01 Case constraints +EID88fbb5db-75ee-44ed-9903-7469ec539567 Step +EID520e0547-eebc-486b-8782-5f4f55695512 Assertion 1 +EID341cd410-7e0e-4e6b-b405-c045c9cb32cc Assertion 2 +EIDc05fe854-4583-4c9c-b10d-12b6912a2db2 Assertion 3 +EID6364424a-9b5c-4fc7-a69e-20a9a919c0fe Assertion 4 +EID7ee3f2fd-7907-486d-892b-b65bf691514d Assertion 5 +EID36922d10-d047-4c38-b0d5-893ae7e3053c Assertion 6 +EIDe02b6117-5d4d-4af9-b1e1-be779ed3003c Assertion 7 +EIDc3ae5200-53cb-4e2d-9cfa-b64f181ef6af Assertion 8 +EIDce780b7f-d74d-431e-b6c6-8f782b3d001b Assertion 9 +EIDd07355e0-a58e-4127-8db2-d7b44c95e2fa Assertion 10 EID4441cbde-371f-4899-90b3-145f4fd08ebc ETS tn-as EIDe11a7179-a5d8-4556-a94a-90fcfb7e6ffd Module