]]>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.
-
]]>a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERYTest that the XML capabilities document is schema valid.
-
]]>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.
]]>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.
-
]]>a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL<xml-fragment/>${#Project#serviceEndpoint}xsi:schemaLocationNo Authorizationservice${#Project#service}QUERYrequestGetCapabilitiesQUERYversion${#Project#version}QUERYTest that the XML capabilities document is schema valid.
-
]]>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.
]]>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.
+
]]>c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELLTest that natural language fields are provided in default language when requested language is unsupported or absent.
-
]]>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.
+
]]>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.
+
]]>c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import javax.xml.transform.stream.StreamSource;
+
+
+
+
+
+
+
+ Test that the capabilities document is schema valid.
+
]]>c2bf56ae-2544-4b9d-9fdf-28654aa6111fPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import de.interactive_instruments.etf.suim.*
+
+
+
+
+
+
+
+ Test the service behaviour without a language specific 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.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 AuthorizationTest 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.
+
+
+
+ No Authorization
+
+
+
+
+
+
+
+
+
+
+ Transfer Service Feed
+ ResponseAsXml
+ Get Service Feed
+ serviceFeedXml
+ Transfer_Properties
+ true
+
+
+
+
+ Iterate 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 '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 '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 Settings
+
+
+
+ Basic
+ Basic
+ Global HTTP Settings
+
+
+
+
+
+
+
+
+
+ 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}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 AuthorizationfeedXml
+);
+
+
+
+ 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-d220f9de6c942017-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.htmlMetadaten 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.htmlMetadaten im GEOportal.NRW]]]]>
+ >
+
50.30 5.80 52.60 9.50DOP20https://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 Authorization
+
+
+
+ No Authorization
+
+
+
+
+
+
+
+
+
+ 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}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 Authorization
+
+
+
+ No Authorization
+
+
+
+
+
+
+
+
+
+ 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}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 Authorization
+
+
+
+ No Authorization
+
+
+
+
+
+
+
+
+
+ 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}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 AuthorizationopenSearchURLhttp://www.gis-rest.nrw.de/atomFeed/rest/search/GetDownloadServiceMetadata?service_identifier_code=c2195ebe-dad7-4f5e-9bc3-79a30d3373f3serviceEndpointetf.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.
-
]]>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.
+
]]>
+
+
+
+
+
+ a06790ce-5d08-4ad4-821f-f55839d4a698
+
+
+ PARALLELL
+
+
+
+
+
+ Test that the ObservationOfferings available in the service are retrievable using a GetObservation request.
-
]]>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.
+
]]>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.
+
]]>a06790ce-5d08-4ad4-821f-f55839d4a698PARALLELL
+
+
+
+
+
+
+ Test that Supported Languages, Namespaces and CRS nodes are provided in the ObservationOfferings section of getCapabilities response.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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}languageTest that the capabilities document is in default language when resquested with absent language parameter or unsupported language.
-
]]>
+
+
+
+
+
+ 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}wrongLanguagezzzzTest that the Response Language exists and it changes depending on the requested language.
-
]]>
+
+
+
+
+
+ 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}languageTest that the supported languages, including the default language, appears in the extended capabilities section of the capabilities document.
-
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.
-
]]>4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL
+
+
+
+
+
+
+
+
+ SEQUENTIAL
+
+
+ Test that the service supports at least one of the WCS protocol bindings KVP, POST or XML/SOAP.
+
]]>
+
+
+
+
+
+ 4e10a229-c426-479b-a67c-ea4f04a04673
+
+
+ PARALLELL
+
+
+
+
+
+ Test that the natural language fields are in the requested language.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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}AcceptLanguageszzzzTest that the service provides a 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.
-
]]>4e10a229-c426-479b-a67c-ea4f04a04673PARALLELL
+
+
+
+
+
+
+ Test that the response language changes according with the AcceptLanguages parameter of the GetCapabilities request.
+
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).
-
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.
+ trueSEQUENTIAL
- 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:stringGetCapabilities
-
+
- 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:stringGetCapabilities
-
+
+
+
+ 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:stringGetCapabilities
-
+
- 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:stringGetCapabilities
-
+
+
+
+ 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
QUERYxs:stringGetCapabilities
-
+
+
+
+ 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).
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).
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 ServiceALKIS 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 ServiceALKIS 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:
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}import javax.xml.transform.stream.StreamSource;
+}
+
+
+
+
+
+
+ Test that the XML capabilities document is schema valid.
+
]]><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.
+
]]>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.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that a Resource Locator element is provided within the Extended Capabilities section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that a Resource Locator element is provided within the Extended Capabilities section.
+
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that a SpatialDataService Type element is given within the ExtendedCapabilities section.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that at least one keyword from the "Classification of Spatial data Services" is provided.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that at least one keyword from the "Classification of Spatial data Services" is provided.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that if additional keywords are provided they are mapped into a KeywordList element.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that if additional keywords are provided they are mapped into a KeywordList element.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that at least one TemporalReference is given into the ExtendedCapabilities section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that at least one TemporalReference is given into the ExtendedCapabilities section.
+
]]>
+
+
+
+
+
+ 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].
-
]]>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].
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that is provided a Conformity element into the Extended Capabilities section.
-
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that a Fees node is provided defining the conditions for access and use.
-
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that the responsible party role is mapped to the ContactPosition element within the ContactInformation section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that the responsible party role is mapped to the ContactPosition element within the ContactInformation section.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that are provided a OrganisationName and Emailaddress elements within the MetadataPointOfcontact section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that are provided a OrganisationName and Emailaddress elements within the MetadataPointOfcontact section.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that a MetadataPointOfContact element is provided within the ExtendedCapabilities section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that a MetadataPointOfContact element is provided within the ExtendedCapabilities section.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that is provided a MetadataDate element within the ExtendedCapabilities section.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that GetCapabilities operation metadata is mapped to the wms:GetCapabilities element.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that the additional keywords describing the layer are mapped to the KeywordList element.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that the additional keywords describing the layer are mapped to the KeywordList element.
+
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that the boundingbox of each layer is mapped to the BoundingBox element.
-
]]>
+
+
+
+
+
+ 452f3b7c-9db1-47c7-9621-6f76b761feea
+
+
+ PARALLELL
+
+
+
+
+
+ Test that in each layer, the layer name is mapped into the Name element.
-
]]>
+
+
+
+
+
+ 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.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+
+
+ Test that a supported CRS is provided based on ETRS89 for continental Europe and on ITRS outside continental Europe.
+
]]>
+
+
+
+
+
+ 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.
-
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELLTest that a legend is provided into LegendURL element for each style and supported language defined in the View Service.
-
]]>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.
+
]]>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}QUERYEXCEPTIONSXMLQUERYgetMapEndpointlayersstylescrsbboxwidthheightformatwrongValueSEQUENTIALTest that cascaded layers provide a valid metadata through a Discovery Service.
-
]]>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.
+
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL<xml-fragment/>${#Project#serviceEndpoint}20030000No AuthorizationrequestGetCapabilitiesQUERYservice${#Project#service}QUERYversion${#Project#version}QUERYlanguage${#TestCase#defaultLanguage}QUERYdefaultLanguagedutTest that Titles and Abstracts are not affected when the LANGUAGE parameter is absent or unsupported.
-
]]>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.
+
]]>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.
+
]]>452f3b7c-9db1-47c7-9621-6f76b761feeaPARALLELL
+
+
+
+
+ language
+ dut
+
+
+
+
+
+ Test that the capabilities document contains the language elements with the correct multiplicity.
+
]]>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.
+
]]>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}QUERYTest that the View Service metadata, Operations Metadata, Layers Metadata and Languages response parameters are contained in the Get View Service operation response.
-
]]>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.
+
]]>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.
+
]]>12c49af9-925c-4121-bb67-15bc355499f5PARALLELLTest 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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}QUERYTest that a list of keywords is provided into a Keywords element in each layer.
-
]]>12c49af9-925c-4121-bb67-15bc355499f5PARALLELLTest that a WGS84BoundingBox element is provided defining the minimum rectagle bounding the service data.
-
]]>12c49af9-925c-4121-bb67-15bc355499f5PARALLELL
+
+
+
+
+
+
+ Test that a WGS84BoundingBox element is provided defining the minimum rectagle bounding the service data.
+
]]>
+
+
+
+
+
+ 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.
-
]]>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.
+
]]>
+
+
+
+
+
+ 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}QUERYTest 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.
-
]]>12c49af9-925c-4121-bb67-15bc355499f5PARALLELLTest 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.
-
]]>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.
+