diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-21 05:53:20 -0800 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-12-21 05:53:20 -0800 |
commit | 704135410381e69e2f39fea84cd029b65148da01 (patch) | |
tree | 26e5bc4f06edeef78e1670a9b654f257ba3c9fa1 /table/table_manager_test.go | |
parent | 90b0bd64e0777f0023976f92d427920f9a6b5b21 (diff) |
table: implement Clone() to copy pathattributes in Path struct
In some cases, we need to modify pathattributes in Path and creates an
update message based on it. Clone() is used to avoid chaning the
pathattributes in the table.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Diffstat (limited to 'table/table_manager_test.go')
-rw-r--r-- | table/table_manager_test.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/table/table_manager_test.go b/table/table_manager_test.go index c0abcd84..c9d6e22a 100644 --- a/table/table_manager_test.go +++ b/table/table_manager_test.go @@ -2239,6 +2239,38 @@ func TestProcessBGPUpdate_multiple_nlri_ipv6(t *testing.T) { } +func TestModifyPathAttribute(t *testing.T) { + tm := NewTableManager() + + bgpMessage := update_fromR1() + peer := peerR1() + pList, wList, err := tm.ProcessUpdate(peer, bgpMessage) + assert.Equal(t, len(pList), 1) + assert.Equal(t, len(wList), 0) + assert.NoError(t, err) + + path0 := pList[0] + path1 := path0.Clone() + + _, attr1 := path1.GetPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC) + mx1 := attr1.(*bgp.PathAttributeMultiExitDisc) + original := mx1.Value + mx1.Value++ + + table := tm.Tables[RF_IPv4_UC] + dest := table.getDestination(table.tableKey(path0.GetNlri()).String()).(*IPv4Destination) + path2 := dest.getKnownPathList() + _, attr2 := path2[0].GetPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC) + mx2 := attr2.(*bgp.PathAttributeMultiExitDisc) + assert.Equal(t, original, mx2.Value) + + path3 := path0 + _, attr3 := path3.GetPathAttr(bgp.BGP_ATTR_TYPE_MULTI_EXIT_DISC) + mx3 := attr3.(*bgp.PathAttributeMultiExitDisc) + mx3.Value++ + assert.Equal(t, mx2.Value, mx3.Value) +} + func update_fromR1() *bgp.BGPMessage { origin := bgp.NewPathAttributeOrigin(0) |