예제 #1
0
    def test_service_match_offer(self):
        host_1 = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        host_2 = ipaddress.ip_address("203.0.113.78")
        port = 4321

        ep_1 = hdr.IPv6EndpointOption(address=host_1,
                                      l4proto=hdr.L4Protocols.TCP,
                                      port=port)
        ep_2 = hdr.IPv6EndpointOption(address=host_2,
                                      l4proto=hdr.L4Protocols.TCP,
                                      port=port)

        offer = hdr.SOMEIPSDEntry(
            sd_type=hdr.SOMEIPSDEntryType.OfferService,
            service_id=0,
            instance_id=0xFEEE,
            major_version=0xAA,
            minver_or_counter=0x123456,
            ttl=3,
            options_1=(ep_1, ),
            options_2=(ep_2, ),
        )

        srv = cfg.Service(
            service_id=0x0000,
            instance_id=0xFEEE,
            major_version=0xAA,
            minor_version=0x123456,
            options_2=(ep_2, ),
        )

        self.assertTrue(srv.matches_offer(offer))
        self.assertFalse(replace(srv, service_id=1).matches_offer(offer))
        self.assertFalse(replace(srv, instance_id=0xBBBB).matches_offer(offer))
        self.assertTrue(replace(srv, instance_id=0xFFFF).matches_offer(offer))
        self.assertFalse(replace(srv, major_version=0xBB).matches_offer(offer))
        self.assertTrue(replace(srv, major_version=0xFF).matches_offer(offer))
        self.assertFalse(
            replace(srv, minor_version=0xBBBBBB).matches_offer(offer))
        self.assertTrue(
            replace(srv, minor_version=0xFFFFFFFF).matches_offer(offer))

        # ttl=0 is StopOffer, should still match
        stop_offer = replace(offer, ttl=0)
        self.assertTrue(srv.matches_offer(stop_offer))

        with self.assertRaises(ValueError):
            srv.matches_offer(
                replace(stop_offer, sd_type=hdr.SOMEIPSDEntryType.FindService))
예제 #2
0
    def test_eventgroup_for_service_no_match(self):
        sockaddr = "203.0.113.78", 4321

        evgr = cfg.Eventgroup(
            service_id=0xDEAD,
            instance_id=0x42,
            major_version=23,
            eventgroup_id=0xF00BAA,
            sockname=sockaddr,
            protocol=hdr.L4Protocols.TCP,
        )

        host_1 = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        host_2 = ipaddress.ip_address("203.0.113.78")
        port = 4321

        ep_1 = hdr.IPv6EndpointOption(address=host_1,
                                      l4proto=hdr.L4Protocols.UDP,
                                      port=port)
        ep_2 = hdr.IPv4EndpointOption(address=host_2,
                                      l4proto=hdr.L4Protocols.UDP,
                                      port=port)
        srv = cfg.Service(
            service_id=0x0000,
            instance_id=0xFFFF,
            major_version=0xAA,
            minor_version=0x123456,
            options_1=(ep_1, ),
            options_2=(ep_2, ),
        )

        self.assertIsNone(evgr.for_service(srv))
예제 #3
0
 async def asyncSetUp(self):  # noqa: N802
     inst = 12
     self.prot = ExampleService(inst)
     self.mock = self.prot.transport = unittest.mock.Mock()
     self.endpoint = hdr.IPv6EndpointOption(
         ipaddress.IPv6Address(self.fake_addr[0]),
         port=self.fake_addr[1],
         l4proto=hdr.L4Protocols.UDP,
     )
예제 #4
0
    def test_service_convert_offer(self):
        host_1 = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        host_2 = ipaddress.ip_address("203.0.113.78")
        port = 4321

        ep_1 = hdr.IPv6EndpointOption(address=host_1,
                                      l4proto=hdr.L4Protocols.TCP,
                                      port=port)
        ep_2 = hdr.IPv4EndpointOption(address=host_2,
                                      l4proto=hdr.L4Protocols.TCP,
                                      port=port)

        srv = cfg.Service(
            service_id=0x0000,
            instance_id=0xFFFF,
            major_version=0xAA,
            minor_version=0x123456,
            options_1=(ep_1, ),
            options_2=(ep_2, ),
        )
        offer = hdr.SOMEIPSDEntry(
            sd_type=hdr.SOMEIPSDEntryType.OfferService,
            service_id=0,
            instance_id=0xFFFF,
            major_version=0xAA,
            minver_or_counter=0x123456,
            ttl=3,
            options_1=(ep_1, ),
            options_2=(ep_2, ),
        )

        self.assertEqual(srv.create_offer_entry(), offer)
        self.assertEqual(cfg.Service.from_offer_entry(offer), srv)

        sd_hdr = hdr.SOMEIPSDHeader(entries=(offer, ))
        sd_hdr_assigned = sd_hdr.assign_option_indexes()

        with self.assertRaises(ValueError):
            cfg.Service.from_offer_entry(sd_hdr_assigned.entries[0])

        with self.assertRaises(ValueError):
            cfg.Service.from_offer_entry(
                hdr.SOMEIPSDEntry(
                    sd_type=hdr.SOMEIPSDEntryType.FindService,
                    service_id=0,
                    instance_id=0xFFFF,
                    major_version=0xAA,
                    minver_or_counter=0x123456,
                    ttl=3,
                ))
