List of SOS Tests

This document describes a collection of tests that have to be run in order to ensure a required level of compliance with IOOS SOS Profile 1.0 (IOOS Convention), and official OGC SOS 1.0.0 specification.

The collection includes both OGC Standard and IOOS Profile compliance tests. The goal of OGC compliance tests is to ensure that the service is to a certain extent compliant with the OGC specifications. The tests are essentially the same as the official OGC CITE test set for SOS 1.0.0; however, some tests were marked out as optional for the current phase of IOOS SOS development, e.g. verification of exception report messages.

NOTE: The OGC tests based on HTTP POST requests cannot be used with ncSOS instances because ncSOS does not support POST binding.

The IOOS SOS Profile tests have originated from the official OGC CITE test set for SOS 1.0.0, and adapted for IOOS-specific requirements. The goal of these tests is to validate that a service response is syntactically and semantically valid. The response is considered syntactically valid if it contains the expected elements and attributes in the order prescribed by the IOOS Profile Templates v1.0. The response is recognized as semantically valid if its semantic conforms to the IOOS SOS Convention, i.e. the meaning of variables, elements, attributes, etc. matches the CF Conventions v1.6, IOOS SOS WSDD, and IOOS Controlled Vocabularies.

OWS Common Tests

owsTests:ows-main

(Run test group for GetCapabilities requests using the GET method.)

