Example #1
0
 def test_too_many_messages(self):
     with self.assertRaises(TooManyMessagesException) as err:
         decode_msg(
             b'!AIVDM,2,1,1,A,538CQ>02A;h?D9QC800pu8@T>0P4l9E8L0000017Ah:;;5r50Ahm5;C0,0*07',
             b'!AIVDM,2,2,1,A,F@V@00000000000,2*35',
             b'!AIVDM,2,1,9,A,538CQ>02A;h?D9QC800pu8@T>0P4l9E8L0000017Ah:;;5r50Ahm5;C0,0*0F',
             b'!AIVDM,2,2,9,A,F@V@00000000000,2*3D',
         )
     self.assertEqual(str(err.exception),
                      "Got 4 messages, but fragment count is 2")
Example #2
0
    def test_decode_multiline_message(self):
        decoded = decode_msg(
            b'!AIVDM,2,1,1,A,538CQ>02A;h?D9QC800pu8@T>0P4l9E8L0000017Ah:;;5r50Ahm5;C0,0*07',
            b'!AIVDM,2,2,1,A,F@V@00000000000,2*35',
        )

        self.assertIsInstance(decoded, dict)
        self.assertEqual(decoded["mmsi"], "210035000")
        self.assertEqual(decoded["callsign"], "5BXT2")
        self.assertEqual(decoded["shipname"], "NORDIC HAMBURG")
        self.assertEqual(decoded["destination"], "CTT-LAYBY")

        decoded = decode_msg(
            b'!AIVDM,2,1,1,A,538CQ>02A;h?D9QC800pu8@T>0P4l9E8L0000017Ah:;;5r50Ahm5;C0,0*07',
            b'!AIVDM,2,2,1,A,F@V@00000000000,2*35',
            b'!AIVDM,2,1,9,A,538CQ>02A;h?D9QC800pu8@T>0P4l9E8L0000017Ah:;;5r50Ahm5;C0,0*0F',
            b'!AIVDM,2,2,9,A,F@V@00000000000,2*3D',
        )
Example #3
0
def test_decode_encode():
    """Create each message with default values and test that it can be decoded again"""
    mmsi = 123
    for typ in ENCODE_MSG.keys():
        encoded = encode_dict({
            'mmsi': mmsi,
            'dest_mmsi': 656634123,
            'type': typ
        })
        decoded = decode_msg(*encoded)

        assert decoded['mmsi'] == '000000123'
        if 'dest_mmsi' in decoded:
            assert decoded['dest_mmsi'] == '656634123'
Example #4
0
    def test_multipart_error_message(self):
        """Refer to issue #37"""
        msg_1 = "!AIVDM,2,1,0,A,539p4OT00000@7W3K@08ThiLE8@E:0000000001S0h9135Pl?0R0C@UDQp00,0*68"
        msg_2 = "!AIVDM,2,2,0,A,00000000000,2*24"

        with self.assertRaises(MissingMultipartMessageException) as err:
            decode_msg(msg_1)
        self.assertEqual(str(err.exception), "Missing fragment numbers: [2]")

        with self.assertRaises(MissingMultipartMessageException) as err:
            decode_msg(msg_2)
        self.assertEqual(str(err.exception), "Missing fragment numbers: [1]")

        with self.assertRaises(MissingMultipartMessageException) as err:
            decode_msg(
                "!AIVDM,3,2,0,A,539p4OT00000@7W3K@08ThiLE8@E:0000000001S0h9135Pl?0R0C@UDQp00,0*68",
            )
        self.assertEqual(str(err.exception),
                         "Missing fragment numbers: [1, 3]")

        decode_msg(msg_1, msg_2)
Example #5
0
    def test_empty_channel(self):
        msg = b"!AIVDO,1,1,,,B>qc:003wk?8mP=18D3Q3wgTiT;T,0*13"

        self.assertEqual(NMEAMessage(msg).channel, "")

        content = decode_msg(msg)
        self.assertEqual(content["type"], 18)
        self.assertEqual(content["repeat"], 0)
        self.assertEqual(content["mmsi"], "1000000000")
        self.assertEqual(format(content["speed"], ".1f"), "102.3")
        self.assertEqual(content["accuracy"], 0)
        self.assertEqual(str(content["lon"]), "181.0")
        self.assertEqual(str(content["lat"]), "91.0")
        self.assertEqual(str(content["course"]), "360.0")
        self.assertEqual(content["heading"], 511)
        self.assertEqual(content["second"], 31)
        self.assertEqual(content["regional"], 0)
        self.assertEqual(content["cs"], 1)
        self.assertEqual(content["display"], 0)
        self.assertEqual(content["band"], 1)
        self.assertEqual(content["radio"], 410340)
Example #6
0
    def test_msg_with_more_that_82_chars_payload(self):
        content = decode_msg(
            "!AIVDM,1,1,,B,53ktrJ82>ia4=50<0020<5=@Dhv0t8T@u<0000001PV854Si0;mR@CPH13p0hDm1C3h0000,2*35"
        )

        self.assertEqual(content["type"], 5)
        self.assertEqual(content["mmsi"], "255801960")
        self.assertEqual(content["repeat"], 0)
        self.assertEqual(content["ais_version"], 2)
        self.assertEqual(content["imo"], 9356945)
        self.assertEqual(content["callsign"], "CQPC")
        self.assertEqual(content["shipname"], "CASTELO OBIDOS")
        self.assertEqual(content["shiptype"], ShipType.NotAvailable)
        self.assertEqual(content["to_bow"], 12)
        self.assertEqual(content["to_stern"], 38)
        self.assertEqual(content["to_port"], 8)
        self.assertEqual(content["to_starboard"], 5)
        self.assertEqual(content["epfd"], EpfdType.GPS)
        self.assertEqual(content["month"], 2)
        self.assertEqual(content["day"], 7)
        self.assertEqual(content["hour"], 17)
        self.assertEqual(content["minute"], 0)
        self.assertEqual(content["draught"], 4.7)
        self.assertEqual(content["destination"], "VIANA DO CASTELO")
Example #7
0
 def test_bytes_valid(self):
     msg = decode_msg(b"!AIVDM,1,1,,A,403Ovl@000Htt<tSF0l4Q@100`Pq,0*28")
     self.assertIsNotNone(msg)
     self.assertIsInstance(msg, dict)
     self.assertEqual(msg['mmsi'], "003669713")
     self.assertEqual(msg['lon'], 181.0)
Example #8
0
 def should_raise(msg):
     with self.assertRaises(InvalidNMEAMessageException):
         decode_msg(msg)
Example #9
0
 def test_str_invalid(self):
     with self.assertRaises(InvalidNMEAMessageException):
         decode_msg("AIVDM,1,1,,A")