Using HAPI schema version 2.0-1

http://hapi-server.org/servers/TestData/hapi
  Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
  Passis.ContentType() Expect HTTP Content-Type to match /^text\/html/; Got: text/html; charset=utf-8

http://hapi-server.org/servers/TestData/hapi/capabilities
  Passis.ContentType() Expect HTTP Content-Type to match /^application\/json/; Got: application/json; charset=utf-8
  Passis.CORSAvailable() To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-{Origin,Methods} = {*, GET}; Got: Access-Control-Allow-{Origin,Methods} = {*, GET}
  Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
  Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
  Passis.HAPIJSON() Expect body to be valid capabilities schema; Got: is valid
  Pass: Expect outputFormats to have 'csv'; Got: csv,binary,json

http://hapi-server.org/servers/TestData/hapi/catalog
  Passis.ContentType() Expect HTTP Content-Type to match /^application\/json/; Got: application/json; charset=utf-8
  Passis.CORSAvailable() To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-{Origin,Methods} = {*, GET}; Got: Access-Control-Allow-{Origin,Methods} = {*, GET}
  Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
  Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
  Passis.HAPIJSON() Expect body to be valid catalog schema; Got: is valid
  Passis.Unique() Expect all 'id' values in objects in datasets array to be unique; Got: All unique.
  Passis.TooLong() Expect titles in objects to be <= 40 characters; Got: All objects in catalog are shorter than 40 characters

http://hapi-server.org/servers/TestData/hapi/info?id=a_test_of_an_invalid_id_by_verifier-nodejs
  Passis.ContentType() Expect HTTP Content-Type to match /^application\/json/; Got: application/json; charset=utf-8
  Passis.ErrorCorrect() Expect HTTP code to be 404; Got: 404
  Warnis.ErrorInformative() Want HTTP header status message to match 'HAPI 1406'. (Explanation.); Got: 'HAPI error 1406: unknown dataset id'
  Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
  Passis.HAPIJSON() Expect body to be valid HAPIStatus schema; Got: is valid
  Passis.ErrorCorrect() Expect HAPI code to be 1406; Got: 1406
  Passis.ErrorInformative() Want status.message element of response to contain the string 'HAPI error 1406: unknown dataset id' (default HAPI error message); Got: 'HAPI error 1406: unknown dataset id'

