planetiler/planetiler-core/src/test/java/com/onthegomap/planetiler/util/CompareArchivesTest.java

92 wiersze
3.4 KiB
Java

package com.onthegomap.planetiler.util;
import static org.junit.jupiter.api.Assertions.assertEquals;
import com.onthegomap.planetiler.Profile;
import com.onthegomap.planetiler.archive.TileArchiveConfig;
import com.onthegomap.planetiler.archive.TileArchiveMetadata;
import com.onthegomap.planetiler.archive.TileEncodingResult;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.TileOrder;
import com.onthegomap.planetiler.pmtiles.WriteablePmtiles;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Map;
import java.util.OptionalLong;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import vector_tile.VectorTileProto;
class CompareArchivesTest {
@TempDir
Path path;
PlanetilerConfig config = PlanetilerConfig.defaults();
byte[] tile1 = VectorTileProto.Tile.newBuilder().addLayers(
VectorTileProto.Tile.Layer.newBuilder()
.setVersion(2)
.setName("layer1")
.addKeys("key1")
.addValues(VectorTileProto.Tile.Value.newBuilder().setStringValue("value1"))
.addFeatures(VectorTileProto.Tile.Feature.newBuilder().setId(1)))
.build()
.toByteArray();
byte[] tile2 = VectorTileProto.Tile.newBuilder().addLayers(
VectorTileProto.Tile.Layer.newBuilder()
.setVersion(2)
.setName("layer1")
.addKeys("key1")
.addValues(VectorTileProto.Tile.Value.newBuilder().setStringValue("value2"))
.addFeatures(VectorTileProto.Tile.Feature.newBuilder().setId(2)))
.build()
.toByteArray();
@Test
void testCompareArchives() throws IOException {
var aPath = path.resolve("a.pmtiles");
var bPath = path.resolve("b.pmtiles");
try (
var a = WriteablePmtiles.newWriteToFile(aPath);
var b = WriteablePmtiles.newWriteToFile(bPath);
) {
a.initialize();
b.initialize();
try (
var aWriter = a.newTileWriter();
var bWriter = b.newTileWriter()
) {
aWriter
.write(new TileEncodingResult(TileOrder.HILBERT.decode(0), new byte[]{0xa, 0x2}, OptionalLong.empty()));
aWriter
.write(new TileEncodingResult(TileOrder.HILBERT.decode(2), Gzip.gzip(tile1), OptionalLong.empty()));
aWriter
.write(new TileEncodingResult(TileOrder.HILBERT.decode(4), new byte[]{0xa, 0x2}, OptionalLong.empty()));
bWriter.write(new TileEncodingResult(TileOrder.HILBERT.decode(1), new byte[]{0xa, 0x2}, OptionalLong.empty()));
bWriter.write(new TileEncodingResult(TileOrder.HILBERT.decode(2), Gzip.gzip(tile2), OptionalLong.empty()));
bWriter.write(new TileEncodingResult(TileOrder.HILBERT.decode(3), new byte[]{0xa, 0x2}, OptionalLong.empty()));
bWriter
.write(new TileEncodingResult(TileOrder.HILBERT.decode(4), new byte[]{0xa, 0x2}, OptionalLong.empty()));
}
a.finish(new TileArchiveMetadata(new Profile.NullProfile(), config));
b.finish(new TileArchiveMetadata(new Profile.NullProfile(), config));
}
var result = CompareArchives.compare(
TileArchiveConfig.from(aPath.toString()),
TileArchiveConfig.from(bPath.toString()),
config
);
assertEquals(new CompareArchives.Result(
5, 4, Map.of(
"archive 2 missing tile", 1L,
"archive 1 missing tile", 2L,
"different contents", 1L
), Map.of(
"layer1", Map.of(
"values list unique values", 1L,
"feature ids", 1L
)
)
), result);
}
}