Skip to content

Commit bd0c60f

Browse files
committed
integration test, corrected failures
1 parent f3dd013 commit bd0c60f

File tree

5 files changed

+131
-4
lines changed

5 files changed

+131
-4
lines changed

core/src/main/java/com/bc/fiduceo/reader/insitu/ndbc/NdbcReader.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.bc.fiduceo.core.Interval;
44
import com.bc.fiduceo.reader.Reader;
5+
import com.bc.fiduceo.reader.netcdf.StringVariable;
56
import com.bc.fiduceo.util.NetCDFUtils;
67
import com.bc.fiduceo.util.VariableProxy;
78
import org.esa.snap.core.util.io.FileUtils;
@@ -113,7 +114,7 @@ static byte toByte(MeasurementType measurementType) {
113114

114115
static void createBasicStationVariables(ArrayList<Variable> variables, List<Attribute> attributes) {
115116
attributes.add(new Attribute(CF_LONG_NAME, "Station identifier"));
116-
variables.add(new VariableProxy(STATION_ID, DataType.STRING, attributes));
117+
variables.add(new StringVariable(new VariableProxy(STATION_ID, DataType.STRING, attributes), 6));
117118

118119
attributes = new ArrayList<>();
119120
attributes.add(new Attribute(CF_LONG_NAME, "Station type. 0: OCEAN_BUOY, 1: COAST_BUOY, 2: LAKE_BUOY, 3: OCEAN_STATION, 4: COAST_STATION, 5: LAKE_STATION"));

core/src/main/java/com/bc/fiduceo/reader/netcdf/StringVariable.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public List<Attribute> getAttributes() {
4545
return attributeList;
4646
}
4747

48+
@Override
49+
public Attribute findAttribute(String name) {
50+
return originalVariable.findAttribute(name);
51+
}
52+
4853
@Override
4954
public Dimension getDimension(int i) {
5055
return new Dimension(originalVariable.getShortName() + "_dim", stringLength);

core/src/test/java/com/bc/fiduceo/TestUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public static void writeSystemConfig(File configDir, File archiveRoot) throws IO
158158
" <rule sensors = \"ANTXXXI-sic-cci, DMISIC0-sic-cci, DTUSIC1-sic-cci\">" +
159159
" insitu/sic-cci/SENSOR/VERSION" +
160160
" </rule>" +
161-
" <rule sensors=\"ndbc-sm-cb\">\n" +
161+
" <rule sensors=\"ndbc-sm-cb, ndbc-sm-cs\">\n" +
162162
" insitu/ndbc/SENSOR/VERSION/YEAR\n" +
163163
" </rule>" +
164164
" </archive>" +

matchup-tool/src/main/java/com/bc/fiduceo/matchup/writer/StringWritingIOVariable.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,15 @@ public StringWritingIOVariable(ReaderContainer readerContainer, int stringLength
2424
public void writeData(int centerX, int centerY, Interval interval, int zIndex) throws IOException, InvalidRangeException {
2525
final Reader reader = readerContainer.getReader();
2626
final Array array = reader.readRaw(centerX, centerY, interval, sourceVariableName);
27-
final char[] stringChars = (char[]) array.get1DJavaArray(DataType.CHAR);
28-
target.write(new String(stringChars), targetVariableName, zIndex);
27+
if (DataType.CHAR == array.getDataType()) {
28+
final char[] stringChars = (char[]) array.get1DJavaArray(DataType.CHAR);
29+
target.write(new String(stringChars), targetVariableName, zIndex);
30+
} else if (DataType.STRING == array.getDataType()) {
31+
final String stringValue = (String) array.getObject(0);
32+
target.write(stringValue, targetVariableName, zIndex);
33+
} else {
34+
throw new IllegalStateException("Not a string data type");
35+
}
2936
}
3037

3138
@Override
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package com.bc.fiduceo.matchup;
2+
3+
import com.bc.fiduceo.FiduceoConstants;
4+
import com.bc.fiduceo.NCTestUtils;
5+
import com.bc.fiduceo.TestUtil;
6+
import com.bc.fiduceo.core.SatelliteObservation;
7+
import com.bc.fiduceo.core.Sensor;
8+
import com.bc.fiduceo.core.UseCaseConfig;
9+
import com.bc.fiduceo.db.DbAndIOTestRunner;
10+
import com.bc.fiduceo.util.NetCDFUtils;
11+
import org.apache.commons.cli.ParseException;
12+
import org.junit.Test;
13+
import org.junit.runner.RunWith;
14+
import ucar.ma2.InvalidRangeException;
15+
import ucar.nc2.NetcdfFile;
16+
17+
import java.io.File;
18+
import java.io.IOException;
19+
import java.sql.SQLException;
20+
import java.util.ArrayList;
21+
import java.util.List;
22+
23+
import static org.junit.Assert.assertEquals;
24+
import static org.junit.Assert.assertTrue;
25+
26+
@RunWith(DbAndIOTestRunner.class)
27+
public class MatchupToolIntegrationTest_SMOSL1_ndbc_sm extends AbstractUsecaseIntegrationTest {
28+
29+
@Test
30+
public void testMatchup_ndbc_sm() throws IOException, SQLException, ParseException, InvalidRangeException {
31+
final UseCaseConfig useCaseConfig = createUseCaseConfigBuilder("ndbc-sm-cs")
32+
.withTimeDeltaSeconds(3600, null)
33+
.withMaxPixelDistanceKm(14, null)
34+
.createConfig();
35+
final File useCaseConfigFile = storeUseCaseConfig(useCaseConfig, "usecase-44.xml");
36+
37+
insert_ndbc_sm_cs();
38+
insert_miras_CDF3TA_June();
39+
40+
final String[] args = new String[]{"-c", configDir.getAbsolutePath(), "-u", useCaseConfigFile.getName(), "-start", "2016-156", "-end", "2016-156"};
41+
MatchupToolMain.main(args);
42+
43+
final File mmdFile = getMmdFilePath(useCaseConfig, "2016-156", "2016-156");
44+
assertTrue(mmdFile.isFile());
45+
try (NetcdfFile mmd = NetcdfFile.open(mmdFile.getAbsolutePath())) {
46+
47+
final int matchupCount = NetCDFUtils.getDimensionLength(FiduceoConstants.MATCHUP_COUNT, mmd);
48+
assertEquals(19, matchupCount);
49+
50+
NCTestUtils.assert3DVariable("ndbc-sm-cs_APD", 0, 0, 0, 99.f, mmd);
51+
NCTestUtils.assert3DVariable("ndbc-sm-cs_DEWP", 0, 0, 1, 999.f, mmd);
52+
NCTestUtils.assert3DVariable("ndbc-sm-cs_GST", 0, 0, 2, 7.6f, mmd);
53+
NCTestUtils.assert3DVariable("ndbc-sm-cs_PRES", 0, 0, 3, 1009.4f, mmd);
54+
NCTestUtils.assert3DVariable("ndbc-sm-cs_VIS", 0, 0, 4, 99.f, mmd);
55+
NCTestUtils.assert3DVariable("ndbc-sm-cs_WSPD", 0, 0, 5, 5.5f, mmd);
56+
NCTestUtils.assert3DVariable("ndbc-sm-cs_acquisition_time", 0, 0, 6, 1465042320L, mmd);
57+
NCTestUtils.assert3DVariable("ndbc-sm-cs_anemometer_height", 0, 0, 7, 10.f, mmd);
58+
NCTestUtils.assert3DVariable("ndbc-sm-cs_latitude", 0, 0, 8, 27.297f, mmd);
59+
NCTestUtils.assert3DVariable("ndbc-sm-cs_measurement_type", 0, 0, 9, 1, mmd);
60+
NCTestUtils.assert3DVariable("ndbc-sm-cs_sst_depth", 0, 0, 10, Float.NaN, mmd);
61+
NCTestUtils.assert3DVariable("ndbc-sm-cs_station_type", 0, 0, 11, 4, mmd);
62+
63+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Azimuth_Angle_175", 0, 0, 12, -32768, mmd);
64+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_BT_3_125", 1, 0, 13, -32768, mmd);
65+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_BT_4_175", 2, 0, 14, -32768, mmd);
66+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_BT_H_425", 0, 1, 15, 2595, mmd);
67+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Days_175", 1, 1, 16, -2147483647, mmd);
68+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Eta_325", 2, 1, 17, -7254, mmd);
69+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Footprint_Axis2_125", 0, 2, 18, -32768, mmd);
70+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Incidence_Angle_400", 1, 2, 0, -3429, mmd);
71+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Nb_RFI_Flags_425", 2, 2, 1, 0, mmd);
72+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Nviews_575", 0, 0, 2, 19, mmd);
73+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Pixel_BT_Standard_Deviation_H_075", 1, 0, 3, -32768, mmd);
74+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Pixel_BT_Standard_Deviation_V_525", 2, 0, 4, -28050, mmd);
75+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Pixel_Radiometric_Accuracy_H_025", 0, 1, 5, -32768, mmd);
76+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_UTC_Microseconds_400", 1, 1, 6, 976345, mmd);
77+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_Xi_400", 2, 1, 7, -32768, mmd);
78+
NCTestUtils.assert3DVariable("miras-smos-CDF3TA_lat", 0, 2, 8, 27.611055374145508, mmd);
79+
}
80+
}
81+
82+
private void insert_ndbc_sm_cs() throws IOException, SQLException {
83+
final String sensorKey = "ndbc-sm-cs";
84+
final String relativeArchivePath = TestUtil.assembleFileSystemPath(new String[]{"insitu", "ndbc", sensorKey, "v1", "2016", "babt2h2016.txt"}, true);
85+
86+
final SatelliteObservation satelliteObservation = readSatelliteObservation(sensorKey, relativeArchivePath, "v1");
87+
storage.insert(satelliteObservation);
88+
}
89+
90+
private void insert_miras_CDF3TA_June() throws IOException, SQLException {
91+
final String sensorKey = "miras-smos-CDF3TA";
92+
final String relativeArchivePath = TestUtil.assembleFileSystemPath(new String[]{sensorKey, "re07", "2016", "156", "SM_RE07_MIR_CDF3TA_20160604T000000_20160604T235959_330_001_7.tgz"}, true);
93+
94+
final SatelliteObservation satelliteObservation = readSatelliteObservation(sensorKey, relativeArchivePath, "re07");
95+
storage.insert(satelliteObservation);
96+
}
97+
98+
private MatchupToolTestUseCaseConfigBuilder createUseCaseConfigBuilder(String sicSensor) {
99+
final List<Sensor> sensorList = new ArrayList<>();
100+
final Sensor primary = new Sensor(sicSensor);
101+
primary.setPrimary(true);
102+
sensorList.add(primary);
103+
sensorList.add(new Sensor("miras-smos-CDF3TA"));
104+
105+
final List<com.bc.fiduceo.core.Dimension> dimensions = new ArrayList<>();
106+
dimensions.add(new com.bc.fiduceo.core.Dimension(sicSensor, 1, 1));
107+
dimensions.add(new com.bc.fiduceo.core.Dimension("miras-smos-CDF3TA", 3, 3));
108+
109+
return (MatchupToolTestUseCaseConfigBuilder) new MatchupToolTestUseCaseConfigBuilder("mmd44")
110+
.withSensors(sensorList)
111+
.withOutputPath(new File(TestUtil.getTestDir().getPath(), "usecase-44").getPath())
112+
.withDimensions(dimensions);
113+
}
114+
}

0 commit comments

Comments
 (0)