예제 #5
0
    def test_service_match_subscribe(self):
        host = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        port = 4321

        ep = hdr.IPv6EndpointOption(address=host,
                                    l4proto=hdr.L4Protocols.TCP,
                                    port=port)

        srv = cfg.Service(
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minor_version=0x333333,
            eventgroups=(23, 24, 25),
        )

        subscribe = hdr.SOMEIPSDEntry(
            sd_type=hdr.SOMEIPSDEntryType.Subscribe,
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minver_or_counter=(12 << 16) | 23,
            ttl=3,
            options_1=(ep, ),
        )

        self.assertTrue(srv.matches_subscribe(subscribe))
        self.assertFalse(
            replace(srv, service_id=1).matches_subscribe(subscribe))
        self.assertFalse(
            replace(srv, instance_id=0xBBBB).matches_subscribe(subscribe))
        self.assertTrue(
            replace(srv, instance_id=0xFFFF).matches_subscribe(subscribe))
        self.assertFalse(
            replace(srv, major_version=0xBB).matches_subscribe(subscribe))
        self.assertTrue(
            replace(srv, major_version=0xFF).matches_subscribe(subscribe))
        self.assertFalse(
            replace(srv, eventgroups=(1, 2, 3)).matches_subscribe(subscribe))

        # ttl=0 is StopSubscribe, should still match
        stop_subscribe = replace(subscribe, ttl=0)
        self.assertTrue(srv.matches_subscribe(stop_subscribe))

        with self.assertRaises(ValueError):
            srv.matches_subscribe(
                replace(stop_subscribe,
                        sd_type=hdr.SOMEIPSDEntryType.FindService))
예제 #6
0
    def test_service_match_find(self):
        host = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        port = 4321

        ep = hdr.IPv6EndpointOption(address=host,
                                    l4proto=hdr.L4Protocols.TCP,
                                    port=port)

        srv = cfg.Service(
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minor_version=0x333333,
            options_1=(ep, ),
        )

        find = hdr.SOMEIPSDEntry(
            sd_type=hdr.SOMEIPSDEntryType.FindService,
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minver_or_counter=0x333333,
            ttl=3,
        )

        self.assertTrue(srv.matches_find(find))
        self.assertFalse(srv.matches_find(replace(find, service_id=0x0101)))
        self.assertFalse(srv.matches_find(replace(find, instance_id=0x0101)))
        self.assertTrue(srv.matches_find(replace(find, instance_id=0xFFFF)))
        self.assertFalse(srv.matches_find(replace(find, major_version=0x0B)))
        self.assertTrue(srv.matches_find(replace(find, major_version=0xFF)))
        self.assertFalse(
            srv.matches_find(replace(find, minver_or_counter=0x0B0B0B)))
        self.assertTrue(
            srv.matches_find(replace(find, minver_or_counter=0xFFFFFFFF)))

        with self.assertRaises(ValueError):
            srv.matches_find(
                replace(find, sd_type=hdr.SOMEIPSDEntryType.OfferService))
예제 #7
0
    def test_service_match_service(self):
        host = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        port = 4321

        ep = hdr.IPv6EndpointOption(address=host,
                                    l4proto=hdr.L4Protocols.TCP,
                                    port=port)

        srv = cfg.Service(
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minor_version=0x333333,
            options_1=(ep, ),
        )

        other = cfg.Service(
            service_id=0x1111,
            instance_id=0x2222,
            major_version=0x33,
            minor_version=0x333333,
        )

        self.assertTrue(srv.matches_service(other))
        self.assertFalse(srv.matches_service(replace(other,
                                                     service_id=0x0101)))
        self.assertFalse(
            srv.matches_service(replace(other, instance_id=0x0101)))
        self.assertTrue(srv.matches_service(replace(other,
                                                    instance_id=0xFFFF)))
        self.assertFalse(
            srv.matches_service(replace(other, major_version=0x0B)))
        self.assertTrue(srv.matches_service(replace(other,
                                                    major_version=0xFF)))
        self.assertFalse(
            srv.matches_service(replace(other, minor_version=0x0B0B0B)))
        self.assertTrue(
            srv.matches_service(replace(other, minor_version=0xFFFFFFFF)))
예제 #8
0
    def test_eventgroup_subscribe_ipv6(self):
        host = ipaddress.ip_address("2001:db8::1234:5678:dead:beef")
        port = 4321
        results = socket.getaddrinfo(
            str(host),
            port,
            type=socket.SOCK_STREAM,
            proto=socket.IPPROTO_TCP,
        )
        if not results:
            raise RuntimeError("could not get addr info")
        sockaddr = results[0][4]

        evgr = cfg.Eventgroup(
            service_id=0xDEAD,
            instance_id=0x42,
            major_version=23,
            eventgroup_id=0xF00BAA,
            sockname=sockaddr,
            protocol=hdr.L4Protocols.TCP,
        )

        ep = hdr.IPv6EndpointOption(address=host,
                                    l4proto=hdr.L4Protocols.TCP,
                                    port=port)

        entry = hdr.SOMEIPSDEntry(
            sd_type=hdr.SOMEIPSDEntryType.Subscribe,
            service_id=0xDEAD,
            instance_id=0x42,
            major_version=23,
            ttl=3,
            minver_or_counter=0xF00BAA,
            options_1=(ep, ),
        )

        self.assertEqual(evgr.create_subscribe_entry(), entry)