http://hapi-server.org/servers/TestData/hapi/info?id=dataset1
  NoteVisually check data
  Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
  Passis.ContentType() Expect HTTP Content-Type to match /^application\/json/; Got: application/json; charset=utf-8
  Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
  Passis.HAPIJSON() Expect body to be valid info schema; Got: is valid
  Passis.Unique() Expect all 'name' values in objects in parameters array to be unique; Got: All unique.
  Passis.FormatInHeader() Info response should not have 'format' specified.; Got: No format given.
  Passis.FirstParameterOK() First parameter should (not must) be named 'Time' b/c clients will likely label first parameter as 'Time' on plot to protect against first parameter names that are not sensible.; Got: Time
  Passis.FirstParameterOK() First parameter must have a fill of null or it should not be specified.; Got: null
  Passis.TimeIncreasing() Expect info.startDate < info.stopDate; Got: startDate = 1970-01-01T00Z; stopDate = 2016-12-31T00Z
  Passis.TimeIncreasing() Expect info.sampleStartDate < info.sampleStopDate; Got: sampleStartDate = 1970-01-01T00Z; sampleStopDate = 1970-01-01T00:00:11Z
  Passis.UnitsOK Expect isotime units to be UTC.; Got: type = 'isotime' and units = 'UTC' for parameter Time.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = isotime and length = 24 for parameter Time
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter scalar.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter scalar
  Passis.FillOK() Expect fill value for a integer parameter to not have a decimal point; Got: fill = '-1e31' for parameter scalarint.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = integer and length = undefined for parameter scalarint
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = string and length = 3 for parameter scalarstr
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = integer and length = undefined for parameter scalarcats
  Passis.UnitsOK Expect isotime units to be UTC.; Got: type = 'isotime' and units = 'UTC' for parameter scalariso.
  Passis.FillOK() Expect length of fill value for a isotime parameter to be equal to length of the string parameter; Got: fill = '0000-00-00:T00:00:00Z' for parameter scalariso.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = isotime and length = 20 for parameter scalariso
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter vector.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter vector
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3] for parameter vector
  Passis.FillOK() Expect fill value for a integer parameter to not have a decimal point; Got: fill = '-1e31' for parameter vectorint.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = integer and length = undefined for parameter vectorint
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3] for parameter vectorint
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = string and length = 3 for parameter vectorstr
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3] for parameter vectorstr
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = integer and length = undefined for parameter vectorcats
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3] for parameter vectorcats
  Passis.UnitsOK Expect isotime units to be UTC.; Got: type = 'isotime' and units = 'UTC' for parameter vectoriso.
  Passis.FillOK() Expect length of fill value for a isotime parameter to be equal to length of the string parameter; Got: fill = '0000-00-00:T00:00:00Z' for parameter vectoriso.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = isotime and length = 20 for parameter vectoriso
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3] for parameter vectoriso
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter vectormulti.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter vectormulti
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3,2] for parameter vectormulti
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter transform.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter transform
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [9] for parameter transform
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter transformmulti.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter transformmulti
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [3,3] for parameter transformmulti
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter spectra.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter spectra
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [10] for parameter spectra
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter spectranobins.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter spectranobins
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [10] for parameter spectranobins
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter spectralarge.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter spectralarge
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [100] for parameter spectralarge
  Passis.FillOK() Expect fill value for a double parameter to not have a two or more non-zero decimal places.; Got: fill = '-1e31' for parameter spectramulti.
  Passis.LengthAppropriate() Length may only be given for types string and isotime; Got: Type = double and length = undefined for parameter spectramulti
  Passis.SizeAppropriate() Size is not needed if all elements are 1.; Got: size = [10,2] for parameter spectramulti
  Passis.CadenceValid() Expect cadence to be a valid ISO8601 duration; Got: PT1S
  Passis.CadenceOK() Expect (sampleStopDate-sampleStartDate)/cadence > 10; Got: (sampleStartDate-sampleStopDate)/cadence = 11

