/// <summary>Gets exact timestamp from configuration database for given user supplied timestamp</summary> /// <param name="utcTimestamp">User supplied timestamp</param> /// <returns>Exact timestamp present in configuration database or DateTime.MinValue if /// utcTimestamp is too small or service configuration is empty</returns> public DateTime GetExactTimestamp(DateTime utcTimestamp) { using (FetchConfigurationDataClassesDataContext db = new FetchConfigurationDataClassesDataContext(connectionString)) { if (utcTimestamp == DateTime.MaxValue) { var result = db.GetLatestTimeStamp().FirstOrDefault(); if (result != null) { return((DateTime)result.TimeStamp); } else { return(DateTime.MinValue); } } else { var result = db.GetExactTimeStamp(utcTimestamp).FirstOrDefault(); if (result == null) { return(DateTime.MinValue); } else { return((DateTime)result.TimeStamp); } } } }
public void GetExactTimeStampTest() { db.TruncateTables(); //Part 1 db.AddDataSource( "NCEP/NCAR Reanalysis 1 (regular grid)", "The NCEP/NCAR Reanalysis 1 project is using a state-of-the-art analysis/forecast system to perform data assimilation using past data from 1948 to the present", "NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/", "Microsoft.Research.Science.FetchClimate2.DataSources.NCEPReanalysisRegularGridDataSource, NCEPReanalysisDataSource", "msds:az?name=ReanalysisRegular&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT", null, null); Thread.Sleep(time); DateTime TIME_MIDDLE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp; db.AddDataSource( "NCEP/NCAR Reanalysis 1 Gauss T62 grid)", "The NCEP/NCAR Reanalysis 1 project is using a state-of-the-art analysis/forecast system to perform data assimilation using past data from 1948 to the present", "NCEP Reanalysis data provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their Web site at http://www.esrl.noaa.gov/psd/", "Microsoft.Research.Science.FetchClimate2.DataSources.NCEPReanalysisGaussGridDataSource, NCEPReanalysisDataSource", "msds:az?name=ReanalysisGaussT62&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT", null, null); DateTime NOW = DateTime.UtcNow; var t = db.GetExactTimeStamp(NOW).ToList(); Assert.AreEqual(t.Count, 1); if (t[0].TimeStamp > NOW) { Assert.Fail(); } if (t[0].TimeStamp <= TIME_MIDDLE_INSERTING) { Assert.Fail(); } //Part 2 DateTime TIME_BEFORE_ENGINE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp; Thread.Sleep(time); db.SetFetchEngine("Fetch1"); Thread.Sleep(time); DateTime TIME_AFTER_ENGINE_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp; var t2 = db.GetExactTimeStamp(TIME_BEFORE_ENGINE_INSERTING).ToList(); Assert.AreEqual(t2.Count, 1); Assert.AreEqual(t[0].TimeStamp, t2[0].TimeStamp); //Part3 Thread.Sleep(time); NOW = DateTime.UtcNow; var t3 = db.GetExactTimeStamp(NOW).ToList(); if (t3[0].TimeStamp > NOW) { Assert.Fail(); } if (t3[0].TimeStamp < TIME_BEFORE_ENGINE_INSERTING) { Assert.Fail(); } if (t3[0].TimeStamp > TIME_AFTER_ENGINE_INSERTING) { Assert.Fail(); } //Part4 db.AddDataSource( "WorldClim 1.4", "A set of global climate layers (climate grids) with a spatial resolution of a square kilometer", "The database is documented in this article: Hijmans, R.J., S.E. Cameron, J.L. Parra, P.G. Jones and A. Jarvis, 2005. Very high resolution interpolated climate surfaces for global land areas. International Journal of Climatology 25: 1965-1978.", "Microsoft.Research.Science.FetchClimate2.DataSources.CRUProcessor, NCEPReanalysisDataSource", "msds:az?name=CRU_CL_2_0&DefaultEndpointsProtocol=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7SSh+ShM/q9K0ml49gQm+PE7G7i7zCvrpuT", null, null); db.AddVariable("MyVariable", "MyDescription", "MyUnits"); db.AddVariable("MyVariable2", "MyDescription2", "MyUnits2"); DateTime TIME_BEFORE_MAPPING_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp; Thread.Sleep(time); db.SetMapping("NCEP/NCAR Reanalysis 1 (regular grid)", "MyVariable", "TestDataSourceVariable", true, true); DateTime TIME_AFTER_MAPPING_INSERTING = (DateTime)db.GetLatestTimeStamp().First().TimeStamp; var t4 = db.GetExactTimeStamp(DateTime.UtcNow).ToList(); Assert.AreEqual(t4.Count, 1); if (t4[0].TimeStamp > TIME_AFTER_MAPPING_INSERTING) { Assert.Fail(); } }