/* Copyright (c) 2011 Danish Maritime Authority. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dk.dma.ais.sentence; import java.util.Date; import org.junit.Assert; import org.junit.Test; import dk.dma.ais.binary.SixbitException; import dk.dma.ais.message.AisMessage; import dk.dma.ais.message.AisMessage1; import dk.dma.ais.message.AisMessage4; import dk.dma.ais.message.AisMessage6; import dk.dma.ais.message.AisMessage8; import dk.dma.ais.message.AisMessage27; import dk.dma.ais.message.AisMessageException; import dk.dma.ais.message.binary.Capability; import dk.dma.ais.message.binary.MetHyd11; public class MessageTest { @Test public void testMessage1() throws SentenceException, SixbitException, AisMessageException { Vdm vdm = new Vdm(); int result = vdm.parse("!AIVDM,1,1,,B,19NS7Sp02wo?HETKA2K6mUM20<L=,0*27\r\n"); Assert.assertEquals("vdm parse failed", 0, result); Assert.assertEquals("wrong message id", 1, vdm.getMsgId()); AisMessage1 msg = (AisMessage1) AisMessage.getInstance(vdm); Assert.assertEquals("msgid", 1, msg.getMsgId()); Assert.assertEquals("repeat", 0, msg.getRepeat()); Assert.assertEquals("userid", 636012431, msg.getUserId()); Assert.assertEquals("nav_status", 8, msg.getNavStatus()); Assert.assertEquals("rot", 0, msg.getRot()); Assert.assertEquals("sog", 191, msg.getSog()); Assert.assertEquals("pos_acc", 1, msg.getPosAcc()); Assert.assertEquals("longitude", -73481550, msg.getPos().getLongitude()); Assert.assertEquals("latitude", 28590700, msg.getPos().getLatitude()); Assert.assertEquals("cog", 1750, msg.getCog()); Assert.assertEquals("true_heading", 174, msg.getTrueHeading()); Assert.assertEquals("utc_sec", 33, msg.getUtcSec()); Assert.assertEquals("special_man_indicator", 0, msg.getSpecialManIndicator()); Assert.assertEquals("spare", 0, msg.getSpare()); Assert.assertEquals("raim", 0, msg.getRaim()); Assert.assertEquals("sync_state", 0, msg.getSyncState()); Assert.assertEquals("slot_timeout", 3, msg.getSlotTimeout()); Assert.assertEquals("sub_message", 1805, msg.getSubMessage()); } @Test public void testMessage4() throws SentenceException, SixbitException, AisMessageException { Vdm vdm = new Vdm(); int result = vdm.parse("!AIVDM,1,1,,A,403OwpiuIKl:Ro=sbvK=CG700<3b,0*5E"); Assert.assertEquals("vdm parse failed", 0, result); Assert.assertEquals("wrong message id", 4, vdm.getMsgId()); AisMessage4 msg = (AisMessage4) AisMessage.getInstance(vdm); Assert.assertEquals("msgid", 4, msg.getMsgId()); Assert.assertEquals("repeat", 0, msg.getRepeat()); Assert.assertEquals("userid", 3669987, msg.getUserId()); Assert.assertEquals("utc_year", 2006, msg.getUtcYear()); Assert.assertEquals("utc_month", 5, msg.getUtcMonth()); Assert.assertEquals("utc_day", 23, msg.getUtcDay()); Assert.assertEquals("utc_hour", 20, msg.getUtcHour()); Assert.assertEquals("utc_minute", 10, msg.getUtcMinute()); Assert.assertEquals("utc_second", 34, msg.getUtcSecond()); Assert.assertEquals("pos_acc", 1, msg.getPosAcc()); Assert.assertEquals("longitude", -73671329, msg.getPos().getLongitude()); Assert.assertEquals("latitude", 28529500, msg.getPos().getLatitude()); Assert.assertEquals("pos_type", 7, msg.getPosType()); Assert.assertEquals("spare", 0, msg.getSpare()); Assert.assertEquals("raim", 0, msg.getRaim()); Assert.assertEquals("sync_state", 0, msg.getSyncState()); Assert.assertEquals("slot_timeout", 3, msg.getSlotTimeout()); Assert.assertEquals("sub_message", 234, msg.getSubMessage()); } @Test public void testMessage6() throws SentenceException, SixbitException, AisMessageException { Vdm vdm = new Vdm(); int result = vdm.parse("!BSVDM,1,1,,B,63@oSO00QNUB00=:>hTB6P,4*27"); Assert.assertEquals("vdm parse failed", 0, result); Assert.assertEquals("wrong message id", 6, vdm.getMsgId()); AisMessage6 msg = (AisMessage6) AisMessage.getInstance(vdm); Assert.assertEquals("msgid", 6, msg.getMsgId()); Assert.assertEquals("repeat", 0, msg.getRepeat()); Assert.assertEquals("userid", 219014012, msg.getUserId()); Assert.assertEquals("dac", 0, msg.getDac()); Assert.assertEquals("fi", 3, msg.getFi()); Assert.assertEquals("destination", 2194004, msg.getDestination()); Assert.assertEquals("retransmit", 1, msg.getRetransmit()); Capability capability = (Capability) msg.getApplicationMessage(); Assert.assertNotNull(capability); Assert.assertEquals("reqDac", 296, capability.getReqDac()); } @Test public void testMessage8() throws SentenceException, SixbitException, AisMessageException { // Swedish met hyd Vdm vdm = new Vdm(); int result = vdm.parse("!BSVDM,1,1,,A,802R5Ph0BkC>ohEUKTltOwwwwwwwwwwwwwwPA>08r@2Tlwwwwwwwwwwwwwt,2*7F"); Assert.assertEquals("vdm parse failed", 0, result); Assert.assertEquals("wrong message id", 8, vdm.getMsgId()); AisMessage8 msg = (AisMessage8) AisMessage.getInstance(vdm); System.out.println(msg); Assert.assertEquals("msgid", 8, msg.getMsgId()); Assert.assertEquals("repeat", 0, msg.getRepeat()); Assert.assertEquals("userid", 2655619, msg.getUserId()); Assert.assertEquals("dac", 1, msg.getDac()); Assert.assertEquals("fi", 11, msg.getFi()); MetHyd11 metHyd = (MetHyd11) msg.getApplicationMessage(); Assert.assertNotNull(metHyd); System.out.println("length of data: " + msg.getData().getLength()); System.out.println("bits index : " + msg.getData().getReadPtr()); System.out.println("pos: " + metHyd.getPos().getLatitude() / 1000.0 / 60.0 + " " + metHyd.getPos().getLongitude() / 1000.0 / 60.0); System.out.println(metHyd); // Irish met hyd vdm = new Vdm(); result = vdm.parse("!BSVDM,2,1,6,A,8@2Ha<00Bk8oOgmG0gU7V3:cErrwwwdjwwwwwwwwwwwwwwwwwwwwwwww,0*1C"); Assert.assertEquals("vdm parse failed", 1, result); result = vdm.parse("!BSVDM,2,2,6,A,wt0,2*38"); Assert.assertEquals("vdm parse failed", 0, result); Assert.assertEquals("wrong message id", 8, vdm.getMsgId()); msg = (AisMessage8) AisMessage.getInstance(vdm); System.out.println("Irish MetHyd: " + msg); Assert.assertEquals("msgid", 8, msg.getMsgId()); Assert.assertEquals("repeat", 1, msg.getRepeat()); Assert.assertEquals("userid", 2500912, msg.getUserId()); Assert.assertEquals("dac", 1, msg.getDac()); Assert.assertEquals("fi", 11, msg.getFi()); metHyd = (MetHyd11) msg.getApplicationMessage(); Assert.assertNotNull(metHyd); System.out.println("Irish MetHyd: " + metHyd); } @Test public void testMsg27() throws SentenceException, AisMessageException, SixbitException { String sentence = "!AIVDM,1,1,,A,KLr:8BvSGc`=CSLA,0*52"; Vdm vdm = new Vdm(); int result = vdm.parse(sentence); Assert.assertEquals("vdm parse failed", result, 0); Assert.assertEquals("wrong message id", 27, vdm.getMsgId()); AisMessage27 msg = (AisMessage27) AisMessage.getInstance(vdm); Assert.assertEquals(msg.getCog(), 452); Assert.assertEquals(msg.getGnssPosStatus(), 0); Assert.assertEquals(msg.getPos().getRawLatitude(), 67239); Assert.assertEquals(msg.getPos().getRawLongitude(), 55214); Assert.assertEquals(msg.getMsgId(), 27); Assert.assertEquals(msg.getNavStatus(), 10); Assert.assertEquals(msg.getPosAcc(), 1); Assert.assertEquals(msg.getRaim(), 1); Assert.assertEquals(msg.getSog(), 6); Assert.assertEquals(msg.getSpare(), 1); } @Test public void decodeMsg5Test() throws SentenceException, SixbitException, AisMessageException { String line1 = "!BSVDM,2,1,1,B,53@oTQ@2Ad4tuL9S:21=@EHq>2222098D4dE:20l1p?555o@0>QTQA1DR@j@,0*66"; String line2 = "!BSVDM,2,2,1,B,H8888888880,2*4F"; Vdm vdm = new Vdm(); int result = vdm.parse(line1); Assert.assertEquals("Failed to parse sentenceStr 5 first line", result, 1); result = vdm.parse(line2); Assert.assertEquals("Failed to parse sentenceStr 5 second line", result, 0); AisMessage msg = AisMessage.getInstance(vdm); Assert.assertEquals("Not sentenceStr 5", msg.getMsgId(), 5); } @Test public void decodeMsg24Test() throws SentenceException, SixbitException, AisMessageException { String line = "!BSVDM,1,1,,A,H3uFAjTT653hhhiC;1GPPP1`0220,0*62"; Vdm vdm = new Vdm(); int result = vdm.parse(line); Assert.assertEquals("Failed to parse sentenceStr 24", result, 0); AisMessage msg = AisMessage.getInstance(vdm); Assert.assertEquals("Not sentenceStr 24", msg.getMsgId(), 24); } @Test public void decodeMssisTimestamp() throws Exception { String sentence = "!AIVDM,1,1,,B,14pWHb?P03rwO<F:RQOnROw<25bd,0*3E,1357134218\r\n"; Vdm vdm = new Vdm(); int result = vdm.parse(sentence); Assert.assertEquals("Failed to parse", result, 0); Date timestamp = vdm.getMssisTimestamp(); Assert.assertEquals(1357134218000L, timestamp.getTime()); sentence = "!AIVDM,1,1,,B,14pWHb?P03rwO<F:RQOnROw<25bd,0*3E"; vdm = new Vdm(); result = vdm.parse(sentence); Assert.assertEquals("Failed to parse", result, 0); timestamp = vdm.getMssisTimestamp(); Assert.assertTrue(timestamp == null); sentence = "!AIVDM,1,1,,B,14pWHb?P03rwO<F:RQOnROw<25bd,0*3E,1357134218,1357134220,1357134222"; vdm = new Vdm(); result = vdm.parse(sentence); Assert.assertEquals("Failed to parse", result, 0); timestamp = vdm.getMssisTimestamp(); Assert.assertEquals(1357134218000L, timestamp.getTime()); } @Test public void decodeMsg17() throws SentenceException, AisMessageException, SixbitException { String sentence = "!AIVDM,1,1,,,A0476C1=qHWw82JrVgH`4?mmsRL1,0*09"; Vdm vdm = new Vdm(); int result = vdm.parse(sentence); Assert.assertEquals("Failed to parse", result, 0); AisMessage msg = AisMessage.getInstance(vdm); System.out.println("sentenceStr: " + msg); } @Test public void decodeMsg19() throws SentenceException, AisMessageException, SixbitException { String sentence = "!AIVDM,1,1,,A,C6:`MUh00:;5umTN;<UIM7v0jc0hBM0@bOSQkWf00000S3P62R0P,0*05"; Vdm vdm = new Vdm(); int result = vdm.parse(sentence); Assert.assertEquals("Failed to parse", result, 0); AisMessage msg = AisMessage.getInstance(vdm); System.out.println("sentenceStr: " + msg); } }