PMTiles icon indicating copy to clipboard operation
PMTiles copied to clipboard

Test data suit

Open nyurik opened this issue 2 years ago • 4 comments

It seems both Rust implementations of pmtiles got the spec wrong - based on my testing of pmtiles and pmtiles2 crates. I think the reason for that is that they both had to come up with their own test cases - thus obviously failing :)

In order to have the same behavior for all pmtiles implementations, we desperately need a standard set of test files that all implementations must pass (reminds me of the ACID browser tests.... memories...)

Anyway, could you standardize the tests by:

  • consolidate all test data files in the https://github.com/protomaps/PMTiles/tree/main/js/test/data - or else it is unclear if they are the same or not? (I see some files in the /js dir)
  • create a readme in that same dir that points to the specific test code in one of the implementations (no point of describing the tests in the markdown, as i am sure it will quickly out of sync with the actual unit tests)

The reason for all this is that Martin tile server has received a great bug report https://github.com/maplibre/martin/issues/675 (thx @tobinbradley !) that highlights a bug, but I have no good way of converting that 200MB file into a useful pmtiles test file - so was hoping to find a test fixture here :)

Once again, thanks @bdon !

nyurik avatar May 25 '23 03:05 nyurik

A lot of the low-level logic might fit unit tests better by standardizing the test cases used in this file:

https://github.com/protomaps/PMTiles/blob/main/js/test/v3.test.ts#L126

Because a directory is a flat list of elements we could potentially store it as a CSV file that each test suit reads for its data+assertions.

But yeah, I need to add at least one more complex integration testing file that has > 1 directory depth, which might be the root cause of the linked problem. While > 2 depth archives are allowed by the spec AFAIK there aren't any writers that make these (and I have yet to discover a realistic use case)

bdon avatar May 25 '23 07:05 bdon

yeah, perhaps we should have a simple utility to encode arbitrary complex JSON/YAML into protobuf, where the actual tile content is just a few bytes long. This way we can set up a yaml like this:

metadata:
  field: value
  field2: value2

dir:
  tiles:
    "0/0/0": "1"
    "0/0/1": "1"

(i am actually not certain about the dir/tiles structure - basically we need anything that would allow simple encoding of a tile by specifying its zxy coords plus content or same value as something else)

nyurik avatar May 25 '23 18:05 nyurik