http://hapi-server.org/servers/TestData2.0/hapi/capabilities
  is.RequestError(): Expect no request error for timeout of 1000 ms used when request is for metadata.
Got: No error. Timing info [ms]: {"socket":"0.4","lookup":"5.1","connect":"6.2","response":"10.9","end":"11.1"}, {"wait":"0.4","dns":"4.6","tcp":"1.1","firstByte":"4.7","download":"0.2","total":"11.1"}
  is.ContentType(): Expect HTTP Content-Type to match /^application\/json/
Got: application/json; charset=utf-8
  is.CORSAvailable(): To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-Origin = '*' and, if given, Access-Control-Allow-Methods to include 'GET'
Got: Access-Control-Allow-Origin = '*' and, Access-Control-Allow-Methods 'GET'
  is.HTTP200(): Expect HTTP status code to be 200
Got: HTTP status code 200
  is.JSONParsable(): Expect JSON.parse(response) to not throw error
Got: no error
  is.HAPIVersion(): Expect HAPI version in JSON response to be one of ["1.1","2.0","2.1","3.0","3.1"]
Got: 2.0
  is.HAPIJSON(): Expect body to be valid HAPI 2.0 capabilities schema.
Got: is valid
  Expect outputFormats to have 'csv'
Got: csv,binary,json

http://hapi-server.org/servers/TestData2.0/hapi/catalog
  is.RequestError(): Expect no request error for timeout of 1000 ms used when request is for metadata.
Got: No error. Timing info [ms]: {"socket":"0.4","lookup":"1.1","connect":"2.3","response":"5.8","end":"6.0"}, {"wait":"0.4","dns":"0.8","tcp":"1.2","firstByte":"3.5","download":"0.2","total":"6.0"}
  is.ContentType(): Expect HTTP Content-Type to match /^application\/json/
Got: application/json; charset=utf-8
  is.CORSAvailable(): To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-Origin = '*' and, if given, Access-Control-Allow-Methods to include 'GET'
Got: Access-Control-Allow-Origin = '*' and, Access-Control-Allow-Methods 'GET'
  is.HTTP200(): Expect HTTP status code to be 200
Got: HTTP status code 200
  is.JSONParsable(): Expect JSON.parse(response) to not throw error
Got: no error
  is.HAPIVersionSame(): Expect HAPI version to match that from last requests where found.
Got: Current: '2.0' and Last: '2.0'
  is.HAPIVersion(): Expect HAPI version in JSON response to be one of ["1.1","2.0","2.1","3.0","3.1"]
Got: 2.0
  is.HAPIJSON(): Expect body to be valid HAPI 2.0 catalog schema.
Got: is valid
  is.Unique(): Expect all 'id' values in objects in datasets array to be unique
Got: All unique.
is.TooLong(): Prefer titles in objects to be <= 40 characters
Got: catalog has 2 datasets with a title > 40 characters:

id: 'dataset2'; title: 'Dataset w/valid HAPI 2.0 - Same as dataset1 but at PT1H resolution'
id: 'dataset3'; title: 'Dataset w/valid HAPI 2.0 - Same as dataset1 but at P1D resolution'
  is.CIdentifier(): Prefer dataset id to match c identifier regex '[_a-zA-Z][_a-zA-Z0-9]{1,30}'.
Got: All dataset id(s) match.

http://hapi-server.org/servers/TestData2.0/hapi/info?id=dataset1
  👁 :Visually check data and test performance
  is.RequestError(): Expect no request error for timeout of 1000 ms used when request is for metadata.
Got: No error. Timing info [ms]: {"socket":"0.8","lookup":"1.1","connect":"2.5","response":"8.2","end":"8.4"}, {"wait":"0.8","dns":"0.3","tcp":"1.4","firstByte":"5.7","download":"0.2","total":"8.4"}
  is.HTTP200(): Expect HTTP status code to be 200
Got: HTTP status code 200
  is.ContentType(): Expect HTTP Content-Type to match /^application\/json/
Got: application/json; charset=utf-8
  is.JSONParsable(): Expect JSON.parse(response) to not throw error
Got: no error
  is.HAPIVersionSame(): Expect HAPI version to match that from last requests where found.
Got: Current: '2.0' and Last: '2.0'
  is.HAPIVersion(): Expect HAPI version in JSON response to be one of ["1.1","2.0","2.1","3.0","3.1"]
Got: 2.0
  is.HAPIJSON(): Expect body to be valid HAPI 2.0 info schema.
Got: is valid
  is.Unique(): Expect all 'name' values in objects in parameters array to be unique
Got: All unique.
  is.FormatInHeader(): /info response should not have 'format' specified.
Got: No format given.
  is.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
  is.FirstParameterOK(): First parameter must have a fill of null or it should not be specified.
Got: null
  is.TimeIncreasing(): Expect info.startDate < info.stopDate
Got: startDate = 1970-01-01T00Z; stopDate = 2016-12-31T00Z
  is.TimeIncreasing(): Expect info.sampleStartDate < info.sampleStopDate
Got: sampleStartDate = 1970-01-01T00Z; sampleStopDate = 1970-01-01T00:00:11Z
  is.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.
  is.LengthAppropriate(): Length may only be given for types string and isotime
Got: Type = double and length = undefined for parameter scalar
  is.CadenceGiven(): Expect the nominal cadence to be given (see the HAPI spec for definition). A nominal cadence is useful for clients and obviates the need for it to be inferred programatically.
