Skip ONLY NetCDF tests when netcdf driver is not available

Commit 695b5bbe resulted in more tests being skipped
This commit is contained in:
Sandro Santilli 2022-06-08 12:30:56 +02:00
parent 695b5bbe37
commit 7ea8f173b4

View File

@ -65,12 +65,15 @@ class TestQgsGdalProvider : public QObject
void scale0(); //test when data has scale 0 (#20493) void scale0(); //test when data has scale 0 (#20493)
void transformCoordinates(); void transformCoordinates();
void testGdalProviderQuerySublayers(); void testGdalProviderQuerySublayers();
void testGdalProviderQuerySublayers_NetCDF();
void testGdalProviderQuerySublayersFastScan(); void testGdalProviderQuerySublayersFastScan();
void testGdalProviderQuerySublayersFastScan_NetCDF();
private: private:
QString mTestDataDir; QString mTestDataDir;
QString mReport; QString mReport;
bool mSupportsNetCDF; bool mSupportsNetCDF;
QgsProviderMetadata *mGdalMetadata;
}; };
@ -84,7 +87,9 @@ void TestQgsGdalProvider::initTestCase()
mTestDataDir = QStringLiteral( TEST_DATA_DIR ) + '/'; //defined in CmakeLists.txt mTestDataDir = QStringLiteral( TEST_DATA_DIR ) + '/'; //defined in CmakeLists.txt
mReport = QStringLiteral( "<h1>GDAL Provider Tests</h1>\n" ); mReport = QStringLiteral( "<h1>GDAL Provider Tests</h1>\n" );
mSupportsNetCDF = GDALGetDriverByName( "netcdf" ) != NULL; mGdalMetadata = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "gdal" ) );
mSupportsNetCDF = static_cast< bool >( GDALGetDriverByName( "netcdf" ) );
} }
@ -486,57 +491,6 @@ void TestQgsGdalProvider::testGdalProviderQuerySublayers()
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) ); rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) );
QVERIFY( rl->isValid() ); QVERIFY( rl->isValid() );
if ( mSupportsNetCDF )
{
// netcdf file
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc" );
QCOMPARE( res.count(), 8 );
QCOMPARE( res.at( 0 ).layerNumber(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "cell_node" ) );
QCOMPARE( res.at( 0 ).description(), QStringLiteral( "[320x4] cell_node (32-bit integer)" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":cell_node" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 0 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 0 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
QCOMPARE( res.at( 1 ).layerNumber(), 2 );
QCOMPARE( res.at( 1 ).name(), QStringLiteral( "layerface_Z" ) );
QCOMPARE( res.at( 1 ).description(), QStringLiteral( "[37x3520] layerface_Z (32-bit floating-point)" ) );
QCOMPARE( res.at( 1 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":layerface_Z" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 1 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 1 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 1 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
// netcdf with open options
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES" );
QCOMPARE( res.count(), 8 );
QCOMPARE( res.at( 0 ).layerNumber(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "cell_node" ) );
QCOMPARE( res.at( 0 ).description(), QStringLiteral( "[320x4] cell_node (32-bit integer)" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":cell_node|option:HONOUR_VALID_RANGE=YES" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 0 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 0 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
QCOMPARE( res.at( 1 ).layerNumber(), 2 );
QCOMPARE( res.at( 1 ).name(), QStringLiteral( "layerface_Z" ) );
QCOMPARE( res.at( 1 ).description(), QStringLiteral( "[37x3520] layerface_Z (32-bit floating-point)" ) );
QCOMPARE( res.at( 1 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":layerface_Z|option:HONOUR_VALID_RANGE=YES" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 1 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 1 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 1 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
}
else
{
QSKIP( "NetCDF based tests require the netcdf GDAL driver" );
}
// aigrid file // aigrid file
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/aigrid" ); res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/aigrid" );
QCOMPARE( res.count(), 1 ); QCOMPARE( res.count(), 1 );
@ -566,14 +520,15 @@ void TestQgsGdalProvider::testGdalProviderQuerySublayers()
// zip archive, only 1 file // zip archive, only 1 file
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/zip/landsat_b1.zip" ); res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/zip/landsat_b1.zip" );
QCOMPARE( res.count(), 1 ); QCOMPARE( res.count(), 1 );
QCOMPARE( res.at( 0 ).layerNumber(), 1 ); const QgsProviderSublayerDetails &sl = res.at( 0 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "landsat_b1.tif" ) ); QCOMPARE( sl.layerNumber(), 1 );
QCOMPARE( res.at( 0 ).description(), QString() ); QCOMPARE( sl.name(), QStringLiteral( "landsat_b1.tif" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( "/vsizip/%1/zip/landsat_b1.zip/landsat_b1.tif" ).arg( QStringLiteral( TEST_DATA_DIR ) ) ); QCOMPARE( sl.description(), QString() );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) ); QCOMPARE( sl.uri(), QStringLiteral( "/vsizip/%1/zip/landsat_b1.zip/landsat_b1.tif" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer ); QCOMPARE( sl.providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).driverName(), QStringLiteral( "GTiff" ) ); QCOMPARE( sl.type(), QgsMapLayerType::RasterLayer );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 0 ).toLayer( options ) ) ); QCOMPARE( sl.driverName(), QStringLiteral( "GTiff" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( sl.toLayer( options ) ) );
QVERIFY( rl->isValid() ); QVERIFY( rl->isValid() );
// multi-layer archive // multi-layer archive
@ -653,6 +608,62 @@ void TestQgsGdalProvider::testGdalProviderQuerySublayers()
QVERIFY( rl->isValid() ); QVERIFY( rl->isValid() );
} }
void TestQgsGdalProvider::testGdalProviderQuerySublayers_NetCDF()
{
if ( ! mSupportsNetCDF )
{
QSKIP( "NetCDF based tests require the netcdf GDAL driver" );
}
QList< QgsProviderSublayerDetails > res;
std::unique_ptr< QgsRasterLayer > rl;
const QgsProviderSublayerDetails::LayerOptions options{ QgsCoordinateTransformContext() };
// netcdf file
res = mGdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc" );
QCOMPARE( res.count(), 8 );
QCOMPARE( res.at( 0 ).layerNumber(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "cell_node" ) );
QCOMPARE( res.at( 0 ).description(), QStringLiteral( "[320x4] cell_node (32-bit integer)" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":cell_node" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 0 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 0 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
QCOMPARE( res.at( 1 ).layerNumber(), 2 );
QCOMPARE( res.at( 1 ).name(), QStringLiteral( "layerface_Z" ) );
QCOMPARE( res.at( 1 ).description(), QStringLiteral( "[37x3520] layerface_Z (32-bit floating-point)" ) );
QCOMPARE( res.at( 1 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":layerface_Z" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 1 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 1 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 1 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
// netcdf with open options
res = mGdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES" );
QCOMPARE( res.count(), 8 );
QCOMPARE( res.at( 0 ).layerNumber(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "cell_node" ) );
QCOMPARE( res.at( 0 ).description(), QStringLiteral( "[320x4] cell_node (32-bit integer)" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":cell_node|option:HONOUR_VALID_RANGE=YES" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 0 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 0 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
QCOMPARE( res.at( 1 ).layerNumber(), 2 );
QCOMPARE( res.at( 1 ).name(), QStringLiteral( "layerface_Z" ) );
QCOMPARE( res.at( 1 ).description(), QStringLiteral( "[37x3520] layerface_Z (32-bit floating-point)" ) );
QCOMPARE( res.at( 1 ).uri(), QStringLiteral( "NETCDF:\"%1/mesh/trap_steady_05_3D.nc\":layerface_Z|option:HONOUR_VALID_RANGE=YES" ).arg( QStringLiteral( TEST_DATA_DIR ) ) );
QCOMPARE( res.at( 1 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 1 ).type(), QgsMapLayerType::RasterLayer );
QCOMPARE( res.at( 1 ).driverName(), QStringLiteral( "netCDF" ) );
rl.reset( qgis::down_cast< QgsRasterLayer * >( res.at( 1 ).toLayer( options ) ) );
QVERIFY( rl->isValid() );
}
void TestQgsGdalProvider::testGdalProviderQuerySublayersFastScan() void TestQgsGdalProvider::testGdalProviderQuerySublayersFastScan()
{ {
// test querying sub layers for a mesh layer // test querying sub layers for a mesh layer
@ -688,31 +699,6 @@ void TestQgsGdalProvider::testGdalProviderQuerySublayersFastScan()
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer ); QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QVERIFY( res.at( 0 ).skippedContainerScan() ); QVERIFY( res.at( 0 ).skippedContainerScan() );
if ( mSupportsNetCDF )
{
// netcdf file
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc", Qgis::SublayerQueryFlag::FastScan );
QCOMPARE( res.count(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "trap_steady_05_3D" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc" );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QVERIFY( res.at( 0 ).skippedContainerScan() );
// netcdf with open options
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES", Qgis::SublayerQueryFlag::FastScan );
QCOMPARE( res.count(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "trap_steady_05_3D" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES" );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QVERIFY( res.at( 0 ).skippedContainerScan() );
}
else
{
QSKIP( "NetCDF tests require the netcdf GDAL driver" );
}
// aigrid, pointing to .adf file // aigrid, pointing to .adf file
res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/aigrid/hdr.adf", Qgis::SublayerQueryFlag::FastScan ); res = gdalMetadata->querySublayers( QStringLiteral( TEST_DATA_DIR ) + "/aigrid/hdr.adf", Qgis::SublayerQueryFlag::FastScan );
QCOMPARE( res.count(), 1 ); QCOMPARE( res.count(), 1 );
@ -760,5 +746,41 @@ void TestQgsGdalProvider::testGdalProviderQuerySublayersFastScan()
QCOMPARE( res.count(), 0 ); QCOMPARE( res.count(), 0 );
} }
void TestQgsGdalProvider::testGdalProviderQuerySublayersFastScan_NetCDF()
{
if ( ! mSupportsNetCDF )
{
QSKIP( "NetCDF based tests require the netcdf GDAL driver" );
}
QList< QgsProviderSublayerDetails > res;
std::unique_ptr< QgsRasterLayer > rl;
// netcdf file
res = mGdalMetadata->querySublayers(
QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc",
Qgis::SublayerQueryFlag::FastScan
);
QCOMPARE( res.count(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "trap_steady_05_3D" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc" );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QVERIFY( res.at( 0 ).skippedContainerScan() );
// netcdf with open options
res = mGdalMetadata->querySublayers(
QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES",
Qgis::SublayerQueryFlag::FastScan
);
QCOMPARE( res.count(), 1 );
QCOMPARE( res.at( 0 ).name(), QStringLiteral( "trap_steady_05_3D" ) );
QCOMPARE( res.at( 0 ).uri(), QStringLiteral( TEST_DATA_DIR ) + "/mesh/trap_steady_05_3D.nc|option:HONOUR_VALID_RANGE=YES" );
QCOMPARE( res.at( 0 ).providerKey(), QStringLiteral( "gdal" ) );
QCOMPARE( res.at( 0 ).type(), QgsMapLayerType::RasterLayer );
QVERIFY( res.at( 0 ).skippedContainerScan() );
}
QGSTEST_MAIN( TestQgsGdalProvider ) QGSTEST_MAIN( TestQgsGdalProvider )
#include "testqgsgdalprovider.moc" #include "testqgsgdalprovider.moc"