@@ -16,10 +16,17 @@ namespace Data.TimeSeriesAnalysis
1616 /// <summary>
1717 /// Provides integration and validation tests for the <see cref="TimeSeriesDownload"/> class,
1818 /// including downloads from the Canadian Hydrometric Monitoring Network (CHMN),
19- /// the United States Geological Survey (USGS), and the Global Historical Climatology Network (GHCN).
19+ /// the United States Geological Survey (USGS), the Global Historical Climatology Network (GHCN),
20+ /// and the Australian Bureau of Meteorology (BOM).
2021 /// </summary>
2122 /// <remarks>
2223 /// <para>
24+ /// Live provider checks carry the <c>LiveServiceIntegration</c> category and are excluded from
25+ /// PR integration. Run them explicitly with
26+ /// <c>dotnet test -c Release --filter "TestCategory=LiveServiceIntegration"</c>.
27+ /// Offline request, parsing, and input-validation tests remain in the PR gate.
28+ /// </para>
29+ /// <para>
2330 /// <b> Authors: </b>
2431 /// <list type="bullet">
2532 /// <item>Haden Smith, USACE Risk Management Center, cole.h.smith@usace.army.mil</item>
@@ -887,7 +894,7 @@ public void RejectIPv6BindEndPoint_ReturnsNullForIPv4()
887894 /// <summary>
888895 /// Validates a full-period-of-record download for the CHMN Cold River station (flow).
889896 /// </summary>
890- [ TestMethod , TestCategory ( "Integration" ) ]
897+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
891898 public async Task CHMN_FullPor_ColdRiver_Flow ( )
892899 {
893900 if ( ! await ChmnAvailable ( ) ) return ;
@@ -898,7 +905,7 @@ public async Task CHMN_FullPor_ColdRiver_Flow()
898905 /// <summary>
899906 /// Validates a full-period-of-record download for the CHMN Lillooet River station (flow).
900907 /// </summary>
901- [ TestMethod , TestCategory ( "Integration" ) ]
908+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
902909 public async Task CHMN_FullPor_Lillooet_Flow ( )
903910 {
904911 if ( ! await ChmnAvailable ( ) ) return ;
@@ -909,7 +916,7 @@ public async Task CHMN_FullPor_Lillooet_Flow()
909916 /// <summary>
910917 /// Validates a full-period-of-record download for the CHMN Capilano River station (flow).
911918 /// </summary>
912- [ TestMethod , TestCategory ( "Integration" ) ]
919+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
913920 public async Task CHMN_FullPor_Capilano_Flow ( )
914921 {
915922 if ( ! await ChmnAvailable ( ) ) return ;
@@ -920,7 +927,7 @@ public async Task CHMN_FullPor_Capilano_Flow()
920927 /// <summary>
921928 /// Tests flow unit conversions (cms ↔ cfs) for CHMN data.
922929 /// </summary>
923- [ TestMethod , TestCategory ( "Integration" ) ]
930+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
924931 public async Task CHMN_UnitConversion_Flow_CmsCfs ( )
925932 {
926933 if ( ! await ChmnAvailable ( ) ) return ;
@@ -946,7 +953,7 @@ public async Task CHMN_UnitConversion_Flow_CmsCfs()
946953 /// <summary>
947954 /// Tests stage unit conversions (m ↔ ft) for CHMN data.
948955 /// </summary>
949- [ TestMethod , TestCategory ( "Integration" ) ]
956+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
950957 public async Task CHMN_UnitConversion_Stage_MFt ( )
951958 {
952959 if ( ! await ChmnAvailable ( ) ) return ;
@@ -993,7 +1000,7 @@ await TimeSeriesDownload.FromCHMN(CHMN_1,
9931000 /// <summary>
9941001 /// Tests CHMN instantaneous discharge download (real-time 5-minute data).
9951002 /// </summary>
996- [ TestMethod , TestCategory ( "Integration" ) ]
1003+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
9971004 public async Task CHMN_InstantaneousDischarge_Works ( )
9981005 {
9991006 if ( ! await ChmnAvailable ( ) ) return ;
@@ -1008,7 +1015,7 @@ public async Task CHMN_InstantaneousDischarge_Works()
10081015 /// <summary>
10091016 /// Tests CHMN instantaneous stage download (real-time 5-minute data).
10101017 /// </summary>
1011- [ TestMethod , TestCategory ( "Integration" ) ]
1018+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
10121019 public async Task CHMN_InstantaneousStage_Works ( )
10131020 {
10141021 if ( ! await ChmnAvailable ( ) ) return ;
@@ -1023,7 +1030,7 @@ public async Task CHMN_InstantaneousStage_Works()
10231030 /// <summary>
10241031 /// Tests CHMN peak discharge download (annual instantaneous maximums).
10251032 /// </summary>
1026- [ TestMethod , TestCategory ( "Integration" ) ]
1033+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
10271034 public async Task CHMN_PeakDischarge_Works ( )
10281035 {
10291036 if ( ! await ChmnAvailable ( ) ) return ;
@@ -1038,7 +1045,7 @@ public async Task CHMN_PeakDischarge_Works()
10381045 /// <summary>
10391046 /// Tests CHMN peak stage download (annual instantaneous maximums).
10401047 /// </summary>
1041- [ TestMethod , TestCategory ( "Integration" ) ]
1048+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
10421049 public async Task CHMN_PeakStage_Works ( )
10431050 {
10441051 if ( ! await ChmnAvailable ( ) ) return ;
@@ -1371,7 +1378,7 @@ private static async Task VerifyUsgsInstantaneousDownloadIsIrregular(
13711378 /// <summary>
13721379 /// Tests full-period-of-record USGS daily discharge download.
13731380 /// </summary>
1374- [ TestMethod , TestCategory ( "Integration" ) ]
1381+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
13751382 public async Task USGS_FullPor_DailyDischarge ( )
13761383 {
13771384 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1383,7 +1390,7 @@ public async Task USGS_FullPor_DailyDischarge()
13831390 /// <summary>
13841391 /// Tests USGS daily stage download for correctness and continuity.
13851392 /// </summary>
1386- [ TestMethod , TestCategory ( "Integration" ) ]
1393+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
13871394 public async Task USGS_FullPor_DailyStage ( )
13881395 {
13891396 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1395,7 +1402,7 @@ public async Task USGS_FullPor_DailyStage()
13951402 /// <summary>
13961403 /// Tests USGS peak discharge data retrieval for non-daily data.
13971404 /// </summary>
1398- [ TestMethod , TestCategory ( "Integration" ) ]
1405+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
13991406 public async Task USGS_PeakDischarge_Works ( )
14001407 {
14011408 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1431,7 +1438,7 @@ await TimeSeriesDownload.FromUSGS(USGS_1,
14311438 /// <summary>
14321439 /// Tests USGS field measurement discharge data retrieval from the OGC API.
14331440 /// </summary>
1434- [ TestMethod , TestCategory ( "Integration" ) ]
1441+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
14351442 public async Task USGS_MeasuredDischarge_Works ( )
14361443 {
14371444 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1454,7 +1461,7 @@ public async Task USGS_MeasuredDischarge_Works()
14541461 /// <summary>
14551462 /// Tests USGS field measurement stage (gage height) data retrieval from the OGC API.
14561463 /// </summary>
1457- [ TestMethod , TestCategory ( "Integration" ) ]
1464+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
14581465 public async Task USGS_MeasuredStage_Works ( )
14591466 {
14601467 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1477,7 +1484,7 @@ public async Task USGS_MeasuredStage_Works()
14771484 /// <summary>
14781485 /// Tests USGS peak stage data retrieval.
14791486 /// </summary>
1480- [ TestMethod , TestCategory ( "Integration" ) ]
1487+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
14811488 public async Task USGS_PeakStage_Works ( )
14821489 {
14831490 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1493,7 +1500,7 @@ public async Task USGS_PeakStage_Works()
14931500 /// <summary>
14941501 /// Tests USGS instantaneous discharge download.
14951502 /// </summary>
1496- [ TestMethod , TestCategory ( "Integration" ) ]
1503+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
14971504 public async Task USGS_InstantaneousDischarge_Works ( )
14981505 {
14991506 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1508,7 +1515,7 @@ public async Task USGS_InstantaneousDischarge_Works()
15081515 /// <summary>
15091516 /// Tests USGS instantaneous stage download.
15101517 /// </summary>
1511- [ TestMethod , TestCategory ( "Integration" ) ]
1518+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
15121519 public async Task USGS_InstantaneousStage_Works ( )
15131520 {
15141521 if ( ! await UsgsAvailable ( ) ) return ;
@@ -1652,7 +1659,7 @@ await TimeSeriesDownload.FromGHCN(
16521659 /// The ceiling guards against connection-establishment regressions: walking dead IPv6
16531660 /// addresses before IPv4 once made this download take minutes instead of seconds.
16541661 /// </remarks>
1655- [ TestMethod , TestCategory ( "Integration" ) ]
1662+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
16561663 [ Timeout ( 60000 , CooperativeCancellation = true ) ]
16571664 public async Task GHCN_FullPor_Precipitation ( )
16581665 {
@@ -1668,7 +1675,7 @@ public async Task GHCN_FullPor_Precipitation()
16681675 /// The ceiling guards against connection-establishment regressions: walking dead IPv6
16691676 /// addresses before IPv4 once made this download take minutes instead of seconds.
16701677 /// </remarks>
1671- [ TestMethod , TestCategory ( "Integration" ) ]
1678+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
16721679 [ Timeout ( 60000 , CooperativeCancellation = true ) ]
16731680 public async Task GHCN_FullPor_Snow ( )
16741681 {
@@ -1681,7 +1688,7 @@ public async Task GHCN_FullPor_Snow()
16811688 /// <summary>
16821689 /// Tests precipitation unit conversion between millimeters and inches.
16831690 /// </summary>
1684- [ TestMethod , TestCategory ( "Integration" ) ]
1691+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
16851692 public async Task GHCN_UnitConversion_Mm_In ( )
16861693 {
16871694 if ( ! await GhcnAvailable ( ) ) return ;
@@ -1705,7 +1712,7 @@ public async Task GHCN_UnitConversion_Mm_In()
17051712 /// <summary>
17061713 /// Tests precipitation unit conversion between millimeters and centimeters.
17071714 /// </summary>
1708- [ TestMethod , TestCategory ( "Integration" ) ]
1715+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) ]
17091716 public async Task GHCN_UnitConversion_Mm_Cm ( )
17101717 {
17111718 if ( ! await GhcnAvailable ( ) ) return ;
@@ -1756,7 +1763,7 @@ await TimeSeriesDownload.FromGHCN(GHCN_1,
17561763 /// <summary>
17571764 /// Validates a full-period-of-record download for the BOM Cotter River station (discharge).
17581765 /// </summary>
1759- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1766+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
17601767 public async Task BOM_FullPor_CotterRiver_Discharge ( )
17611768 {
17621769 if ( ! await BomAvailable ( ) ) return ;
@@ -1767,7 +1774,7 @@ public async Task BOM_FullPor_CotterRiver_Discharge()
17671774 /// <summary>
17681775 /// Validates a full-period-of-record download for the BOM Goodradigbee River station (discharge).
17691776 /// </summary>
1770- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1777+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
17711778 public async Task BOM_FullPor_Goodradigbee_Discharge ( )
17721779 {
17731780 if ( ! await BomAvailable ( ) ) return ;
@@ -1778,7 +1785,7 @@ public async Task BOM_FullPor_Goodradigbee_Discharge()
17781785 /// <summary>
17791786 /// Validates a full-period-of-record download for the BOM Murray River station (stage).
17801787 /// </summary>
1781- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1788+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
17821789 public async Task BOM_FullPor_MurrayRiver_Stage ( )
17831790 {
17841791 if ( ! await BomAvailable ( ) ) return ;
@@ -1789,7 +1796,7 @@ public async Task BOM_FullPor_MurrayRiver_Stage()
17891796 /// <summary>
17901797 /// Tests discharge unit conversions (cms ↔ cfs) for BOM data.
17911798 /// </summary>
1792- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1799+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
17931800 public async Task BOM_UnitConversion_Discharge_CmsCfs ( )
17941801 {
17951802 if ( ! await BomAvailable ( ) ) return ;
@@ -1815,7 +1822,7 @@ public async Task BOM_UnitConversion_Discharge_CmsCfs()
18151822 /// <summary>
18161823 /// Tests stage unit conversions (m ↔ ft) for BOM data.
18171824 /// </summary>
1818- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1825+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
18191826 public async Task BOM_UnitConversion_Stage_MFt ( )
18201827 {
18211828 if ( ! await BomAvailable ( ) ) return ;
@@ -1862,7 +1869,7 @@ await TimeSeriesDownload.FromABOM(BOM_1,
18621869 /// <summary>
18631870 /// Tests BOM with a windowed date range to verify date filtering works correctly.
18641871 /// </summary>
1865- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1872+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
18661873 public async Task BOM_WindowedDownload_Works ( )
18671874 {
18681875 if ( ! await BomAvailable ( ) ) return ;
@@ -1887,7 +1894,7 @@ public async Task BOM_WindowedDownload_Works()
18871894 /// <summary>
18881895 /// Validates instantaneous discharge download from BOM.
18891896 /// </summary>
1890- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1897+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
18911898 public async Task BOM_InstantaneousDischarge_Works ( )
18921899 {
18931900 if ( ! await BomAvailable ( ) ) return ;
@@ -1901,7 +1908,7 @@ public async Task BOM_InstantaneousDischarge_Works()
19011908 /// <summary>
19021909 /// Validates instantaneous stage download from BOM.
19031910 /// </summary>
1904- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1911+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
19051912 public async Task BOM_InstantaneousStage_Works ( )
19061913 {
19071914 if ( ! await BomAvailable ( ) ) return ;
@@ -1915,7 +1922,7 @@ public async Task BOM_InstantaneousStage_Works()
19151922 /// <summary>
19161923 /// Validates daily precipitation download from BOM.
19171924 /// </summary>
1918- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1925+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
19191926 public async Task BOM_DailyPrecipitation_Works ( )
19201927 {
19211928 if ( ! await BomAvailable ( ) ) return ;
@@ -1929,7 +1936,7 @@ public async Task BOM_DailyPrecipitation_Works()
19291936 /// <summary>
19301937 /// Tests precipitation unit conversions (mm ↔ inches) for BOM data.
19311938 /// </summary>
1932- [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "BOMIntegration" ) ]
1939+ [ TestMethod , TestCategory ( "Integration" ) , TestCategory ( "LiveServiceIntegration" ) , TestCategory ( " BOMIntegration") ]
19331940 public async Task BOM_UnitConversion_Precip_MmIn ( )
19341941 {
19351942 if ( ! await BomAvailable ( ) ) return ;
0 commit comments