diff options
Diffstat (limited to 'api/attribute_test.go')
-rw-r--r-- | api/attribute_test.go | 1415 |
1 files changed, 0 insertions, 1415 deletions
diff --git a/api/attribute_test.go b/api/attribute_test.go deleted file mode 100644 index 72b20bf1..00000000 --- a/api/attribute_test.go +++ /dev/null @@ -1,1415 +0,0 @@ -// Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -// implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package gobgpapi - -import ( - "net" - "testing" - - "github.com/golang/protobuf/ptypes" - "github.com/golang/protobuf/ptypes/any" - "github.com/osrg/gobgp/pkg/packet/bgp" - "github.com/stretchr/testify/assert" -) - -func Test_OriginAttribute(t *testing.T) { - assert := assert.New(t) - - input := &OriginAttribute{ - Origin: 0, // IGP - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewOriginAttributeFromNative(n) - assert.Equal(input.Origin, output.Origin) -} - -func Test_AsPathAttribute(t *testing.T) { - assert := assert.New(t) - - input := &AsPathAttribute{ - Segments: []*AsSegment{ - { - Type: 1, // SET - Numbers: []uint32{100, 200}, - }, - { - Type: 2, // SEQ - Numbers: []uint32{300, 400}, - }, - }, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAsPathAttributeFromNative(n) - assert.Equal(2, len(output.Segments)) - assert.Equal(input.Segments, output.Segments) -} - -func Test_NextHopAttribute(t *testing.T) { - assert := assert.New(t) - - input := &NextHopAttribute{ - NextHop: "192.168.0.1", - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewNextHopAttributeFromNative(n) - assert.Equal(input.NextHop, output.NextHop) -} - -func Test_MultiExitDiscAttribute(t *testing.T) { - assert := assert.New(t) - - input := &MultiExitDiscAttribute{ - Med: 100, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMultiExitDiscAttributeFromNative(n) - assert.Equal(input.Med, output.Med) -} - -func Test_LocalPrefAttribute(t *testing.T) { - assert := assert.New(t) - - input := &LocalPrefAttribute{ - LocalPref: 100, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewLocalPrefAttributeFromNative(n) - assert.Equal(input.LocalPref, output.LocalPref) -} - -func Test_AtomicAggregateAttribute(t *testing.T) { - assert := assert.New(t) - - input := &AtomicAggregateAttribute{} - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAtomicAggregateAttributeFromNative(n) - // AtomicAggregateAttribute has no value - assert.NotNil(output) -} - -func Test_AggregatorAttribute(t *testing.T) { - assert := assert.New(t) - - input := &AggregatorAttribute{ - As: 65000, - Address: "1.1.1.1", - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAggregatorAttributeFromNative(n) - assert.Equal(input.As, output.As) - assert.Equal(input.Address, output.Address) -} - -func Test_CommunitiesAttribute(t *testing.T) { - assert := assert.New(t) - - input := &CommunitiesAttribute{ - Communities: []uint32{100, 200}, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewCommunitiesAttributeFromNative(n) - assert.Equal(input.Communities, output.Communities) -} - -func Test_OriginatorIdAttribute(t *testing.T) { - assert := assert.New(t) - - input := &OriginatorIdAttribute{ - Id: "1.1.1.1", - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewOriginatorIdAttributeFromNative(n) - assert.Equal(input.Id, output.Id) -} - -func Test_ClusterListAttribute(t *testing.T) { - assert := assert.New(t) - - input := &ClusterListAttribute{ - Ids: []string{"1.1.1.1", "2.2.2.2"}, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewClusterListAttributeFromNative(n) - assert.Equal(input.Ids, output.Ids) -} - -func Test_MpReachNLRIAttribute_IPv4_UC(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_UC), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv6_UC(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_UC), - NextHops: []string{"2001:db8::1", "2001:db8::2"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv4_MPLS(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&LabeledIPAddressPrefix{ - Labels: []uint32{100}, - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&LabeledIPAddressPrefix{ - Labels: []uint32{200}, - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_MPLS), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv6_MPLS(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&LabeledIPAddressPrefix{ - Labels: []uint32{100}, - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&LabeledIPAddressPrefix{ - Labels: []uint32{200}, - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_MPLS), - NextHops: []string{"2001:db8::1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv4_ENCAP(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&EncapsulationNLRI{ - Address: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&EncapsulationNLRI{ - Address: "192.168.201.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_ENCAP), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv6_ENCAP(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&EncapsulationNLRI{ - Address: "2001:db8:1::1", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&EncapsulationNLRI{ - Address: "2001:db8:2::1", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_ENCAP), - NextHops: []string{"2001:db8::1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_EVPN_AD_Route(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherTwoOctetAS{ - Admin: 65000, - Assigned: 100, - }) - assert.Nil(err) - esi := &EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := ptypes.MarshalAny(&EVPNEthernetAutoDiscoveryRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - Label: 200, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_EVPN_MAC_IP_Route(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := ptypes.MarshalAny(&EVPNMACIPAdvertisementRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - MacAddress: "aa:bb:cc:dd:ee:ff", - IpAddress: "192.168.101.1", - Labels: []uint32{200}, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_EVPN_MC_Route(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherFourOctetAS{ - Admin: 65000, - Assigned: 100, - }) - assert.Nil(err) - a, err := ptypes.MarshalAny(&EVPNInclusiveMulticastEthernetTagRoute{ - Rd: rd, - EthernetTag: 100, - IpAddress: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_EVPN_ES_Route(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := ptypes.MarshalAny(&EVPNEthernetSegmentRoute{ - Rd: rd, - Esi: esi, - IpAddress: "192.168.101.1", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_EVPN_Prefix_Route(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - esi := &EthernetSegmentIdentifier{ - Type: 0, - Value: []byte{1, 2, 3, 4, 5, 6, 7, 8, 9}, - } - a, err := ptypes.MarshalAny(&EVPNIPPrefixRoute{ - Rd: rd, - Esi: esi, - EthernetTag: 100, - IpPrefixLen: 24, - IpPrefix: "192.168.101.0", - Label: 200, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_EVPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv4_VPN(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - a, err := ptypes.MarshalAny(&LabeledVPNIPAddressPrefix{ - Labels: []uint32{100, 200}, - Rd: rd, - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_VPN), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_IPv6_VPN(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - a, err := ptypes.MarshalAny(&LabeledVPNIPAddressPrefix{ - Labels: []uint32{100, 200}, - Rd: rd, - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_IPv6_VPN), - NextHops: []string{"2001:db8::1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_RTC_UC(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 1) - rt, err := ptypes.MarshalAny(&IPv4AddressSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // Route Target - Address: "1.1.1.1", - LocalAdmin: 100, - }) - assert.Nil(err) - a, err := ptypes.MarshalAny(&RouteTargetMembershipNLRI{ - As: 65000, - Rt: rt, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_RTC_UC), - NextHops: []string{"192.168.1.1"}, - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_FS_IPv4_UC(t *testing.T) { - assert := assert.New(t) - - rules := make([]*any.Any, 0, 3) - rule, err := ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecComponent{ - Type: 3, // IP Protocol - Items: []*FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*any.Any, 0, 1) - a, err := ptypes.MarshalAny(&FlowSpecNLRI{ - Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv4_UC), - // NextHops: // No nexthop required - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_FS_IPv4_VPN(t *testing.T) { - assert := assert.New(t) - - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*any.Any, 0, 3) - rule, err := ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecComponent{ - Type: 3, // IP Protocol - Items: []*FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*any.Any, 0, 1) - a, err := ptypes.MarshalAny(&VPNFlowSpecNLRI{ - Rd: rd, - Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv4_VPN), - // NextHops: // No nexthop required - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_FS_IPv6_UC(t *testing.T) { - assert := assert.New(t) - - rules := make([]*any.Any, 0, 3) - rule, err := ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecComponent{ - Type: 3, // Next Header - Items: []*FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*any.Any, 0, 1) - a, err := ptypes.MarshalAny(&FlowSpecNLRI{ - Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv6_UC), - // NextHops: // No nexthop required - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_FS_IPv6_VPN(t *testing.T) { - assert := assert.New(t) - - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*any.Any, 0, 3) - rule, err := ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 1, // Destination Prefix - PrefixLen: 64, - Prefix: "2001:db8:1::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecIPPrefix{ - Type: 2, // Source Prefix - PrefixLen: 64, - Prefix: "2001:db8:2::", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecComponent{ - Type: 3, // Next Header - Items: []*FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 6, // TCP - }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*any.Any, 0, 1) - a, err := ptypes.MarshalAny(&VPNFlowSpecNLRI{ - Rd: rd, - Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_IPv6_VPN), - // NextHops: // No nexthop required - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpReachNLRIAttribute_FS_L2_VPN(t *testing.T) { - assert := assert.New(t) - - rd, err := ptypes.MarshalAny(&RouteDistinguisherIPAddress{ - Admin: "1.1.1.1", - Assigned: 100, - }) - assert.Nil(err) - - rules := make([]*any.Any, 0, 3) - rule, err := ptypes.MarshalAny(&FlowSpecMAC{ - Type: 15, // Source MAC - Address: "aa:bb:cc:11:22:33", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecMAC{ - Type: 16, // Destination MAC - Address: "dd:ee:ff:11:22:33", - }) - assert.Nil(err) - rules = append(rules, rule) - rule, err = ptypes.MarshalAny(&FlowSpecComponent{ - Type: 21, // VLAN ID - Items: []*FlowSpecComponentItem{ - { - Op: 0x80 | 0x01, // End, EQ - Value: 100, - }, - }, - }) - assert.Nil(err) - rules = append(rules, rule) - - nlris := make([]*any.Any, 0, 1) - a, err := ptypes.MarshalAny(&VPNFlowSpecNLRI{ - Rd: rd, - Rules: rules, - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpReachNLRIAttribute{ - Family: uint32(bgp.RF_FS_L2_VPN), - // NextHops: // No nexthop required - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpReachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(input.NextHops, output.NextHops) - assert.Equal(1, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_MpUnreachNLRIAttribute_IPv4_UC(t *testing.T) { - assert := assert.New(t) - - nlris := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.101.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - a, err = ptypes.MarshalAny(&IPAddressPrefix{ - PrefixLen: 24, - Prefix: "192.168.201.0", - }) - assert.Nil(err) - nlris = append(nlris, a) - - input := &MpUnreachNLRIAttribute{ - Family: uint32(bgp.RF_IPv4_UC), - Nlris: nlris, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewMpUnreachNLRIAttributeFromNative(n) - assert.Equal(input.Family, output.Family) - assert.Equal(2, len(output.Nlris)) - for idx, inputNLRI := range input.Nlris { - outputNLRI := output.Nlris[idx] - assert.Equal(inputNLRI.TypeUrl, outputNLRI.TypeUrl) - assert.Equal(inputNLRI.Value, outputNLRI.Value) - } -} - -func Test_ExtendedCommunitiesAttribute(t *testing.T) { - assert := assert.New(t) - - communities := make([]*any.Any, 0, 19) - a, err := ptypes.MarshalAny(&TwoOctetAsSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - As: 65001, - LocalAdmin: 100, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&IPv4AddressSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - Address: "2.2.2.2", - LocalAdmin: 200, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&FourOctetAsSpecificExtended{ - IsTransitive: true, - SubType: 0x02, // ROUTE_TARGET - As: 65003, - LocalAdmin: 300, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&ValidationExtended{ - State: 0, // VALID - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&ColorExtended{ - Color: 400, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&EncapExtended{ - TunnelType: 8, // VXLAN - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&DefaultGatewayExtended{ - // No value - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&OpaqueExtended{ - IsTransitive: true, - Value: []byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&ESILabelExtended{ - IsSingleActive: true, - Label: 500, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&ESImportRouteTarget{ - EsImport: "aa:bb:cc:dd:ee:ff", - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&MacMobilityExtended{ - IsSticky: true, - SequenceNum: 1, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&RouterMacExtended{ - Mac: "ff:ee:dd:cc:bb:aa", - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&TrafficRateExtended{ - As: 65004, - Rate: 100.0, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&TrafficActionExtended{ - Terminal: true, - Sample: false, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&RedirectTwoOctetAsSpecificExtended{ - As: 65005, - LocalAdmin: 500, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&RedirectIPv4AddressSpecificExtended{ - Address: "6.6.6.6", - LocalAdmin: 600, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&RedirectFourOctetAsSpecificExtended{ - As: 65007, - LocalAdmin: 700, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&TrafficRemarkExtended{ - Dscp: 0x0a, // AF11 - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&UnknownExtended{ - Type: 0xff, // Max of uint8 - Value: []byte{1, 2, 3, 4, 5, 6, 7}, - }) - assert.Nil(err) - communities = append(communities, a) - - input := &ExtendedCommunitiesAttribute{ - Communities: communities, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewExtendedCommunitiesAttributeFromNative(n) - assert.Equal(19, len(output.Communities)) - for idx, inputCommunity := range input.Communities { - outputCommunity := output.Communities[idx] - assert.Equal(inputCommunity.TypeUrl, outputCommunity.TypeUrl) - assert.Equal(inputCommunity.Value, outputCommunity.Value) - } -} - -func Test_As4PathAttribute(t *testing.T) { - assert := assert.New(t) - - input := &As4PathAttribute{ - Segments: []*AsSegment{ - { - Type: 1, // SET - Numbers: []uint32{100, 200}, - }, - { - Type: 2, // SEQ - Numbers: []uint32{300, 400}, - }, - }, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAs4PathAttributeFromNative(n) - assert.Equal(2, len(output.Segments)) - assert.Equal(input.Segments, output.Segments) -} - -func Test_As4AggregatorAttribute(t *testing.T) { - assert := assert.New(t) - - input := &As4AggregatorAttribute{ - As: 65000, - Address: "1.1.1.1", - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAs4AggregatorAttributeFromNative(n) - assert.Equal(input.As, output.As) - assert.Equal(input.Address, output.Address) -} - -func Test_PmsiTunnelAttribute(t *testing.T) { - assert := assert.New(t) - - input := &PmsiTunnelAttribute{ - Flags: 0x01, // IsLeafInfoRequired = true - Type: 6, // INGRESS_REPL - Label: 100, - Id: net.ParseIP("1.1.1.1").To4(), // IngressReplTunnelID with IPv4 - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewPmsiTunnelAttributeFromNative(n) - assert.Equal(input.Flags, output.Flags) - assert.Equal(input.Type, output.Type) - assert.Equal(input.Label, output.Label) - assert.Equal(input.Id, output.Id) -} - -func Test_TunnelEncapAttribute(t *testing.T) { - assert := assert.New(t) - - subTlvs := make([]*any.Any, 0, 4) - a, err := ptypes.MarshalAny(&TunnelEncapSubTLVEncapsulation{ - Key: 100, - Cookie: []byte{0x11, 0x22, 0x33, 0x44}, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = ptypes.MarshalAny(&TunnelEncapSubTLVProtocol{ - Protocol: 200, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = ptypes.MarshalAny(&TunnelEncapSubTLVColor{ - Color: 300, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - a, err = ptypes.MarshalAny(&TunnelEncapSubTLVUnknown{ - Type: 0xff, // Max of uint8 - Value: []byte{0x55, 0x66, 0x77, 0x88}, - }) - assert.Nil(err) - subTlvs = append(subTlvs, a) - - input := &TunnelEncapAttribute{ - Tlvs: []*TunnelEncapTLV{ - { - Type: 8, // VXLAN - Tlvs: subTlvs, - }, - }, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewTunnelEncapAttributeFromNative(n) - assert.Equal(1, len(output.Tlvs)) - assert.Equal(input.Tlvs[0].Type, output.Tlvs[0].Type) - assert.Equal(len(output.Tlvs[0].Tlvs), len(output.Tlvs[0].Tlvs)) - for idx, inputSubTlv := range input.Tlvs[0].Tlvs { - outputSubTlv := output.Tlvs[0].Tlvs[idx] - assert.Equal(inputSubTlv.TypeUrl, outputSubTlv.TypeUrl) - assert.Equal(inputSubTlv.Value, outputSubTlv.Value) - } -} - -func Test_IP6ExtendedCommunitiesAttribute(t *testing.T) { - assert := assert.New(t) - - communities := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&IPv6AddressSpecificExtended{ - IsTransitive: true, - SubType: 0xff, // Max of uint8 - Address: "2001:db8:1::1", - LocalAdmin: 100, - }) - assert.Nil(err) - communities = append(communities, a) - a, err = ptypes.MarshalAny(&RedirectIPv6AddressSpecificExtended{ - Address: "2001:db8:2::1", - LocalAdmin: 200, - }) - assert.Nil(err) - communities = append(communities, a) - - input := &IP6ExtendedCommunitiesAttribute{ - Communities: communities, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewIP6ExtendedCommunitiesAttributeFromNative(n) - assert.Equal(2, len(output.Communities)) - for idx, inputCommunity := range input.Communities { - outputCommunity := output.Communities[idx] - assert.Equal(inputCommunity.TypeUrl, outputCommunity.TypeUrl) - assert.Equal(inputCommunity.Value, outputCommunity.Value) - } -} - -func Test_AigpAttribute(t *testing.T) { - assert := assert.New(t) - - tlvs := make([]*any.Any, 0, 2) - a, err := ptypes.MarshalAny(&AigpTLVIGPMetric{ - Metric: 50, - }) - assert.Nil(err) - tlvs = append(tlvs, a) - a, err = ptypes.MarshalAny(&AigpTLVUnknown{ - Type: 0xff, // Max of uint8 - Value: []byte{0x11, 0x22, 0x33, 0x44}, - }) - assert.Nil(err) - tlvs = append(tlvs, a) - - input := &AigpAttribute{ - Tlvs: tlvs, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewAigpAttributeFromNative(n) - assert.Equal(2, len(output.Tlvs)) - for idx, inputTlv := range input.Tlvs { - outputTlv := output.Tlvs[idx] - assert.Equal(inputTlv.TypeUrl, outputTlv.TypeUrl) - assert.Equal(inputTlv.Value, outputTlv.Value) - } -} - -func Test_LargeCommunitiesAttribute(t *testing.T) { - assert := assert.New(t) - - input := &LargeCommunitiesAttribute{ - Communities: []*LargeCommunity{ - { - GlobalAdmin: 65001, - LocalData1: 100, - LocalData2: 200, - }, - { - GlobalAdmin: 65002, - LocalData1: 300, - LocalData2: 400, - }, - }, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewLargeCommunitiesAttributeFromNative(n) - assert.Equal(2, len(output.Communities)) - assert.Equal(input.Communities, output.Communities) -} - -func Test_UnknownAttribute(t *testing.T) { - assert := assert.New(t) - - input := &UnknownAttribute{ - Flags: (1 << 6) | (1 << 7), // OPTIONAL and TRANSITIVE - Type: 0xff, - Value: []byte{0x11, 0x22, 0x33, 0x44}, - } - - n, err := input.ToNative() - assert.Nil(err) - - output := NewUnknownAttributeFromNative(n) - assert.Equal(input.Flags, output.Flags) - assert.Equal(input.Type, output.Type) - assert.Equal(input.Value, output.Value) -} |