summaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorWataru Ishida <ishida.wataru@lab.ntt.co.jp>2016-11-12 09:01:33 +0000
committerWataru Ishida <ishida.wataru@lab.ntt.co.jp>2016-11-14 00:58:25 +0000
commitb77dc6aa54d0d2ebe4858ab688a10a44ef4cf773 (patch)
treeb17eabc69fee61dde9d26dca39060970f4033c9c /test
parentb68491f62cff983d360753130aa4ff77ae753602 (diff)
policy: fix bug of policy with multiple statements
policy can have multiple statements. In each statement, when condition is matched, route-action is finally evaluated after actions with mods. When route-action is 'none', we contine to next statement if it exists. When route-action is 'accept' or 'reject', we stop proceeding. This patch fixes a bug that route-action can't be set to 'none' which means route-action always be set to 'accept' or 'reject' and can't proceed to the next statement. Signed-off-by: Wataru Ishida <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'test')
-rw-r--r--test/lib/gobgp.py10
-rw-r--r--test/scenario_test/global_policy_test.py16
-rw-r--r--test/scenario_test/route_server_policy_test.py56
3 files changed, 54 insertions, 28 deletions
diff --git a/test/lib/gobgp.py b/test/lib/gobgp.py
index 29a116a8..9d2b4237 100644
--- a/test/lib/gobgp.py
+++ b/test/lib/gobgp.py
@@ -100,6 +100,12 @@ class GoBGPContainer(BGPContainer):
return p['value']
return None
+ def _get_med(self, path):
+ for p in path['attrs']:
+ if p['type'] == BGP_ATTR_TYPE_MULTI_EXIT_DISC:
+ return p['metric']
+ return None
+
def _trigger_peer_cmd(self, cmd, peer):
if peer not in self.peers:
raise Exception('not found peer {0}'.format(peer.router_id))
@@ -132,6 +138,7 @@ class GoBGPContainer(BGPContainer):
p["nexthop"] = self._get_nexthop(p)
p["aspath"] = self._get_as_path(p)
p["local-pref"] = self._get_local_pref(p)
+ p["med"] = self._get_med(p)
p["prefix"] = k
dsts.append({'paths': v, 'prefix': k})
return dsts
@@ -146,6 +153,7 @@ class GoBGPContainer(BGPContainer):
p["nexthop"] = self._get_nexthop(p)
p["aspath"] = self._get_as_path(p)
p["local-pref"] = self._get_local_pref(p)
+ p["med"] = self._get_med(p)
p["prefix"] = k
dsts.append({'paths': v, 'prefix': k})
return dsts
@@ -165,6 +173,7 @@ class GoBGPContainer(BGPContainer):
p["nexthop"] = self._get_nexthop(p)
p["aspath"] = self._get_as_path(p)
p["local-pref"] = self._get_local_pref(p)
+ p["med"] = self._get_med(p)
queue.put(p)
t = Thread(target=monitor)
@@ -185,6 +194,7 @@ class GoBGPContainer(BGPContainer):
p["aspath"] = self._get_as_path(p)
p["prefix"] = p['nlri']['prefix']
p["local-pref"] = self._get_local_pref(p)
+ p["med"] = self._get_med(p)
return ret
def get_adj_rib_in(self, peer, prefix='', rf='ipv4'):
diff --git a/test/scenario_test/global_policy_test.py b/test/scenario_test/global_policy_test.py
index 4c5bbb55..0d1e1ba9 100644
--- a/test/scenario_test/global_policy_test.py
+++ b/test/scenario_test/global_policy_test.py
@@ -248,6 +248,22 @@ class GoBGPTestBase(unittest.TestCase):
num4 = len(self.gobgp.get_adj_rib_out(q1))
self.assertTrue(num1 + 1 == num4)
+ def test_17_multi_statement(self):
+ self.gobgp.local('gobgp policy statement st3 add action med set 100')
+ self.gobgp.local('gobgp policy statement st4 add action local-pref 100')
+ self.gobgp.local('gobgp policy add p3 st3 st4')
+ self.gobgp.local('gobgp global policy import set p3 default accept')
+
+ self.gobgp.add_route('10.70.0.0/24')
+ time.sleep(1)
+ rib = self.gobgp.get_global_rib('10.70.0.0/24')
+ self.assertTrue(len(rib) == 1)
+ self.assertTrue(len(rib[0]['paths']) == 1)
+ path = rib[0]['paths'][0]
+ self.assertTrue(path['med'] == 100)
+ self.assertTrue(path['local-pref'] == 100)
+
+
if __name__ == '__main__':
if os.geteuid() is not 0:
diff --git a/test/scenario_test/route_server_policy_test.py b/test/scenario_test/route_server_policy_test.py
index 181af895..6bf02eb0 100644
--- a/test/scenario_test/route_server_policy_test.py
+++ b/test/scenario_test/route_server_policy_test.py
@@ -114,7 +114,7 @@ class ImportPolicy(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -180,7 +180,7 @@ class ExportPolicy(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -266,7 +266,7 @@ class ImportPolicyUpdate(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -313,7 +313,7 @@ class ImportPolicyUpdate(object):
st0 = {'name': 'st0',
'conditions': {'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -393,7 +393,7 @@ class ExportPolicyUpdate(object):
st0 = {'name': 'st0',
'conditions': {'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -440,7 +440,7 @@ class ExportPolicyUpdate(object):
st0 = {'name': 'st0',
'conditions': {'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -536,7 +536,7 @@ class ImportPolicyIPV6(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -605,7 +605,7 @@ class ExportPolicyIPV6(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -687,7 +687,7 @@ class ImportPolicyIPV6Update(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -731,7 +731,7 @@ class ImportPolicyIPV6Update(object):
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
'actions': {
- 'route-disposition': {'accept-route': False}}}
+ 'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -808,7 +808,7 @@ class ExportPolicyIPv6Update(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -851,7 +851,7 @@ class ExportPolicyIPv6Update(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -902,7 +902,7 @@ class ImportPolicyAsPathLengthCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'as-path-length': {'operator': 'ge',
'value': 10}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -962,7 +962,7 @@ class ImportPolicyAsPathCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-as-path-set': {'as-path-set': 'as0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1014,7 +1014,7 @@ class ImportPolicyAsPathAnyCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-as-path-set': {'as-path-set': 'as0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1066,7 +1066,7 @@ class ImportPolicyAsPathOriginCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-as-path-set': {'as-path-set': 'as0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1118,7 +1118,7 @@ class ImportPolicyAsPathOnlyCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-as-path-set': {'as-path-set': 'as0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1172,7 +1172,7 @@ class ImportPolicyAsPathMismatchCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-community-set': {'community-set': 'cs0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1232,7 +1232,7 @@ class ImportPolicyCommunityCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-community-set': {'community-set': 'cs0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -1285,7 +1285,7 @@ class ImportPolicyCommunityRegexp(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions': {'match-community-set': {'community-set': 'cs0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2314,7 +2314,7 @@ class InPolicyReject(object):
st0 = {'name': 'st0',
'conditions':{'bgp-conditions':{'match-community-set':{'community-set': 'cs0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2448,7 +2448,7 @@ class InPolicyUpdate(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2496,7 +2496,7 @@ class InPolicyUpdate(object):
st0 = {'name': 'st0',
'conditions': {'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2795,7 +2795,7 @@ class ImportPolicyExCommunityOriginCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions':{'match-ext-community-set':{'ext-community-set': 'es0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2846,7 +2846,7 @@ class ImportPolicyExCommunityTargetCondition(object):
st0 = {'name': 'st0',
'conditions': {'bgp-conditions':{'match-ext-community-set':{'ext-community-set': 'es0'}}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -2899,7 +2899,7 @@ class InPolicyPrefixCondition(object):
st0 = {'name': 'st0',
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -3318,7 +3318,7 @@ class InPolicyUpdate2(object):
'conditions': {
'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}
@@ -3367,7 +3367,7 @@ class InPolicyUpdate2(object):
st0 = {'name': 'st0',
'conditions': {'match-prefix-set': {'prefix-set': ps0['prefix-set-name']},
'match-neighbor-set': {'neighbor-set': ns0['neighbor-set-name']}},
- 'actions': {'route-disposition': {'accept-route': False}}}
+ 'actions': {'route-disposition': {'reject-route': True}}}
policy = {'name': 'policy0',
'statements': [st0]}