Skip to content

Commit

Permalink
ISSUE fmidev#80
Browse files Browse the repository at this point in the history
Add bulletin parser tests and test resources for IWXXM 3.0 regular and cancellation message parsing.
  • Loading branch information
patrick-alaspaa committed Jun 3, 2021
1 parent c99d71a commit 7bdad7b
Show file tree
Hide file tree
Showing 3 changed files with 262 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
import fi.fmi.avi.converter.ConversionResult;
import fi.fmi.avi.converter.iwxxm.IWXXMTestConfiguration;
import fi.fmi.avi.converter.iwxxm.conf.IWXXMConverter;
import fi.fmi.avi.model.Aerodrome;
import fi.fmi.avi.model.AviationWeatherMessage;
import fi.fmi.avi.model.GenericAviationWeatherMessage;
import fi.fmi.avi.model.bulletin.GenericMeteorologicalBulletin;

/**
Expand Down Expand Up @@ -68,4 +71,46 @@ public void testParserWithSIGMET() throws Exception {
ConversionHints.EMPTY);
assertEquals(ConversionResult.Status.SUCCESS, result.getStatus());
}

@Test
public void testParserWithIWXXM30() throws Exception {
final Document input = this.getBulletinDocument("iwxxm-30-bulletin.xml");
final ConversionResult<GenericMeteorologicalBulletin> result = this.converter.convertMessage(input, IWXXMConverter.IWXXM30_DOM_TO_GENERIC_BULLETIN_POJO,
ConversionHints.EMPTY);
assertEquals(ConversionResult.Status.SUCCESS, result.getStatus());

GenericAviationWeatherMessage message = result.getConvertedMessage().get().getMessages().get(0);

//check validtime
assertEquals("2012-08-16T00:00Z", message.getValidityTime().get().getStartTime().get().getCompleteTime().get().toString());
assertEquals("2012-08-16T18:00Z", message.getValidityTime().get().getEndTime().get().getCompleteTime().get().toString());

//check aerodrome
Aerodrome aerodrome = message.getTargetAerodrome().get();
assertEquals("YUDO", aerodrome.getDesignator());
assertEquals("DONLON/INTERNATIONAL", aerodrome.getName().get());
assertEquals("YUDO", aerodrome.getLocationIndicatorICAO().get());
assertEquals("DON", aerodrome.getDesignatorIATA().get());
//check status
assertEquals(AviationWeatherMessage.ReportStatus.NORMAL, message.getReportStatus());
}

@Test
public void testParserWithIWXXM30Cancellation() throws Exception {
final Document input = this.getBulletinDocument("iwxxm-30-cancellation-bulletin.xml");
final ConversionResult<GenericMeteorologicalBulletin> result = this.converter.convertMessage(input, IWXXMConverter.IWXXM30_DOM_TO_GENERIC_BULLETIN_POJO,
ConversionHints.EMPTY);
assertEquals(ConversionResult.Status.SUCCESS, result.getStatus());

GenericAviationWeatherMessage message = result.getConvertedMessage().get().getMessages().get(0);
assertEquals("2012-08-16T00:00Z", message.getValidityTime().get().getStartTime().get().getCompleteTime().get().toString());
assertEquals("2012-08-16T18:00Z", message.getValidityTime().get().getEndTime().get().getCompleteTime().get().toString());

Aerodrome aerodrome = message.getTargetAerodrome().get();
assertEquals("YUDO", aerodrome.getDesignator());
assertEquals("DONLON/INTERNATIONAL", aerodrome.getName().get());
assertEquals("YUDO", aerodrome.getLocationIndicatorICAO().get());

assertEquals(AviationWeatherMessage.ReportStatus.AMENDMENT, message.getReportStatus());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<collect:MeteorologicalBulletin xmlns:collect="http://def.wmo.int/collect/2014"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:aixm="http://www.aixm.aero/schema/5.1.1"
xmlns:iwxxm="http://icao.int/iwxxm/3.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
gml:id="bulletin-12345"
xsi:schemaLocation="http://icao.int/iwxxm/3.0 http://schemas.wmo.int/iwxxm/3.0/iwxxm.xsd http://def.wmo.int/collect/2014 http://schemas.wmo.int/collect/1.2/collect.xsd">
<collect:meteorologicalInformation>
<iwxxm:TAF
gml:id="uuid.d6a85870-f32e-4ea8-8502-c7d9be7e0144"
reportStatus="NORMAL"
permissibleUsage="OPERATIONAL">
<iwxxm:issueTime>
<gml:TimeInstant id="uuid.0c02ab83-22e8-4a66-b115-35544e7078f1">
<gml:timePosition>2012-08-15T18:00:00Z</gml:timePosition>
</gml:TimeInstant>
</iwxxm:issueTime>
<iwxxm:aerodrome>
<aixm:AirportHeliport gml:id="uuid.a5a157ad-5b93-443d-a8e6-8324816ccb7e">
<aixm:timeSlice>
<aixm:AirportHeliportTimeSlice gml:id="uuid.9cf64bc2-0aca-452e-a330-9f6ce9f533e4">
<gml:validTime />
<aixm:interpretation>SNAPSHOT</aixm:interpretation>
<aixm:designator>YUDO</aixm:designator>
<aixm:name>DONLON/INTERNATIONAL</aixm:name>
<aixm:locationIndicatorICAO>YUDO</aixm:locationIndicatorICAO>
<aixm:designatorIATA>DON</aixm:designatorIATA>
<aixm:fieldElevation uom="FT">123.45</aixm:fieldElevation>
<aixm:ARP>
<aixm:ElevatedPoint gml:id="uuid.4f5ce1f8-ae4c-4dea-99c7-6bc15ca6b004" srsDimension="2" axisLabels="Lat Long"
srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
<gml:pos>12.34 -12.34</gml:pos>
<aixm:elevation uom="M">12</aixm:elevation>
<aixm:verticalDatum>EGM_96</aixm:verticalDatum>
</aixm:ElevatedPoint>
</aixm:ARP>
</aixm:AirportHeliportTimeSlice>
</aixm:timeSlice>
</aixm:AirportHeliport>
</iwxxm:aerodrome>

<iwxxm:validPeriod>
<gml:TimePeriod id="uuid.ed5d465f-51fb-4ecc-834a-2ee26bb1196f">
<gml:beginPosition>2012-08-16T00:00:00Z</gml:beginPosition>
<gml:endPosition>2012-08-16T18:00:00Z</gml:endPosition>
</gml:TimePeriod>
</iwxxm:validPeriod>

<iwxxm:baseForecast>
<iwxxm:MeteorologicalAerodromeForecast gml:id="uuid.13048235-8f8a-4587-a6be-e8ce99f4525c" cloudAndVisibilityOK="false">
<iwxxm:phenomenonTime xlink:href="#uuid.ed5d465f-51fb-4ecc-834a-2ee26bb1196f"/>
<iwxxm:prevailingVisibility uom="m">9000.0</iwxxm:prevailingVisibility>
<iwxxm:surfaceWind>
<iwxxm:AerodromeSurfaceWindForecast variableWindDirection="false">
<iwxxm:meanWindDirection uom="deg">130.0</iwxxm:meanWindDirection>
<iwxxm:meanWindSpeed uom="m/s">5.0</iwxxm:meanWindSpeed>
</iwxxm:AerodromeSurfaceWindForecast>
</iwxxm:surfaceWind>
<iwxxm:cloud>
<iwxxm:AerodromeCloudForecast gml:id="uuid.cbd88f13-e806-4ab9-857f-b82a66cc2854">
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/BKN"/>
<iwxxm:base uom="[ft_i]">2000.0</iwxxm:base>
</iwxxm:CloudLayer>
</iwxxm:layer>
</iwxxm:AerodromeCloudForecast>
</iwxxm:cloud>
</iwxxm:MeteorologicalAerodromeForecast>
</iwxxm:baseForecast>

<iwxxm:changeForecast>
<iwxxm:MeteorologicalAerodromeForecast gml:id="uuid.fe2635c8-3994-4423-b79f-123593fa2b55" changeIndicator="BECOMING" cloudAndVisibilityOK="false">
<iwxxm:phenomenonTime>
<gml:TimePeriod id="uuid.921ff3f9-e89e-402e-acd1-82c8600f9929">
<gml:beginPosition>2012-08-16T06:00:00Z</gml:beginPosition>
<gml:endPosition>2012-08-16T08:00:00Z</gml:endPosition>
</gml:TimePeriod>
</iwxxm:phenomenonTime>
<iwxxm:cloud>
<iwxxm:AerodromeCloudForecast gml:id="uuid.235edc5d-213f-490b-8fdb-755032480849">
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/SCT"/>
<iwxxm:base uom="[ft_i]">1500.0</iwxxm:base>
<iwxxm:cloudType xlink:href="http://codes.wmo.int/49-2/SigConvectiveCloudType/CB"/>
</iwxxm:CloudLayer>
</iwxxm:layer>
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/BKN"/>
<iwxxm:base uom="[ft_i]">2000.0</iwxxm:base>
</iwxxm:CloudLayer>
</iwxxm:layer>
</iwxxm:AerodromeCloudForecast>
</iwxxm:cloud>
</iwxxm:MeteorologicalAerodromeForecast>
</iwxxm:changeForecast>

<iwxxm:changeForecast>
<iwxxm:MeteorologicalAerodromeForecast gml:id="uuid.8985ba4e-f6f0-4dc2-8dd7-2cbf86a64056" changeIndicator="TEMPORARY_FLUCTUATIONS" cloudAndVisibilityOK="false">
<iwxxm:phenomenonTime>
<gml:TimePeriod id="uuid.5bdac885-79bf-4ebe-9693-cd0a4b2b91d0">
<gml:beginPosition>2012-08-16T08:00:00Z</gml:beginPosition>
<gml:endPosition>2012-08-16T12:00:00Z</gml:endPosition>
</gml:TimePeriod>
</iwxxm:phenomenonTime>
<iwxxm:prevailingVisibility uom="m">1000.0</iwxxm:prevailingVisibility>
<iwxxm:surfaceWind>
<iwxxm:AerodromeSurfaceWindForecast variableWindDirection="false">
<iwxxm:meanWindDirection uom="deg">170.0</iwxxm:meanWindDirection>
<iwxxm:meanWindSpeed uom="m/s">6.0</iwxxm:meanWindSpeed>
<iwxxm:windGustSpeed uom="m/s">12.0</iwxxm:windGustSpeed>
</iwxxm:AerodromeSurfaceWindForecast>
</iwxxm:surfaceWind>
<iwxxm:weather xlink:href="http://codes.wmo.int/306/4678/TSRA"/>
<iwxxm:cloud>
<iwxxm:AerodromeCloudForecast gml:id="uuid.5d76e06c-220d-4491-83e8-439108891615">
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/SCT"/>
<iwxxm:base uom="[ft_i]">1000.0</iwxxm:base>
<iwxxm:cloudType xlink:href="http://codes.wmo.int/49-2/SigConvectiveCloudType/CB"/>
</iwxxm:CloudLayer>
</iwxxm:layer>
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/BKN"/>
<iwxxm:base uom="[ft_i]">2000.0</iwxxm:base>
</iwxxm:CloudLayer>
</iwxxm:layer>
</iwxxm:AerodromeCloudForecast>
</iwxxm:cloud>
</iwxxm:MeteorologicalAerodromeForecast>
</iwxxm:changeForecast>

<iwxxm:changeForecast>
<iwxxm:MeteorologicalAerodromeForecast gml:id="uuid.aeadfb00-4cfa-46b5-af21-1e79e4b6b1b5" changeIndicator="FROM" cloudAndVisibilityOK="false">
<iwxxm:phenomenonTime>
<gml:TimePeriod id="uuid.06f40788-ea21-471e-8c17-c0ef5b581c98">
<gml:beginPosition>2012-08-16T12:30:00Z</gml:beginPosition>
<gml:endPosition>2012-08-16T18:00:00Z</gml:endPosition>
</gml:TimePeriod>
</iwxxm:phenomenonTime>
<iwxxm:prevailingVisibility uom="m">10000.0</iwxxm:prevailingVisibility>
<iwxxm:prevailingVisibilityOperator>ABOVE</iwxxm:prevailingVisibilityOperator>
<iwxxm:surfaceWind>
<iwxxm:AerodromeSurfaceWindForecast variableWindDirection="false">
<iwxxm:meanWindDirection uom="deg">150.0</iwxxm:meanWindDirection>
<iwxxm:meanWindSpeed uom="m/s">4.0</iwxxm:meanWindSpeed>
</iwxxm:AerodromeSurfaceWindForecast>
</iwxxm:surfaceWind>
<iwxxm:cloud>
<iwxxm:AerodromeCloudForecast gml:id="uuid.ad9464f9-82de-49bd-8770-596b774591e5">
<iwxxm:layer>
<iwxxm:CloudLayer>
<iwxxm:amount xlink:href="http://codes.wmo.int/49-2/CloudAmountReportedAtAerodrome/BKN"/>
<iwxxm:base uom="[ft_i]">2000.0</iwxxm:base>
</iwxxm:CloudLayer>
</iwxxm:layer>
</iwxxm:AerodromeCloudForecast>
</iwxxm:cloud>
</iwxxm:MeteorologicalAerodromeForecast>
</iwxxm:changeForecast>
</iwxxm:TAF>
</collect:meteorologicalInformation>
<collect:bulletinIdentifier>A_LYXX31YUDO251600_C_YUDO_201208251600--.xml</collect:bulletinIdentifier>
</collect:MeteorologicalBulletin>
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<collect:MeteorologicalBulletin xmlns:collect="http://def.wmo.int/collect/2014"
xmlns:gml="http://www.opengis.net/gml/3.2"
xmlns:aixm="http://www.aixm.aero/schema/5.1.1"
xmlns:iwxxm="http://icao.int/iwxxm/3.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
gml:id="bulletin-12345"
xsi:schemaLocation="http://icao.int/iwxxm/3.0 http://schemas.wmo.int/iwxxm/3.0/iwxxm.xsd http://def.wmo.int/collect/2014 http://schemas.wmo.int/collect/1.2/collect.xsd">
<collect:meteorologicalInformation>
<iwxxm:TAF
gml:id="uuid.dfbfe27c-3478-4efc-9800-124b90030e39"
reportStatus="AMENDMENT"
permissibleUsage="OPERATIONAL"
isCancelReport="true">

<iwxxm:issueTime>
<gml:TimeInstant gml:id="uuid.2a142955-e0ef-4164-a550-ec80a3258150">
<gml:timePosition>2012-08-16T15:00:00Z</gml:timePosition>
</gml:TimeInstant>
</iwxxm:issueTime>

<iwxxm:aerodrome>
<aixm:AirportHeliport gml:id="uuid.65730df9-a2fd-4815-9d3f-d6f6770bc6cf">
<aixm:timeSlice>
<aixm:AirportHeliportTimeSlice gml:id="uuid.30a6076d-48ec-42df-bcd5-bf85220fe274">
<gml:validTime/>
<aixm:interpretation>SNAPSHOT</aixm:interpretation>
<aixm:designator>YUDO</aixm:designator>
<aixm:name>DONLON/INTERNATIONAL</aixm:name>
<aixm:locationIndicatorICAO>YUDO</aixm:locationIndicatorICAO>
</aixm:AirportHeliportTimeSlice>
</aixm:timeSlice>
</aixm:AirportHeliport>
</iwxxm:aerodrome>

<iwxxm:cancelledReportValidPeriod>
<gml:TimePeriod gml:id="uuid.b171a7e2-7fdf-496c-ada8-6cbc6c606291">
<gml:beginPosition>2012-08-16T00:00:00Z</gml:beginPosition>
<gml:endPosition>2012-08-16T18:00:00Z</gml:endPosition>
</gml:TimePeriod>
</iwxxm:cancelledReportValidPeriod>

</iwxxm:TAF>
</collect:meteorologicalInformation>
<collect:bulletinIdentifier>A_LYXX31YUDO251600_C_YUDO_201208251600--.xml</collect:bulletinIdentifier>
</collect:MeteorologicalBulletin>

0 comments on commit 7bdad7b

Please sign in to comment.