Skip to content

Commit b73494e

Browse files
committed
test: extend COG export validation
1 parent f07480a commit b73494e

1 file changed

Lines changed: 79 additions & 0 deletions

File tree

core/src/test/java/org/mapfish/print/output/MapCogExportOutputFormatTest.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,15 @@
66

77
import java.io.ByteArrayInputStream;
88
import java.io.ByteArrayOutputStream;
9+
import java.io.File;
10+
import java.nio.file.Files;
911
import java.util.HashMap;
12+
import java.util.Iterator;
1013
import java.util.Map;
14+
import javax.imageio.ImageIO;
15+
import javax.imageio.ImageReader;
16+
import javax.imageio.metadata.IIOMetadata;
17+
import javax.imageio.stream.ImageInputStream;
1118
import org.geotools.api.coverage.grid.GridCoverageReader;
1219
import org.geotools.api.referencing.operation.MathTransform;
1320
import org.geotools.coverage.grid.GridCoverage2D;
@@ -50,6 +57,78 @@ public void testCogExport() throws Exception {
5057

5158
assertTrue(result.length > 0);
5259

60+
final File tempFile = File.createTempFile("mapfish-cog-", ".tif");
61+
tempFile.deleteOnExit();
62+
63+
Files.write(tempFile.toPath(), result);
64+
65+
try (ImageInputStream imageInputStream = ImageIO.createImageInputStream(tempFile)) {
66+
final Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("TIFF");
67+
68+
assertTrue(readers.hasNext());
69+
70+
final ImageReader imageReader = readers.next();
71+
72+
try {
73+
imageReader.setInput(imageInputStream);
74+
75+
assertTrue(imageReader.isImageTiled(0));
76+
assertEquals(512, imageReader.getTileWidth(0));
77+
assertEquals(512, imageReader.getTileHeight(0));
78+
79+
final IIOMetadata metadata = imageReader.getImageMetadata(0);
80+
assertNotNull(metadata);
81+
82+
final String nativeFormatName = metadata.getNativeMetadataFormatName();
83+
assertNotNull(nativeFormatName);
84+
85+
final var root = metadata.getAsTree(nativeFormatName);
86+
87+
final var fields = ((org.w3c.dom.Node) root).getChildNodes();
88+
89+
boolean lzwFound = false;
90+
91+
for (int i = 0; i < fields.getLength(); i++) {
92+
final org.w3c.dom.Node node = fields.item(i);
93+
94+
if ("TIFFIFD".equals(node.getNodeName())) {
95+
final var children = node.getChildNodes();
96+
97+
for (int j = 0; j < children.getLength(); j++) {
98+
final org.w3c.dom.Node field = children.item(j);
99+
100+
if ("TIFFField".equals(field.getNodeName())
101+
&& field.getAttributes() != null
102+
&& field.getAttributes().getNamedItem("number") != null
103+
&& "259".equals(field.getAttributes().getNamedItem("number").getNodeValue())) {
104+
105+
final var compressionValues = field.getChildNodes();
106+
107+
for (int k = 0; k < compressionValues.getLength(); k++) {
108+
final org.w3c.dom.Node valueContainer = compressionValues.item(k);
109+
final var values = valueContainer.getChildNodes();
110+
111+
for (int l = 0; l < values.getLength(); l++) {
112+
final org.w3c.dom.Node value = values.item(l);
113+
114+
if (value.getAttributes() != null
115+
&& value.getAttributes().getNamedItem("value") != null
116+
&& "5".equals(value.getAttributes().getNamedItem("value").getNodeValue())) {
117+
lzwFound = true;
118+
}
119+
}
120+
}
121+
}
122+
}
123+
}
124+
}
125+
126+
assertTrue(lzwFound);
127+
} finally {
128+
imageReader.dispose();
129+
}
130+
}
131+
53132
final GeoTiffFormat geoTiffFormat = new GeoTiffFormat();
54133
final GridCoverageReader reader = geoTiffFormat.getReader(new ByteArrayInputStream(result));
55134

0 commit comments

Comments
 (0)