def METHOD_NAME(self):
    tests = [
            ('mup_isd_route_ipv4', 'ipv4-mup', 'isd 10.0.0.0/24 rd 100:100 prefix 2001:db8:1:1::/64 locator-node-length 24 function-length 16 behavior ENDM_GTP4E rt 10:10 nexthop 2001::2', '2001::2'),
            ('mup_dsd_route_ipv4', 'ipv4-mup', 'dsd 10.0.0.1 rd 100:100 prefix 2001:db8:2:2::/64 locator-node-length 24 function-length 16 behavior END_DT4 rt 10:10 mup 10:10 nexthop 2001::2', '2001::2'),
            ('mup_t1st_route_ipv4', 'ipv4-mup', 't1st 192.168.0.1/32 rd 100:100 rt 10:10 teid 12345 qfi 9 endpoint 10.0.0.1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t1st_route_ipv4_hex_teid', 'ipv4-mup', 't1st 192.168.0.1/32 rd 100:100 rt 10:10 teid 0x00003039 qfi 9 endpoint 10.0.0.1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t1st_route_ipv4_ip_teid', 'ipv4-mup', 't1st 192.168.0.1/32 rd 100:100 rt 10:10 teid 0.0.0.100 qfi 9 endpoint 10.0.0.1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv4', 'ipv4-mup', 't2st 10.0.0.1 rd 100:100 rt 10:10 endpoint-address-length 64 teid 12345 mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv4_hex_teid', 'ipv4-mup', 't2st 10.0.0.1 rd 100:100 rt 10:10 endpoint-address-length 48 teid 0xbeef mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv4_ip_teid', 'ipv4-mup', 't2st 10.0.0.1 rd 100:100 rt 10:10 endpoint-address-length 64 teid 0.0.0.100 mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_isd_route_ipv6', 'ipv6-mup', 'isd 2001::/64 rd 100:100 prefix 2001:db8:1:1::/64 locator-node-length 24 function-length 16 behavior ENDM_GTP6E rt 10:10 nexthop 2001::2', '2001::2'),
            ('mup_dsd_route_ipv6', 'ipv6-mup', 'dsd 2001::1 rd 100:100 prefix 2001:db8:2:2::/64 locator-node-length 24 function-length 16 behavior END_DT6 rt 10:10 mup 10:10 nexthop 2001::2', '2001::2'),
            ('mup_t1st_route_ipv6', 'ipv6-mup', 't1st 2001:db8:1:1::1/128 rd 100:100 rt 10:10 teid 12345 qfi 9 endpoint 2001::1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t1st_route_ipv6_hex_teid', 'ipv6-mup', 't1st 2001:db8:1:1::1/128 rd 100:100 rt 10:10 teid 0x00003039 qfi 9 endpoint 2001::1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t1st_route_ipv6_ip_teid', 'ipv6-mup', 't1st 2001:db8:1:1::1/128 rd 100:100 rt 10:10 teid 0.0.0.100 qfi 9 endpoint 2001::1 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv6', 'ipv6-mup', 't2st 2001::1 rd 100:100 rt 10:10 endpoint-address-length 160 teid 12345 mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv6_hex_teid', 'ipv6-mup', 't2st 2001::1 rd 100:100 rt 10:10 endpoint-address-length 144 teid 0xbeef mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ('mup_t2st_route_ipv6_ip_teid', 'ipv6-mup', 't2st 2001::1 rd 100:100 rt 10:10 endpoint-address-length 160 teid 0.0.0.100 mup 10:10 nexthop 10.0.0.2', '10.0.0.2'),
            ]
    for msg, rf, route, nh in tests:
        with self.subTest(msg):
            self.g1.local('gobgp global rib add '
                          '-a {} {}'.format(rf, route))
            grib = self.g1.get_global_rib(rf=rf)
            log.debug('grib: {}'.format(grib))
            self.assertEqual(len(grib), 1)
            dst = grib[0]
            self.assertEqual(len(dst['paths']), 1)
            path = dst['paths'][0]
            self.assertEqual(path['nexthop'], nh)
            interval = 1
            timeout = int(30 / interval)
            done = False
            for _ in range(timeout):
                if done:
                    break
                grib = self.g2.get_global_rib(rf=rf)
                if len(grib) < 1:
                    time.sleep(interval)
                    continue
                self.assertEqual(len(grib), 1)
                dst = grib[0]
                self.assertEqual(len(dst['paths']), 1)
                path = dst['paths'][0]
                n_addrs = [i[1].split('/')[0] for i in self.g1.ip_addrs]
                self.assertEqual(path['nexthop'], nh)
                done = True
            self.g1.local('gobgp global rib del '
                          '-a {} {}'.format(rf, route))
            done = False
            for _ in range(timeout):
                if done:
                    break
                grib = self.g2.get_global_rib(rf=rf)
                if len(grib) > 0:
                    time.sleep(interval)
                    continue
                done = True