Got: PT1S
  is.CadenceOK(): Expect (sampleStopDate-sampleStartDate)/cadence > 10
Got: (sampleStartDate-sampleStopDate)/cadence = 11

http://hapi-server.org/servers/TestData2.0/hapi/data?id=dataset1&time.min=1970-01-01Z&time.max=1970-01-01T00:00:11Z
  is.RequestError(): Expect no request error for timeout of 5000 ms used when time.min/max not given to validator but sampleStart/Stop is given in /info response.
Got: No error. Timing info [ms]: {"socket":"0.4","lookup":"1.0","connect":"2.1","response":"101.3","end":"144.7"}, {"wait":"0.4","dns":"0.5","tcp":"1.1","firstByte":"99.3","download":"43.3","total":"144.7"}
  is.HTTP200(): Expect HTTP status code to be 200
Got: HTTP status code 200
  is.FileStructureOK(): Expect nonzero length for data part of response.
Got: 25181 bytes.
  is.CompressionAvailable(): Expect HTTP Accept-Encoding to match /gzip/. (Note, only compression tested for is gzip.)
Got: gzip
  is.ContentType(): Expect HTTP Content-Type to match /^text\/csv/
Got: text/csv; charset=utf-8
  is.CORSAvailable(): To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-Origin = '*' and, if given, Access-Control-Allow-Methods to include 'GET'
Got: Access-Control-Allow-Origin = '*' and, Access-Control-Allow-Methods 'GET'
  is.FileStructureOK(): Expect first character of CSV response to be an integer.
Got: 1
  is.FileStructureOK(): Expect last character of CSV response be a newline.
Got: A newline.
  is.FileStructureOK(): Expect last two characters of CSV response to not be newlines.
Got: The characters '2\n'
  is.FileStructureOK(): Expect at least one newline in CSV response.
Got: 11 newlines
  is.FileLineOK(): Expect (# of columns in CSV) - (# computed from length and size metadata) = 0.
Got: (185) - (185)

http://hapi-server.org/servers/TestData2.0/hapi/data?id=dataset1&parameters=scalar&time.min=1970-01-01Z&time.max=1970-01-01T00:00:11Z
    Direct link for following plot.. Please report any plotting issues at the Python hapiplot GitHub page.

  is.RequestError(): Expect no request error for timeout of 5000 ms used when time.min/max not given to validator but sampleStart/Stop is given in /info response.
Got: No error. Timing info [ms]: {"socket":"0.4","lookup":"1.2","connect":"2.6","response":"75.3","end":"78.9"}, {"wait":"0.4","dns":"0.8","tcp":"1.4","firstByte":"72.7","download":"3.5","total":"78.9"}
  is.HTTP200(): Expect HTTP status code to be 200
Got: HTTP status code 200
  is.FileStructureOK(): Expect nonzero length for data part of response.
Got: 436 bytes.
  is.CompressionAvailable(): Expect HTTP Accept-Encoding to match /gzip/. (Note, only compression tested for is gzip.)
Got: gzip
  is.ContentType(): Expect HTTP Content-Type to match /^text\/csv/
Got: text/csv; charset=utf-8
  is.CORSAvailable(): To enable AJAX clients, want CORS HTTP Headers: Access-Control-Allow-Origin = '*' and, if given, Access-Control-Allow-Methods to include 'GET'
Got: Access-Control-Allow-Origin = '*' and, Access-Control-Allow-Methods 'GET'
  is.FileStructureOK(): Expect first character of CSV response to be an integer.
Got: 1
  is.FileStructureOK(): Expect last character of CSV response be a newline.
Got: A newline.
  is.FileStructureOK(): Expect last two characters of CSV response to not be newlines.
Got: The characters '6\n'
  is.FileStructureOK(): Expect at least one newline in CSV response.
Got: 11 newlines
  is.CorrectLength(): Expect (trimmed length of Time string parameter in CSV) - (parameters.Time.length) = 0.
Got: (24) - (24)
  is.HAPIVersionSame(): Expect HAPI version to match that from last requests where found.
Got: Current: '2.0' and Last: '2.0'
  is.HAPIVersion(): Expect HAPI version in JSON response to be one of ["1.1","2.0","2.1","3.0","3.1"]
Got: 2.0
  is.HAPITime(): Expect time column to contain valid HAPI 2.0 HAPITime strings
Got: Valid HAPI Time strings
  is.TimeIncreasing(): Expect Monotonically increasing time in CSV
Got: Monotonically increasing time in CSV
  is.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
  is.FileLineOK(): Expect (# of columns in CSV) - (# computed from length and size metadata) = 0.
Got: (2) - (2)
  is.FileContentSame(): : Expect content from one parameter request to match content from all parameter request.
Got: Match

End of validation tests.

Summary: Pass: 64. Warns:1. Fails:0.Warnings and failures repeated below.


http://hapi-server.org/servers/TestData2.0/hapi/catalog
  Warn: is.TooLong(): Prefer titles in objects to be <= 40 characters; Got: catalog has 2 datasets with a title > 40 characters:

id: 'dataset2'; title: 'Dataset w/valid HAPI 2.0 - Same as dataset1 but at PT1H resolution'
id: 'dataset3'; title: 'Dataset w/valid HAPI 2.0 - Same as dataset1 but at P1D resolution'



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

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