TESTS ASSERTIONS IOOS Rq’d/Opt
owsTests:ows-OWS.GetCapabilities.1 The GET method request must be supported (using HTTP GET). Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root element matches the provided root element. R
owsTests:ows-OWS.ContentType.1 A response message containing an entity body must contain a Content-Type entity header field that correctly indicates the media type of the message body. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document matches the root element name; (3) the response Content-Type header must be “text/xml” for XML entities. R
owsTests:ows-OWS.GetCapabilities-Exceptions.1 In the event that a GetCapabilities request cannot be processed for any reason, the response entity shall include an exception report. The exception code must be one of those listed in Table 5 in the specification document. GetCapabilities with no service parameter and AcceptVersions parameter equal to 1.0.0. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue” exception code; (4) theExceptionReport @locator value shall be that of the missing parameter. (1) R
(2) R
(3) O
(4) O
owsTests:ows-OWS.GetCapabilities-Exceptions.2 In the event that a GetCapabilities request cannot be processed for any reason, the response entity shall include an exception report. The exception code must be one of those listed in Table 5. GetCapabilities with a bogus service parameter value (ADSF), and AcceptVersions parameter equal to 1.0.0. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the ‘InvalidParameterValue’ exception code; (4) theExceptionReport @locator value shall be that of the invalid parameter. (1) R
(2) R
(3) O
(4) O
owsTests:ows-OWS.GetCapabilities-Exceptions.3 In the event that a GetCapabilities request cannot be processed for any reason, the response entity shall include an exception report. The exception code must be one of those listed in Table 5. GetCapabilities with service parameter SOS, and bogus AcceptVersions parameter value “2000-01-01”. R
owsTests:ows-OWS.GetCapabilities-Exceptions.5 In the event that a GetCapabilities request cannot be processed for any reason, the response entity shall include an exception report. The exception code must be one of those listed in Table 5. GetCapabilities with an incorrect KVP query string http://SOS-server-URL/sos?request~GetCapabilities!service~!SOS, triggering the missing parameter value exception. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue” exception code, for both the request and service. (1) O
(2) O
(3) O
owsTests:ows-OWS.CaseInsensitiveKvpNames.1 Parameter names in KVP strings shall be handled in a case-insensitive manner. GetCapabilities with the KVP parameter names in all uppercase, lower-case and mixed-case. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root element matches the provided root element. R
owsTests:ows-OWS.GetCapabilities-AcceptVersions.1 If AcceptVersions is not specified, the service must respond with highest supported version. GetCapabilities with no AcceptVersions and service of “SOS”. Without AcceptVersion, using version negotiation, sends latest copy. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an sos:SOS_Capabilities document; (3) the response version must be what was requested R
owsTests:ows-OWS.GetCapabilities-AcceptVersions.2 Version negotiation using AcceptVersions parameter (preference ordering) must return service metadata corresponding to the most preferred version that is supported. If none of the requested versions are supported, the server must generate an exception with code ‘VersionNegotiationFailed’. GetCapabilities with AcceptVersions of “1.0.0” and service of “SOS”. With AcceptVersion, expecting one of the versions listed $acceptVersions. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an sos:SOS_Capabilities document; (3) the response version must be what was requested. If the AcceptVersion element is used with a number of versions, one is expected to return (‘1.0.0’). R
owsTests:ows-OWS.GetCapabilities-AcceptVersions.3 Version negotiation using AcceptVersions parameter (preference ordering) must return service metadata corresponding to the most preferred version that is supported. If none of the requested versions are supported, the server must generate an exception with code ‘VersionNegotiationFailed’. GetCapabilities with service of “SOS”, and bogus AcceptVersion number “2000-01-01” http://SOS-server-URL/sos?request#GetCapabilities&service#SOS&acceptversions#2000-01-01. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “VersionNegotiationFailed” exception code. R
owsTests:ows-OWS.GetCapabilities-Sections.1 The response to a GetCapabilities request that includes a sections parameter with NO VALUE provided (i.e. http://SOS_serverURL/sos?service#SOS&request#GetCapabilities&sections#) shall include an abbreviated capabilities document that omits all optional sections. Pass if the response is schema valid and omits all optional top-level elements. R
owsTests:ows-OWS.GetCapabilities-Sections.2 The response to a GetCapabilities request that includes a sections parameter listing optional elements ServiceIdentification and OperationsMetadata shall include only the requested elements in the response entity http://SOS-server-URL/sos?service#SOS&request#GetCapabilities&sections#ServiceIdentification,OperationsMetadata. Pass if the response is schema valid and includes only the requested optional elements. R
owsTests:ows-OWS.GetCapabilities-AcceptFormats.1 The response to a GetCapabilities request containing an AcceptFormats parameter specifying a supported format must include a response entity that corresponds to the requested media type. Examples: (1)http://SOS-server-URL/sos?service#SOS&request#GetCapabilities&acceptformats#text/xml and (2)http://SOS-server-URL/sos?service#SOS&request#GetCapabilities&acceptformats#application/zip. Pass if the response is schema valid and outputFormat equals requested media type. O

General SOS Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
sos:general-SOS.General-InvalidRequest.1 Sending a POST request that is non-conformant to a schema associated with an SOS operation (with “test” in the body) causes the server to return a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue” exception code. O
sos:general-SOS.General-ValidResponse.1 A response is a valid response for the SOS. This general assertion is tested by all other tests, so there is nothing specific to test now. N/A

Core SOS Tests

A request for a valid capabilities document is made with the optional “acceptversions” parameter omitted, and a response is validated with the schema. Further tests are performed on the GetCapabilities response only if the response passes schema validation.

GetCapabilities Tests

OGC General Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
getCapabilities:core-SOS.GetCapabilities-KVPRequestParameterHandling.1 GetCapabilities request with missing mandatory parameter service and optional acceptversions returns a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue” exception code. O
getCapabilities:core-SOS.GetCapabilities-KVPRequestServiceParameterHandling.1 GetCapabilities request with no acceptversions parameter and a bogus service parameter value of “XYZ” returns a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “ InvalidParameterValue” exception code. O
getCapabilities:core-SOS.GetCapabilities-KVPRequestRequestParameterHandling.1 Request with no acceptversions parameter and a bogus request parameter value of “GetMeASandwich” returns a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “ InvalidRequest” exception code. O
getCapabilities:core-SOS.GetCapabilities-OperationsMetadataMandatoryOperations.1 The OperationsMetadata section of the GetCapabilities response lists the mandatory operations of the SOS. R
getCapabilities:core-SOS.GetCapabilities-OperationsMetadaOptionalOperations.1 Any non-mandatory operations advertised in the OperationsMetadata section of the GetCapabilities response have valid SOS method names. R
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidTime.1 The values in the time element for each ObservationOffering are valid time values (ISO 8601) or are valid named times (i.e. indeterminate, now, etc.). If a time period is specified, then the “beginTime” value must come before the “endTime” or be equal to the “endTime” value. R
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidProcedure.1 The values in the procedure element(s) for each ObservationOffering contain a value and are valid URNs. R
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidObservedProperty.1 The values in the observedProperty element(s) for each ObservationOffering contain a value and are valid URNs, or valid URLs, e.g. for CF/MMI phenomenon names (see document OGC 05-010 for correct formatting of definition URN). R
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidResponseFormat.1 The values in the responseFormat element(s) for each ObservationOffering contain a value and are valid MIME types (namely IOOS profile format) R
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidResultModel.1 If an ObservationOffering provides the resultModel element, then the resultModel element must be in the om:Observation substitution group and is typically om:Observation or a specialized extension. Value must be namespace-qualified. O
getCapabilities:core-SOS.GetCapabilities-ResponseContentsValidResponseMode.1 If an ObservationOffering provides the responseMode element, then the responseMode element contains a value that is one of the valid responseMode values. R

IOOS-specific Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidOperationsMetadataProperty.1 The operation names are listed in UpperCamelCase (i.e. GetCapabilities, DescribeSensor, GetObservation, other – if implemented) R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidOperationsMetadataProperty.2 The ObservationOffering for the whole network is listed, and gml:id and gml:name for that offering is in lower case (e.g. gml:id#“urn_ioos_network_all” and urn:ioos:network:all) R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidOperationsMetadataProperty.3 The <ows:ExtendedCapabilities> contains valid ioosTemplateVersion value. R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidOperationsMetadataProperty.4 The <ows: ExtendedCapabilities > contains valid softwareVersion value. R
getCapabilities:IOOS-SOS.GetCapabilities- ResponseContainsValidOutputFormat.1 The values in the <ows:Parameter name#“outputFormat”> element contain ‘text/xml;subtype#“sensorML/1.0.1/profiles/ioos_sos/1.0”’ R
getCapabilities:IOOS-SOS.GetCapabilities- ResponseContainsValidResponseFormat.2 The values in the <responseFormat> element(s) for each ObservationOffering contain ‘text/xml; subtype#“om/1.0.0/profiles/ioos_sos/1.0”’. R
getCapabilities:IOOS-SOS.GetCapabilities- ResponseContainsValidSRSName.1 If ObservationOffering for the network provides gml:srsName, then it has the value “EPSG:4326” R
getCapabilities:IOOS-SOS.GetCapabilities- ResponseContainsValidSRSName.2 If ObservationOffering for the network does not provide gml:srsName, then element <gml:boundedBy>/<gml:Envelope> has the attribute ‘srsName’ with the value “http://www.opengis.net/def/crs/EPSG/0/4326” R
getCapabilities:IOOS-SOS.GetCapabilities- ResponseContainsValidTimeFrame.1 Each <sos:ObservationOffering> provides beginPosition and endPosition values of TimePeriod, and (a) beginPosition value is not later than endPosition; (b) beginPosition value is in ISO 8601 format (e.g. 2009-05-23T00:00:00.000Z), and © endPosition has either an inline value in ISO 8601 format or an attribute ‘indeterminatePosition#”now”’. R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidProcedure.1 Each ObservationOffering provides just a single procedure, and the procedure value is (a) a URN that conforms to the IOOS Conventions for Observing Asset Identifiers, and (b) matches the gml:name value for this ObservationOffering. R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidObservedProperty.1 Each ObservationOffering provides at least one fully qualified <sos:observedProperty> element with the values of URLs corresponding to a Climate and Forecast (CF) Standard Name of the record in one of the IOOS Vocabularies. R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidObservedProperty.2 None of the <sos:observedProperty> elements provides a value of vector phenomenon (i.e. wind, wave, current) instead of a scalar components of a composite phenomenon describing the vector, and defined in the IOOS Parameter Vocabulary (e.g.: http://mmisw.org/ont/ioos/parameter/wave). R
getCapabilities:IOOS-SOS.GetCapabilities-ResponseContainsValidResponseMode.1 Each ObservationOffering provides a valid responseMode value (i.e. one of the “inline”, “out-of-band”, “attached”, “resultTemplate” strings). R

DescribeSensor Tests

OGC General Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
describeSensor:core-SOS.DescribeSensor-RequestInvalidMIMEType.1 A DescribeSensor request with no outputFormat parameter as well as with a bogus outputFormat parameter value that is not advertised in the capabilities document (e.g. text/xml;subtype#“sensorML/A.B.C”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue “ exception code for missing outputFormat; (4) the ExceptionReport shall have the “InvalidParameterValue” exception code for bogus outputFormat value. O
describeSensor:core-SOS.DescribeSensor-RequestInvalidProcedure.1 A DescribeSensor request with no procedure parameter as well as with a bogus procedure parameter value that is not advertised in the capabilities document (e.g. “urn:ogc:object:procedure:CITE:NFL:AstroDome”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “MissingParameterValue “ exception code for missing procedure; (4) the ExceptionReport shall have the “InvalidParameterValue” exception code for bogus procedure value. O
describeSensor:core-SOS.DescribeSensor-ResponseMatchingResponseFormat.1 The format of the response document matches the outputFormat specified in the request and is valid according to the outputFormat schema. R
describeSensor:core-SOS.DescribeSensor-ResponseMatchingProcedure.1 The unique identifier in the response document matches the procedure URN specified in the request. R

IOOS-specific Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
describeSensor:IOOS-SOS.DescribeSensor-ResponseContainsValidOperationsMetadataProperty.1 SensorML document provides ioosTemplateVersion value in the <sml:capabilities [@name#“ioosServiceMetadata”]> element. R
describeSensor:IOOS-SOS.DescribeSensor-ResponseContainsValidOperationsMetadataProperty.2 SensorML document for a network of stations provides valid reference to the EPSG::4326 CRS in a bounding box description <gml:boundedBy>/<gml:Envelope [@srsName#’http://www.opengis.net/def/crs/EPSG/0/4326’]> element. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.3 SensorML document for a network of stations provides valid networkID identifier, and the networkID: (a) has definition as <sml:Term [@definition#’http://mmisw.org/ont/ioos/definition/networkID’]>; (b) has a value as URN that conforms to the IOOS Conventions for Observing Asset Identifiers; and © matches the gml:name value in the <sos:ObservationOffering> for that network in the Capabilities document. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.4 SensorML document for a network of stations provides valid network shortName identifier, and the identifier has (a) definition as <sml:Term [@definition#’http://mmisw.org/ont/ioos/definition/shortName’]>; and (b) a text string value. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.5 SensorML document for a network of stations provides valid network longName identifier, and the identifier has (a) definition as <sml:Term [@definition#’http://mmisw.org/ont/ioos/definition/longName’]>; and (b) a text string value. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.6 SensorML response document provides for each network or station the reference to at least one parent network with IOOS codeSpace and RA Acronym value. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.7 SensorML document for a network of station provides valid values for all following elements: (a) </sml:SensorML/sml:member[1]/sml:System[1]/sml:contact/sml:ContactList/sml:member[@xlink:role#’http://mmisw.org/ont/ioos/definition/operator’]/sml:ResponsibleParty/sml:contactInfo/sml:address/sml:country>; (b) </sml:SensorML/sml:member[1]/sml:System[1]/sml:contact/sml:ContactList/sml:member[@xlink:role#’http://mmisw.org/ont/ioos/definition/publisher’]/sml:ResponsibleParty/sml:contactInfo/sml:address/sml:country>; © </sml:SensorML/sml:member[1]/sml:System[1]/sml:contact/sml:ContactList/sml:member[@xlink:role#’http://mmisw.org/ont/ioos/definition/operator’]/sml:ResponsibleParty/sml:contactInfo/sml:address/sml:electronicMailAddress>; (d) </sml:SensorML/sml:member[1]/sml:System[1]/sml:contact/sml:ContactList/sml:member[@xlink:role#’http://mmisw.org/ont/ioos/definition/publisher’]/sml:ResponsibleParty/sml:contactInfo/sml:address/sml:electronicMailAddress>** R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.8 SensorML document for a network of stations provides a location of each network member station in <sml:location/gml:Point [@srsName#’http://www.opengis.net/def/crs/EPSG/0/4326’> element with the values of latitude and longitude that are located within the spatial segment defined in the <gml:boundedBy> element. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.9 SensorML document for a network of stations provides a time range of observations for each network member station in <sml:capabilities [@name#’observationTimeRange’]> element with a valid time value pair specifying a time range in ISO 8601 format. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.10 SensorML document for a network of stations provides definition of the observed properties for each network member station in <sml:output [@name#’observed_Property’]/swe:Quantity [@definition#’anyURI’> elements, where anyURI is a reference to the IOOS vocabulary record. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.11 SensorML document for a single station provides valid value of the <sml:classifier [@name#’platformType’> element with the reference definition and IOOS codeSpace. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.12 SensorML document for a single station provides valid value of the <sml:classifier [@name#’operatorSector’> element with the reference definition and IOOS codeSpace. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.13 SensorML document for a single station provides valid value of the <sml:classifier [@name#’publisher’> element with the reference definition and IOOS codeSpace. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.14 SensorML document for a single station provides valid value of the <sml:classifier [@name#’sponsor’> element with the reference definition and IOOS codeSpace. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.15 SensorML document for a single station provides a time range of observations for the station in <sml:capabilities [@name#’observationTimeRange’]> element with a valid time value pair specifying a time range in ISO 8601 format. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.16 SensorML document for a single station provides a location of the station in <sml:location/gml:Point [@srsName#’http://www.opengis.net/def/crs/EPSG/0/4326’> element with the valid latitude and longitude value pair. R
describeSensor:IOOS-SOS.DescribeSensor- ResponseContainsValidOperationsMetadataProperty.17 SensorML document for a single station provides a description of at least one sensor that is located at the station (platform), and for each sensor a ‘sensorID’ and a list of the properties observed by this sensor are provided. R

GetObservation Tests

All GetObservation tests use “POST” method, and URL obtained from the GetCapabilities response.

OGC General Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
getObservation:core-SOS.GetObservation-RequestInvalidSRSName.1 A GetObservation request with a bogus srsName parameter value that is not advertised in the capabilities document (e.g. “urn:ogc:def:crs:EPSG::9999”) produces a valid error message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidOffering.1 A GetObservation request with a bogus _ offeringId _ parameter value that is not advertised in the capabilities document (e.g. “softliness_of_jello”) produces a valid error message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidEventTime.1 A GetObservation request with an invalid eventTime parameter (e.g. bogus _ timePosition _ parameter value of “scooby”) produces a valid error message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidProcedure.1 A GetObservation request with a bogus procedure parameter value that is not advertised in the capabilities document (e.g. “urn:ogc:object:procedure:CITE:WeatherService:ThisIsInvalid”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidFeatureOfInterest.1 A GetObservation request with one or more invalid _ featureOfInterest _ values that are not advertised in the capabilities document (e.g. “urn:ogc:def:object:feature:TheInvalidFeature”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidObservedProperty.1 A GetObservation request with one or more invalid observedProperty values that are not advertised in the capabilities document (e.g. “urn:ogc:def:phenomenon:OGC:TheInvalidObservedProperty”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidResult.1 A GetObservation request with an invalid result parameter (e.g. using the comparison operator “ogc:PropertyIsEqualTo” with no value) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidResponseFormat.1 A GetObservation request with a bogus responseFormat parameter value that is not advertised in the capabilities document (e.g. text/xml;subtype#”XX”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidResultModel.1 A GetObservation request with a bogus resultModel parameter value that is not advertised in the capabilities document (e.g. “TheBogusOne”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-RequestInvalidResponseMode.1 A GetObservation request with a bogus responseMode parameter value that is not advertised in the capabilities document (e.g. “NotValid”) produces a valid error report message. Pass if all of the following conditions are true: (1) the response is schema valid; (2) the root document is an ows:ExceptionReport document; (3) the ExceptionReport shall have the “InvalidParameterValue” exception code. O
getObservation:core-SOS.GetObservation-ResponseMatchingSRSData.1 If an srsName parameter is supplied in the request, then the srsName value of the response data is valid according to the format specified by the requested srsName. R
getObservation:core-SOS.GetObservation-ResponseMatchingProcedureData.1 GetObservation requests made for each procedure element advertised in the capabilities document produce the responses with procedure values that match or are a subset of the procedure values specified in the requests. R
getObservation:core-SOS.GetObservation-ResponseMatchingObservedPropertyData.1 GetObservation requests made for each observedProperty element advertised in the capabilities document produce the responses with observedProperty values that match or are a subset of the observedProperty values specified in the requests. R
getObservation:core-SOS.GetObservation-ResponseAdvertisedEventTimeData.1 A valid GetObservation request made for each offering advertised in the capabilities document with the advertised eventTime for the requested offering returns one or more observations. R
getObservation:core-SOS.GetObservation-ResponseMatchingEventTimeData.1 A valid GetObservation request made for each offering advertised in the capabilities document with the eventTime value that is off the advertised range for the requested offering (e.g. is before the earliest advertised beginPosition) returns no observations. R
getObservation:core-SOS.GetObservation-ResponseMatchingFeatureOfInterestData.1 A valid GetObservation request made for each featureOfInterest advertised in the capabilities document produces the response with featureOfInterest values that match or fall within the spatial extent identified in the featureOfInterest value specified in the request. R
getObservation:core-SOS.GetObservation-ResponseMatchingResultData.1 If a valid filter value is supplied in the result parameter of the request, then the response O&M data is valid for that filter. O
getObservation:core-SOS.GetObservation-ResponseMatchingResponseFormatData.1 The format of the response data matches the format supplied in the responseFormat parameter of the request. R

IOOS-specific Tests

TESTS ASSERTIONS IOOS Rq’d/Opt
getObservation:IOOS-SOS.GetObservation-ResponseMissingEventTimeData.1 A valid GetObservation request made for each offering advertised in the capabilities document without ‘eventTime’ for the requested offering returns either all observations for that offering, or a ResponseExceedsSizeLimit exception code, if (a) server employs a limit on the response size, and (b) the limit is exceeded. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingProcedureData.1 GetObservation requests made for each single platform/station ‘procedure’ element advertised in the Capabilities document produce the responses with <om:procedure> values that (a) match the ‘procedure’ values specified in the requests, and © are in a form of URN that conforms to the IOOS Conventions for Observing Asset Identifiers. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingProcedureData.2 GetObservation request made for a network of multiple platforms/stations ‘procedure’ element advertised in the Capabilities document produces the response with <om:procedure> element that lists all affiliated platforms/stations as members of a single <om:Process> element R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidCompositeProperty.1 GetObservation request for the ‘observedProperty’ advertised in the Capability documents as a composite phenomenon or a member of it produces a response with <om:observedProperty> that contains a child <swe:CompositePhenomenon> element, which (a) has a response-wide unique <gml:id> attribute, (b) includes <gml:name> with a string value, and © contains a list of the constituent scalar properties that is a subset of the properties defined in the IOOS Parameter Vocabulary for that composite phenomenon. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidFeatureOfInterest.1 A GetObservation response returns for each <om:member> an <om:featureOfInterest> with (a) valid name and codeSpace values for the CF Feature Type (e.g., timeSeries, timeSeriesProfile, etc), (b) valid geospatial bounding box (lat/lon), and © valid geographical location information for each individual platform/station (i.e. 2D only, always in EPSG::4326). R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidDataRecord.1 All <om:result> elements in GetObservation response contain a DataRecord comprised of (a) <swe2:field name#“stations”>, and (b) <swe2:field name#“observationData”>. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidTemplateVersion.1 A GetObservation response contains valid ioosTemplateVersion value. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidMemberElement.1 A GetObservation response contains at least one <om:member> element R
getObservation:IOOS-SOS.GetObservation-ResponseMemberElementContainsSingleProcedure.1 A GetObservation response contains a single <om:procedure> for each <om:member> R
getObservation:IOOS-SOS.GetObservation-ResponseMemberElementContainsResult.1 A GetObservation response returns an <om:result> for each <om:member>. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingStationID.1 A GetObservation response returns valid ‘stationID’ properties for each station that fits within bounding box and reports a requested observedProperty. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidReferenceLocalFrames.1 A GetObservation response returns valid ‘referenceFrame’ and ‘localFrame’ properties for each <swe2:field name=“platformLocation”>. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingLatLonVertical AxisOrder.1 A GetObservation response returns geographical coordinate in a valid order (latitude precedes longitude, vertical coordinate is listed after the horizontal ones, and explicitly follow the definition of the vertical CRS) for each <swe2:field name=“platformLocation”>. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingSensorID.1 A GetObservation response returns valid ‘sensorID’ properties for all sensors that measure a requested observedProperty, and are located on the platforms/stations that fit within bounding box. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidSensorHeightProperty.1 A GetObservation response for a ‘timeSeries’ CF Feature Type returns valid sensor vertical position (height) properties for all non-profiling sensors that measure a requested observedProperty, and are located on the platforms/stations that fit within bounding box. R
getObservation:IOOS-SOS.GetObservation- ProfileResponseContainsValidProfilingSensorLocationProperty.1 A GetObservation response for a ‘profile’ and ‘timeSerisesProfile’ CF Feature Types returns valid ‘sensorOrientation’ or ‘sensorLocation’ properties for all profiling sensors that measure a requested observedProperty, and are located on the platforms/stations that fit within bounding box. R
getObservation:IOOS-SOS.GetObservation-ProfileResponseContainsValidProfilingSensorProperty.1 A GetObservation response for a ‘profile’ and ‘timeSerisesProfile’ CF Feature Types returns valid ‘profileBins’ or ‘profileHeights’ properties for all profiling sensors that measure a requested observedProperty, and are located on the platforms/stations that fit within bounding box. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidDefinitionAttributes.1 A GetObservation response returns valid “definition” attribute for each of the <swe2:DataRecord> elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.2 A GetObservation response returns valid “definition” attribute for each of the <swe2:DataArray> elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.3 A GetObservation response returns valid “definition” attribute for each of the <swe2:Text> elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.4 A GetObservation response returns valid “definition” attribute for each of the <swe2:Vector> elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.5 A GetObservation response returns valid “definition” attribute for each of the <swe2:Quantity> elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.6 A GetObservation response returns valid “definition” attribute for each of the <swe2:QuantityRange> child elements. R
getObservation:IOOS-SOS.GetObservation- ResponseContainsValidDefinitionAttributes.7 A GetObservation response returns valid “definition” attribute for each of the <swe2:Time> elements. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidTextElementProperty.1 A GetObservation response returns valid <swe2:Text> child element for each <swe2:field name=“stationID”> and <swe2:field name=“sensorID”> elements: (a) the <swe2:Text> must provide fully qualified stationID or sensorID definition through ‘definition’ attribute, and (b) value of the <swe2:Text> must be a full station URN as defined in the IOOS Conventions for Observing Asset Identifiers. R
getObservation:IOOS-SOS.GetObservation-ResponseMatchingStationSensorNames.1 A GetObservation response returns ‘name’ attributes for each of <swe2:item> child elements of a <swe2:DataChoice>; the attribute values (a) are valid, and (b) match the stations’ names in <swe2:field name=“stations”> and/or sensors’ names in <swe2:field name=“sensors”> elements. R
getObservation:IOOS-SOS.GetObservation-ResponseContainsValidEncodingElements.1 A GetObservation response returns a valid <swe2:encoding> element for each <om:member>; the <swe2:encoding> shall (a) define separators for records and values in the <swe2:values>, and (b) replace all special ASCII characters used in the capacity of separators with the corresponding standard HTML Escape Sequences. R
getObservation:IOOS-SOS.GetObservation-ResponseMemberElementContainsValidValuesProperty.1 A GetObservation response returns a valid <swe2:values> element for each <om:member>: (a) the <swe2:values> shall contain records with values of all requested observed properties; (b) each record shall contain the observation sampling time, name of the sensor, and the observed values as defined in the DataChoice <swe2:item> element associated with the sensor; © the names of the sensors shall match the values of ‘name’ attributes for corresponding <swe2:item> child elements of <swe2:DataChoice>; (d) the total number of records shall match the value of <swe2:elementCount>; and (e) special ASCII characters used as separators are not encoded in HTML Escape Sequences. R
getObservation:IOOS-SOS.GetObservation-ProfileResponseContainsValidDataArray.1 A GetObservation response returns a valid child element <swe2:DataArray definition=“http://mmisw.org/ont/ioos/definition/profile"> with empty <<swe2:elementCount> for each profiling sensor within <swe2:DataChoice definition=“http://mmisw.org/ont/ioos/definition/sensors">. R
getObservation:IOOS-SOS.GetObservation-ProfileResponseContainsValidProfileIndex.1 A GetObservation response returns for each profiling sensor within <swe2:DataChoice definition=“http://mmisw.org/ont/ioos/definition/sensors"> a valid <swe2:field name=“profileIndex”> or <swe2:field name=“binIndex”> with <swe2:Count definition=“http://mmisw.org/ont/ioos/definition/profileIndex"> child element that indicates which height/bin is being reported. R