http://hapi-server.org/servers/TestData/hapi/info?id=dataset1&parameters=scalar
  Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
  Passis.ContentType() Expect HTTP Content-Type to match /^application\/json/; Got: application/json; charset=utf-8
  Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
  Passis.HAPIJSON() Expect body to be valid info schema; Got: is valid
  Pass: Expect # parameters in JSON to be 2 when one non-time parameter is requested; Got: 2 parameters.
  Pass: Expect info response for one parameter to match content in response for all parameters; Got: Match.

  http://hapi-server.org/servers/TestData/hapi/data?id=dataset1&time.min=1970-01-01Z&time.max=1970-01-01T00:00:11Z
    Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
    Passis.FileOK() Expect file to not be empty; Got: 28229 bytes.
    Passis.CompressionAvailable() Expect HTTP Accept-Encoding to match /gzip/. (Note, only compression tested for is gzip.); Got: gzip
    Passis.ContentType() Expect HTTP Content-Type to match /^text\/csv/; Got: text/csv; charset=utf-8
    Passis.CORSAvailable() To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-{Origin,Methods} = {*, GET}; Got: Access-Control-Allow-{Origin,Methods} = {*, GET}
    Passis.FileOK() Expect first character of CSV response to be an integer.; Got: 1
    Passis.FileOK() Expect last character of CSV response be a newline.; Got: A newline.
    Passis.FileOK() Expect last two characters of CSV response to not be newlines.; Got: The characters '2\n'
    Passis.FileOK() Expect at least one newline in CSV response.; Got: 11 newlines
    Passis.FileDataOK() Expect (# of columns in CSV) - (# computed from length and size metadata) = 0.; Got: (185) - (185)

  http://hapi-server.org/servers/TestData/hapi/data?id=dataset1&time.min=1970-001Z&time.max=1970-001T00:00:11Z
    Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
    Passis.FileOK() Expect file to not be empty; Got: 28229 bytes.
    Passis.FileDataOK() Expect data response to be same as previous request given differing request URLs. (Checks byte equivalence not content equivalence.); Got: Match

  http://hapi-server.org/servers/TestData/hapi/data?id=dataset1&time.min=1970-01-01Z&time.max=1970-01-01T00:00:11Z&include=header
    Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
    Passis.FileOK() Expect file to not be empty; Got: 28229 bytes.
    Passis.JSONparsable() Expect JSON.parse(response) to not throw error; Got: no error
    Passis.FormatInHeader() Header in csv response should have 'format: csv' specified.; Got: Format of 'csv' specified.
    Passis.HeaderSame() Expect header in info response to match header in data response when 'include=header' requested.; Got: Matching headers.
    Passis.FileDataOK() Expect data response to be same as previous request given differing request URLs. (Checks byte equivalence not content equivalence.); Got: Match

  http://hapi-server.org/servers/TestData/hapi/data?id=dataset1&parameters=scalar&time.min=1970-01-01Z&time.max=1970-01-01T00:00:11Z
    Passis.HTTP200() Expect HTTP status code to be 200; Got: HTTP status 200
    Passis.FileOK() Expect file to not be empty; Got: 436 bytes.
    Passis.CompressionAvailable() Expect HTTP Accept-Encoding to match /gzip/. (Note, only compression tested for is gzip.); Got: gzip
    Passis.ContentType() Expect HTTP Content-Type to match /^text\/csv/; Got: text/csv; charset=utf-8
    Passis.CORSAvailable() To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-{Origin,Methods} = {*, GET}; Got: Access-Control-Allow-{Origin,Methods} = {*, GET}
    Passis.FileOK() Expect first character of CSV response to be an integer.; Got: 1
    Passis.FileOK() Expect last character of CSV response be a newline.; Got: A newline.
    Passis.FileOK() Expect last two characters of CSV response to not be newlines.; Got: The characters '6\n'
    Passis.FileOK() Expect at least one newline in CSV response.; Got: 11 newlines
    Passis.CorrectLength() Expect (trimmed length of Time string parameter in CSV) - (parameters.Time.length) = 0.; Got: (24) - (24)
    Passis.HAPITime() Expect time column to contain valid HAPI time strings.; Got: Valid HAPI Time format
    Passis.TimeIncreasing() Expect Monotonically increasing time in CSV; Got: Monotonically increasing time in CSV
    Passis.TimeInBounds() Expect first time in CSV >= 1970-01-01 and last time in CSV < 1970-01-01T00:00:11 (only checks to ms); Got: First time = 1970-01-01T00:00:00.000; LastTime = 1970-01-01T00:00:09.000
    Passis.Float() Expect Math.abs(parseFloat('0')) < 1.7976931348623157e+308 && /^[-+]?[0-9]*.?[0-9]+([eE][-+]?[0-9]{1,3})?$/.test('0'.trim()) == true in column 1 on first line.; Got: /^-?d*(.d+)?$/.test('0'.trim()) = true
    Passis.SizeCorrect() Expect number of commas on first line to be 1 because no size given.; Got: 1 commas
    Passis.FileDataOK() Expect (# of columns in CSV) - (# computed from length and size metadata) = 0.; Got: (2) - (2)

End of validation tests.

Summary: Passes: 120. Warnings: 1. Failures: 0.Warnings and failures repeated below.


http://hapi-server.org/servers/TestData/hapi/info?id=a_test_of_an_invalid_id_by_verifier-nodejs
  Warn: is.ErrorInformative() Want HTTP header status message to match 'HAPI 1406'. (Explanation.); Got: 'HAPI error 1406: unknown dataset id'


Use the following links for visual checks of data and stress testing server.

http://hapi-server.org/plot?server=http://hapi-server.org/servers/TestData/hapi&id=dataset1&format=gallery