From 2bd62ad4b6f834558d14474434979101bd7ae419 Mon Sep 17 00:00:00 2001 From: Dustin Johnson Date: Tue, 5 Mar 2013 09:33:33 -0600 Subject: [PATCH] Issue #1647 Apply WMO header, increase frequency of bandwidth manager tasks Change-Id: Idcd9cc06543582252ddbabe42d7c30cb741dfbdd Former-commit-id: 547780f9a36e83d952ad4bbea6a07d143b0fbd9c [formerly ec1ed5a20e1aca5761fd0ed62b450a8fa6f70ecc] Former-commit-id: 8107f76d9853c0b6f46ac0b51457431ce17119a0 --- .../bandwidth/retrieval/RetrievalAgent.java | 8 +- .../res/spring/harvester-datadelivery.xml | 2 +- .../.classpath | 1 + .../META-INF/MANIFEST.MF | 3 +- .../res/spring/retrieval-datadelivery-ncf.xml | 7 +- .../res/spring/retrieval-datadelivery-wfo.xml | 2 +- .../res/spring/retrieval-datadelivery.xml | 14 +++ ....uf.edex.datadelivery.retrieval.properties | 10 ++ .../handlers/AlwaysSameWmoHeader.java | 54 +++++++++ ...DeserializeRetrievedDataFromDirectory.java | 17 +-- .../retrieval/handlers/IWmoHeaderApplier.java | 50 ++++++++ .../retrieval/handlers/RetrievalHandler.java | 18 +-- .../retrieval/handlers/RetrievalTask.java | 8 +- .../SerializeRetrievedDataToDirectory.java | 11 +- .../handlers/SubscriptionNotifyTask.java | 3 +- .../handlers/AlwaysSameWmoHeaderTest.java | 110 ++++++++++++++++++ ...rializeRetrievedDataFromDirectoryTest.java | 7 +- .../handlers/RetrievalHandlerTest.java | 25 ++-- .../retrieval/handlers/RetrievalTaskTest.java | 4 +- ...SerializeRetrievedDataToDirectoryTest.java | 3 +- 20 files changed, 317 insertions(+), 40 deletions(-) create mode 100644 edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/resources/com.raytheon.uf.edex.datadelivery.retrieval.properties create mode 100644 edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/AlwaysSameWmoHeader.java create mode 100644 edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IWmoHeaderApplier.java create mode 100644 tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/AlwaysSameWmoHeaderTest.java diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/retrieval/RetrievalAgent.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/retrieval/RetrievalAgent.java index 4cf71b5e46..060240d089 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/retrieval/RetrievalAgent.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.bandwidth/src/com/raytheon/uf/edex/datadelivery/bandwidth/retrieval/RetrievalAgent.java @@ -3,6 +3,8 @@ package com.raytheon.uf.edex.datadelivery.bandwidth.retrieval; import com.raytheon.uf.common.datadelivery.registry.Network; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; +import com.raytheon.uf.common.time.util.TimeUtil; import com.raytheon.uf.edex.core.EdexException; import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation; @@ -19,6 +21,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation; * Oct 11, 2012 0726 djohnson Add SW history, use generics, * separate work method from loop control. * Nov 09, 2012 1286 djohnson Add ability to kill the threads when BandwidthManager instance is replaced. + * Mar 05, 2013 1647 djohnson Sleep one minute between checks. * * * @@ -29,7 +32,7 @@ import com.raytheon.uf.edex.datadelivery.bandwidth.dao.BandwidthAllocation; public abstract class RetrievalAgent extends Thread { - private static final int SLEEP_TIME = 300000; + private static final long SLEEP_TIME = TimeUtil.MILLIS_PER_MINUTE; private static final IUFStatusHandler statusHandler = UFStatus .getHandler(RetrievalAgent.class); @@ -122,7 +125,8 @@ public abstract class RetrievalAgent - + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/.classpath b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/.classpath index d96d5d8b09..fd798babda 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/.classpath +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/.classpath @@ -4,5 +4,6 @@ + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/META-INF/MANIFEST.MF b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/META-INF/MANIFEST.MF index b43b83dba6..ad8c017d71 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/META-INF/MANIFEST.MF +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/META-INF/MANIFEST.MF @@ -30,7 +30,8 @@ Require-Bundle: com.raytheon.uf.common.status;bundle-version="1.12.1174", com.raytheon.uf.common.dataplugin.grid;bundle-version="1.0.0", com.raytheon.uf.common.parameter;bundle-version="1.0.0", com.raytheon.uf.edex.event;bundle-version="1.0.0", - com.raytheon.uf.common.stats;bundle-version="1.0.0" + com.raytheon.uf.common.stats;bundle-version="1.0.0", + com.raytheon.uf.edex.decodertools;bundle-version="1.12.1174" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Bundle-ActivationPolicy: lazy Export-Package: com.raytheon.uf.edex.datadelivery.retrieval; diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-ncf.xml b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-ncf.xml index 65742cd338..85f95c7690 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-ncf.xml +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-ncf.xml @@ -21,7 +21,12 @@ - + + + + + + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-wfo.xml b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-wfo.xml index a509f7d667..0ff5550767 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-wfo.xml +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery-wfo.xml @@ -42,7 +42,7 @@ - + diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml index b9534e3db4..3d0a809c5e 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/res/spring/retrieval-datadelivery.xml @@ -32,6 +32,20 @@ + + + + + + + + + + + + + * + * SOFTWARE HISTORY + * + * Date Ticket# Engineer Description + * ------------ ---------- ----------- -------------------------- + * Mar 04, 2013 1647 djohnson Initial creation + * + * + * + * @author djohnson + * @version 1.0 + */ +public class AlwaysSameWmoHeader implements IWmoHeaderApplier { + + private final String wmoHeader; + + public AlwaysSameWmoHeader(String wmoHeader) { + this.wmoHeader = wmoHeader; + } + + /** + * {@inheritDoc} + */ + @Override + public String applyWmoHeader(String data) { + return wmoHeader + "\n" + data; + } + +} diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java index 6a117c15dd..871658ad90 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectory.java @@ -24,10 +24,13 @@ import java.io.FileFilter; import javax.xml.bind.JAXBException; +import com.raytheon.edex.esb.Headers; import com.raytheon.uf.common.datadelivery.registry.Coverage; import com.raytheon.uf.common.serialization.JAXBManager; import com.raytheon.uf.common.util.CollectionUtil; +import com.raytheon.uf.common.util.FileUtil; import com.raytheon.uf.edex.datadelivery.retrieval.opendap.OpenDapRetrievalResponse; +import com.raytheon.uf.edex.wmo.message.WMOMessage; /** * Deserializes the retrieved data in a directory. @@ -39,14 +42,14 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.OpenDapRetrievalRespo * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation + * Mar 05, 2013 1647 djohnson Remove WMO header. * * * * @author djohnson * @version 1.0 */ -public class DeserializeRetrievedDataFromDirectory implements - IRetrievalsFinder { +public class DeserializeRetrievedDataFromDirectory implements IRetrievalsFinder { private static final FileFilter NO_DIRECTORIES = new FileFilter() { @Override @@ -65,8 +68,7 @@ public class DeserializeRetrievedDataFromDirectory implements public DeserializeRetrievedDataFromDirectory(File directory) { this.directory = directory; try { - this.jaxbManager = new JAXBManager( - RetrievalResponseXml.class, + this.jaxbManager = new JAXBManager(RetrievalResponseXml.class, OpenDapRetrievalResponse.class, Coverage.class); } catch (JAXBException e) { throw new ExceptionInInitializerError(e); @@ -78,8 +80,7 @@ public class DeserializeRetrievedDataFromDirectory implements * {@inheritDoc} */ @Override - public RetrievalResponseXml findRetrievals() - throws Exception { + public RetrievalResponseXml findRetrievals() throws Exception { final File[] files = directory.listFiles(NO_DIRECTORIES); @@ -89,8 +90,10 @@ public class DeserializeRetrievedDataFromDirectory implements final File file = files[0]; try { + WMOMessage message = new WMOMessage(FileUtil.file2bytes(file), + new Headers()); return (RetrievalResponseXml) jaxbManager - .jaxbUnmarshalFromXmlFile(file); + .unmarshalFromXml(new String(message.getMessageBody())); } finally { file.delete(); } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IWmoHeaderApplier.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IWmoHeaderApplier.java new file mode 100644 index 0000000000..7b29801bd9 --- /dev/null +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/IWmoHeaderApplier.java @@ -0,0 +1,50 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.uf.edex.datadelivery.retrieval.handlers; + +/** + * Apply a WMO compliant header to text data. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Mar 04, 2013 1647       djohnson     Initial creation
+ * 
+ * 
+ * + * @author djohnson + * @version 1.0 + */ + +public interface IWmoHeaderApplier { + + /** + * Apply a WMO compliant header. + * + * @param data + * the data + * @return the data with a WMO compliant header + */ + String applyWmoHeader(final String data); + +} diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandler.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandler.java index cbc100acc4..e37dc83a1d 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandler.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandler.java @@ -29,6 +29,7 @@ import org.springframework.stereotype.Service; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.time.domain.api.IDuration; import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; /** @@ -41,6 +42,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; * ------------ ---------- ----------- -------------------------- * Jan 07, 2011 dhladky Initial creation * Aug 09, 2012 1022 djohnson Use {@link ExecutorService} for retrieval. + * Mar 04, 2013 1647 djohnson RetrievalTasks are now scheduled via constructor parameter. * * * @@ -57,28 +59,26 @@ public class RetrievalHandler { private final List retrievalTasks; - private final SubscriptionNotifyTask subNotifyTask; - public RetrievalHandler(ScheduledExecutorService executorService, IRetrievalDao retrievalDao, List retrievalTasks, - SubscriptionNotifyTask subNotifyTask) { + SubscriptionNotifyTask subNotifyTask, + IDuration retrievalTaskFrequency, IDuration subnotifyTaskFrequency) { this.executorService = executorService; this.retrievalTasks = retrievalTasks; - this.subNotifyTask = subNotifyTask; // set all Running state retrievals to pending retrievalDao.resetRunningRetrievalsToPending(); for (RetrievalTask retrievalTask : retrievalTasks) { - executorService.scheduleWithFixedDelay(retrievalTask, 1, 5, - TimeUnit.MINUTES); + executorService.scheduleWithFixedDelay(retrievalTask, 1, + retrievalTaskFrequency.getMillis(), TimeUnit.MILLISECONDS); } - executorService.scheduleWithFixedDelay(subNotifyTask, 1, 1, - TimeUnit.MINUTES); + executorService.scheduleWithFixedDelay(subNotifyTask, 1, + subnotifyTaskFrequency.getMillis(), TimeUnit.MILLISECONDS); } public void notify(List subscriptions) { - statusHandler.info("Notifying that subscriptions are available."); + statusHandler.debug("Notifying that subscriptions are available."); for (RetrievalTask retrievalTask : retrievalTasks) { executorService.execute(retrievalTask); diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java index bd68a6450c..953b91340b 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTask.java @@ -22,6 +22,7 @@ package com.raytheon.uf.edex.datadelivery.retrieval.handlers; import com.raytheon.uf.common.datadelivery.registry.Network; import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.UFStatus; +import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; @@ -40,6 +41,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; * Nov 19, 2012 1166 djohnson Clean up JAXB representation of registry objects. * Jan 30, 2013 1543 djohnson Constrain to the network retrievals are pulled for. * Feb 15, 2013 1543 djohnson Using xml for retrievals now. + * Mar 05, 2013 1647 djohnson Change no retrievals found message to debug. * * * @@ -88,8 +90,10 @@ public class RetrievalTask implements Runnable { // This forces the return from the while loop once there are // no more retrievals to process if (retrievalPluginDataObject == null) { - statusHandler.info("No " + network - + " retrievals found."); + if (statusHandler.isPriorityEnabled(Priority.DEBUG)) { + statusHandler.debug("No " + network + + " retrievals found."); + } return; } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java index 155ff08117..f63a5b9f24 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectory.java @@ -41,6 +41,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.opendap.OpenDapRetrievalRespo * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation * Feb 15, 2013 1543 djohnson Serialize data out as XML. + * Mar 05, 2013 1647 djohnson Apply WMO header. * * * @@ -54,11 +55,15 @@ public class SerializeRetrievedDataToDirectory implements private final File targetDirectory; + private final IWmoHeaderApplier wmoHeaderWrapper; + /** * @param directory */ - public SerializeRetrievedDataToDirectory(File directory) { + public SerializeRetrievedDataToDirectory(File directory, + IWmoHeaderApplier wmoHeaderWrapper) { this.targetDirectory = directory; + this.wmoHeaderWrapper = wmoHeaderWrapper; try { this.jaxbManager = new JAXBManager(RetrievalResponseXml.class, OpenDapRetrievalResponse.class, Coverage.class); @@ -81,7 +86,9 @@ public class SerializeRetrievedDataToDirectory implements .toString()); final String xml = jaxbManager .marshalToXml(retrievalPluginDataObjects); - FileUtil.bytes2File(xml.getBytes(), output); + final String textForFile = wmoHeaderWrapper.applyWmoHeader(xml); + + FileUtil.bytes2File(textForFile.getBytes(), output); } catch (Exception e) { throw new SerializationException(e); } diff --git a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SubscriptionNotifyTask.java b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SubscriptionNotifyTask.java index ff585ce6f6..110d1247d2 100644 --- a/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SubscriptionNotifyTask.java +++ b/edexOsgi/com.raytheon.uf.edex.datadelivery.retrieval/src/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SubscriptionNotifyTask.java @@ -42,6 +42,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.RetrievalRequestRecord; * Oct 10, 2012 0726 djohnson Use the subRetrievalKey for notifying the retrieval manager. * Nov 25, 2012 1268 dhladky Added additional fields to process subscription tracking * Feb 05, 2013 1580 mpduff EventBus refactor. + * Mar 05, 2013 1647 djohnson Debug log running message. * * * @@ -215,7 +216,7 @@ public class SubscriptionNotifyTask implements Runnable { @Override public void run() { - statusHandler.info("SubscriptionNotifyTask() - Running..."); + statusHandler.debug("SubscriptionNotifyTask() - Running..."); try { SubscriptionDelay nextSub = subscriptionQueue.peek(); diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/AlwaysSameWmoHeaderTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/AlwaysSameWmoHeaderTest.java new file mode 100644 index 0000000000..bbbf40bad2 --- /dev/null +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/AlwaysSameWmoHeaderTest.java @@ -0,0 +1,110 @@ +/** + * This software was developed and / or modified by Raytheon Company, + * pursuant to Contract DG133W-05-CQ-1067 with the US Government. + * + * U.S. EXPORT CONTROLLED TECHNICAL DATA + * This software product contains export-restricted data whose + * export/transfer/disclosure is restricted by U.S. law. Dissemination + * to non-U.S. persons whether in the United States or abroad requires + * an export license or other authorization. + * + * Contractor Name: Raytheon Company + * Contractor Address: 6825 Pine Street, Suite 340 + * Mail Stop B8 + * Omaha, NE 68106 + * 402.291.0100 + * + * See the AWIPS II Master Rights File ("Master Rights File.pdf") for + * further licensing information. + **/ +package com.raytheon.uf.edex.datadelivery.retrieval.handlers; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.raytheon.edex.esb.Headers; +import com.raytheon.uf.edex.wmo.message.WMOHeader; +import com.raytheon.uf.edex.wmo.message.WMOMessage; + +/** + * Test {@link AlwaysSameWmoHeader}. + * + *
+ * 
+ * SOFTWARE HISTORY
+ * 
+ * Date         Ticket#    Engineer    Description
+ * ------------ ---------- ----------- --------------------------
+ * Mar 04, 2013 1647       djohnson     Initial creation
+ * 
+ * 
+ * + * @author djohnson + * @version 1.0 + */ +public class AlwaysSameWmoHeaderTest { + + private static final AlwaysSameWmoHeader WRAPPER = new AlwaysSameWmoHeader( + "SMYG10 LYBM 280000"); + + private static final String wrapped = WRAPPER.applyWmoHeader("someData"); + + private static WMOMessage message; + + private static WMOHeader wmoHeader; + + @BeforeClass + public static void setUpClass() { + message = new WMOMessage(wrapped, new Headers()); + wmoHeader = message.getWmoHeader(); + } + + @Test + public void createsValidWmoHeader() { + assertThat(wmoHeader.isValid(), is(true)); + } + + @Test + public void createsParseableT1() { + assertThat(wmoHeader.getT1(), is(equalTo('S'))); + } + + @Test + public void createsParseableT2() { + assertThat(wmoHeader.getT2(), is(equalTo('M'))); + } + + @Test + public void createsParseableA1() { + assertThat(wmoHeader.getA1(), is(equalTo('Y'))); + } + + @Test + public void createsParseableA2() { + assertThat(wmoHeader.getA2(), is(equalTo('G'))); + } + + @Test + public void createsParseableIi() { + assertThat(wmoHeader.getIi(), is(equalTo(10))); + } + + @Test + public void createsParseableCCCC() { + assertThat(wmoHeader.getCccc(), is(equalTo("LYBM"))); + } + + @Test + public void createsParseableYYGGgg() { + assertThat(wmoHeader.getYYGGgg(), is(equalTo("280000"))); + } + + @Test + public void createsParseableMessage() { + assertThat(message.getMessageBody(), is(equalTo("someData".getBytes()))); + } +} diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java index fb3f7082e9..3667a9d91e 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/DeserializeRetrievedDataFromDirectoryTest.java @@ -45,6 +45,7 @@ import com.raytheon.uf.common.util.TestUtil; * Feb 01, 2013 1543 djohnson Initial creation * Feb 12, 2013 1543 djohnson Can only test the retrieval response is now not null. * Feb 15, 2013 1543 djohnson Some renames. + * Mar 05, 2013 1647 djohnson Pass wmo header strategy to constructor. * * * @@ -70,7 +71,8 @@ public class DeserializeRetrievedDataFromDirectoryTest { RetrievalResponseXml retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE .get(); - new SerializeRetrievedDataToDirectory(directory) + new SerializeRetrievedDataToDirectory(directory, + new AlwaysSameWmoHeader("SMYG10 LYBM 280000")) .processRetrievedPluginDataObjects(retrievalPluginDataObjects); final RetrievalResponseXml restored = service @@ -88,7 +90,8 @@ public class DeserializeRetrievedDataFromDirectoryTest { RetrievalResponseXml retrievalPluginDataObjects = RetrievalPluginDataObjectsFixture.INSTANCE .get(); - new SerializeRetrievedDataToDirectory(directory) + new SerializeRetrievedDataToDirectory(directory, + new AlwaysSameWmoHeader("SMYG10 LYBM 280000")) .processRetrievedPluginDataObjects(retrievalPluginDataObjects); service.findRetrievals(); diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandlerTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandlerTest.java index feaaaee5c7..67898d87f9 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandlerTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalHandlerTest.java @@ -29,6 +29,8 @@ import java.util.concurrent.TimeUnit; import org.junit.Test; +import com.raytheon.uf.common.time.domain.Durations; +import com.raytheon.uf.common.time.domain.api.IDuration; import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; /** @@ -46,6 +48,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; * Jan 30, 2013 1543 djohnson RetrievalTask now requires a Network. * Feb 05, 2013 1580 mpduff EventBus refactor. * Feb 07, 2013 1543 djohnson Move test to its proper test class, as per peer review comments. + * Mar 04, 2013 1647 djohnson RetrievalTasks are now scheduled via constructor parameter. * * * @@ -55,6 +58,12 @@ import com.raytheon.uf.edex.datadelivery.retrieval.db.IRetrievalDao; public class RetrievalHandlerTest { + private static final IDuration RETRIEVAL_TASK_FREQUENCY = Durations.of(5, + TimeUnit.MINUTES); + + private static final IDuration SUBNOTIFY_TASK_FREQUENCY = Durations.of(1, + TimeUnit.MINUTES); + private final ScheduledExecutorService executorService = mock(ScheduledExecutorService.class); private final IRetrievalDao mockDao = mock(IRetrievalDao.class); @@ -63,11 +72,9 @@ public class RetrievalHandlerTest { private final SubscriptionNotifyTask subNotifyTask = mock(SubscriptionNotifyTask.class); - private final IRetrievalResponseCompleter retrievalCompleter = mock(IRetrievalResponseCompleter.class); - private final RetrievalHandler handler = new RetrievalHandler( executorService, mockDao, Arrays.asList(retrievalTask), - subNotifyTask); + subNotifyTask, RETRIEVAL_TASK_FREQUENCY, SUBNOTIFY_TASK_FREQUENCY); @Test public void testAllRunningRetrievalsAreResetToPendingOnConstruction() { @@ -82,14 +89,14 @@ public class RetrievalHandlerTest { } @Test - public void testRetrievalTaskIsScheduledEveryFiveMinutesWithInitialDelayOfOneMinute() { - verify(executorService).scheduleWithFixedDelay(retrievalTask, 1, 5, - TimeUnit.MINUTES); + public void testRetrievalTaskIsScheduledPerConstructorParameter() { + verify(executorService).scheduleWithFixedDelay(retrievalTask, 1, + RETRIEVAL_TASK_FREQUENCY.getMillis(), TimeUnit.MILLISECONDS); } @Test - public void testSubscriptionNotifyTaskIsScheduledEveryMinuteWithInitialDelayOfOneMinute() { - verify(executorService).scheduleWithFixedDelay(subNotifyTask, 1, 1, - TimeUnit.MINUTES); + public void testSubscriptionNotifyTaskIsScheduledPerConstructorParameter() { + verify(executorService).scheduleWithFixedDelay(subNotifyTask, 1, + SUBNOTIFY_TASK_FREQUENCY.getMillis(), TimeUnit.MILLISECONDS); } } diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java index 680fa9ae4d..28e7e1c663 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/RetrievalTaskTest.java @@ -77,6 +77,7 @@ import com.raytheon.uf.edex.datadelivery.retrieval.interfaces.IRetrievalResponse * Feb 07, 2013 1543 djohnson Add test to simulate SBN retrieval task behavior. * Feb 12, 2013 1543 djohnson Retrieval responses are now sent further down the chain. * Feb 15, 2013 1543 djohnson Class renames. + * Mar 05, 2013 1647 djohnson Pass wmo header strategy to constructor. * * * @@ -223,7 +224,8 @@ public class RetrievalTaskTest { final File testDirectory = TestUtil .setupTestClassDir(RetrievalTaskTest.class); IRetrievalPluginDataObjectsProcessor serializeToDirectory = new SerializeRetrievedDataToDirectory( - testDirectory); + testDirectory, new AlwaysSameWmoHeader( + "SMYG10 LYBM 280000")); RetrievalTask downloadTask = new RetrievalTask(Network.OPSNET, retrievalDataFinder, serializeToDirectory, diff --git a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java index 76eb218ebd..047af767c3 100644 --- a/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java +++ b/tests/unit/com/raytheon/uf/edex/datadelivery/retrieval/handlers/SerializeRetrievedDataToDirectoryTest.java @@ -42,6 +42,7 @@ import com.raytheon.uf.common.util.TestUtil; * ------------ ---------- ----------- -------------------------- * Feb 01, 2013 1543 djohnson Initial creation * Feb 15, 2013 1543 djohnson Class renames. + * Mar 05, 2013 1647 djohnson Pass wmo header strategy to constructor. * * * @@ -54,7 +55,7 @@ public class SerializeRetrievedDataToDirectoryTest { .setupTestClassDir(SerializeRetrievedDataToDirectoryTest.class); private final SerializeRetrievedDataToDirectory service = new SerializeRetrievedDataToDirectory( - directory); + directory, new AlwaysSameWmoHeader("SMYG10 LYBM 280000")); @BeforeClass public static void classSetUp() {