github.com/osrg/gobgp@v2.0.0+incompatible/internal/pkg/apiutil/capability_test.go (about) 1 // Copyright (C) 2018 Nippon Telegraph and Telephone Corporation. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 12 // implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 16 package apiutil 17 18 import ( 19 "testing" 20 21 "github.com/golang/protobuf/ptypes" 22 api "github.com/osrg/gobgp/api" 23 "github.com/osrg/gobgp/pkg/packet/bgp" 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func Test_MultiProtocolCapability(t *testing.T) { 28 assert := assert.New(t) 29 30 input := &api.MultiProtocolCapability{ 31 Family: &api.Family{ 32 Afi: api.Family_AFI_IP, 33 Safi: api.Family_SAFI_UNICAST, 34 }, 35 } 36 37 a, err := ptypes.MarshalAny(input) 38 assert.Nil(err) 39 n, err := unmarshalCapability(a) 40 assert.Nil(err) 41 c := n.(*bgp.CapMultiProtocol) 42 assert.Equal(bgp.RF_IPv4_UC, c.CapValue) 43 44 output := NewMultiProtocolCapability(c) 45 assert.Equal(input, output) 46 } 47 48 func Test_RouteRefreshCapability(t *testing.T) { 49 assert := assert.New(t) 50 51 input := &api.RouteRefreshCapability{} 52 53 a, err := ptypes.MarshalAny(input) 54 assert.Nil(err) 55 n, err := unmarshalCapability(a) 56 assert.Nil(err) 57 58 output := NewRouteRefreshCapability(n.(*bgp.CapRouteRefresh)) 59 assert.Equal(input, output) 60 } 61 62 func Test_CarryingLabelInfoCapability(t *testing.T) { 63 assert := assert.New(t) 64 65 input := &api.CarryingLabelInfoCapability{} 66 67 a, err := ptypes.MarshalAny(input) 68 assert.Nil(err) 69 n, err := unmarshalCapability(a) 70 assert.Nil(err) 71 72 output := NewCarryingLabelInfoCapability(n.(*bgp.CapCarryingLabelInfo)) 73 assert.Equal(input, output) 74 } 75 76 func Test_ExtendedNexthopCapability(t *testing.T) { 77 assert := assert.New(t) 78 79 input := &api.ExtendedNexthopCapability{ 80 Tuples: []*api.ExtendedNexthopCapabilityTuple{ 81 { 82 NlriFamily: &api.Family{ 83 Afi: api.Family_AFI_IP, 84 Safi: api.Family_SAFI_UNICAST, 85 }, 86 NexthopFamily: &api.Family{ 87 Afi: api.Family_AFI_IP6, 88 Safi: api.Family_SAFI_UNICAST, 89 }, 90 }, 91 }, 92 } 93 94 a, err := ptypes.MarshalAny(input) 95 assert.Nil(err) 96 n, err := unmarshalCapability(a) 97 assert.Nil(err) 98 c := n.(*bgp.CapExtendedNexthop) 99 assert.Equal(1, len(c.Tuples)) 100 assert.Equal(uint16(bgp.AFI_IP), c.Tuples[0].NLRIAFI) 101 assert.Equal(uint16(bgp.SAFI_UNICAST), c.Tuples[0].NLRISAFI) 102 assert.Equal(uint16(bgp.AFI_IP6), c.Tuples[0].NexthopAFI) 103 104 output := NewExtendedNexthopCapability(c) 105 assert.Equal(input, output) 106 } 107 108 func Test_GracefulRestartCapability(t *testing.T) { 109 assert := assert.New(t) 110 111 input := &api.GracefulRestartCapability{ 112 Flags: 0x08 | 0x04, // restarting|notification 113 Time: 90, 114 Tuples: []*api.GracefulRestartCapabilityTuple{ 115 { 116 Family: &api.Family{ 117 Afi: api.Family_AFI_IP, 118 Safi: api.Family_SAFI_UNICAST, 119 }, 120 Flags: 0x80, // forward 121 }, 122 }, 123 } 124 125 a, err := ptypes.MarshalAny(input) 126 assert.Nil(err) 127 n, err := unmarshalCapability(a) 128 assert.Nil(err) 129 130 c := n.(*bgp.CapGracefulRestart) 131 assert.Equal(1, len(c.Tuples)) 132 assert.Equal(uint8(0x08|0x04), c.Flags) 133 assert.Equal(uint16(90), c.Time) 134 assert.Equal(uint16(bgp.AFI_IP), c.Tuples[0].AFI) 135 assert.Equal(uint8(bgp.SAFI_UNICAST), c.Tuples[0].SAFI) 136 assert.Equal(uint8(0x80), c.Tuples[0].Flags) 137 138 output := NewGracefulRestartCapability(c) 139 assert.Equal(input, output) 140 } 141 142 func Test_FourOctetASNumberCapability(t *testing.T) { 143 assert := assert.New(t) 144 145 input := &api.FourOctetASNumberCapability{ 146 As: 100, 147 } 148 149 a, err := ptypes.MarshalAny(input) 150 assert.Nil(err) 151 n, err := unmarshalCapability(a) 152 assert.Nil(err) 153 154 c := n.(*bgp.CapFourOctetASNumber) 155 assert.Equal(uint32(100), c.CapValue) 156 157 output := NewFourOctetASNumberCapability(c) 158 assert.Equal(input, output) 159 } 160 161 func Test_AddPathCapability(t *testing.T) { 162 assert := assert.New(t) 163 164 input := &api.AddPathCapability{ 165 Tuples: []*api.AddPathCapabilityTuple{ 166 { 167 Family: &api.Family{ 168 Afi: api.Family_AFI_IP, 169 Safi: api.Family_SAFI_UNICAST, 170 }, 171 Mode: api.AddPathMode_MODE_BOTH, 172 }, 173 }, 174 } 175 176 a, err := ptypes.MarshalAny(input) 177 assert.Nil(err) 178 n, err := unmarshalCapability(a) 179 assert.Nil(err) 180 181 c := n.(*bgp.CapAddPath) 182 assert.Equal(1, len(c.Tuples)) 183 assert.Equal(bgp.RF_IPv4_UC, c.Tuples[0].RouteFamily) 184 assert.Equal(bgp.BGP_ADD_PATH_BOTH, c.Tuples[0].Mode) 185 186 output := NewAddPathCapability(c) 187 assert.Equal(input, output) 188 } 189 190 func Test_EnhancedRouteRefreshCapability(t *testing.T) { 191 assert := assert.New(t) 192 193 input := &api.EnhancedRouteRefreshCapability{} 194 195 a, err := ptypes.MarshalAny(input) 196 assert.Nil(err) 197 n, err := unmarshalCapability(a) 198 assert.Nil(err) 199 200 output := NewEnhancedRouteRefreshCapability(n.(*bgp.CapEnhancedRouteRefresh)) 201 assert.Equal(input, output) 202 } 203 204 func Test_LongLivedGracefulRestartCapability(t *testing.T) { 205 assert := assert.New(t) 206 207 input := &api.LongLivedGracefulRestartCapability{ 208 Tuples: []*api.LongLivedGracefulRestartCapabilityTuple{ 209 { 210 Family: &api.Family{ 211 Afi: api.Family_AFI_IP, 212 Safi: api.Family_SAFI_UNICAST, 213 }, 214 Flags: 0x80, // forward 215 Time: 90, 216 }, 217 }, 218 } 219 220 a, err := ptypes.MarshalAny(input) 221 assert.Nil(err) 222 n, err := unmarshalCapability(a) 223 assert.Nil(err) 224 225 c := n.(*bgp.CapLongLivedGracefulRestart) 226 assert.Equal(1, len(c.Tuples)) 227 assert.Equal(uint16(bgp.AFI_IP), c.Tuples[0].AFI) 228 assert.Equal(uint8(bgp.SAFI_UNICAST), c.Tuples[0].SAFI) 229 assert.Equal(uint8(0x80), c.Tuples[0].Flags) 230 assert.Equal(uint32(90), c.Tuples[0].RestartTime) 231 232 output := NewLongLivedGracefulRestartCapability(c) 233 assert.Equal(input, output) 234 } 235 236 func Test_RouteRefreshCiscoCapability(t *testing.T) { 237 assert := assert.New(t) 238 239 input := &api.RouteRefreshCiscoCapability{} 240 241 a, err := ptypes.MarshalAny(input) 242 assert.Nil(err) 243 n, err := unmarshalCapability(a) 244 assert.Nil(err) 245 246 output := NewRouteRefreshCiscoCapability(n.(*bgp.CapRouteRefreshCisco)) 247 assert.Equal(input, output) 248 } 249 250 func Test_UnknownCapability(t *testing.T) { 251 assert := assert.New(t) 252 253 input := &api.UnknownCapability{ 254 Code: 0xff, 255 Value: []byte{0x11, 0x22, 0x33, 0x44}, 256 } 257 258 a, err := ptypes.MarshalAny(input) 259 assert.Nil(err) 260 n, err := unmarshalCapability(a) 261 assert.Nil(err) 262 263 c := n.(*bgp.CapUnknown) 264 assert.Equal(bgp.BGPCapabilityCode(0xff), c.CapCode) 265 assert.Equal([]byte{0x11, 0x22, 0x33, 0x44}, c.CapValue) 266 267 output := NewUnknownCapability(c) 268 assert.Equal(input, output) 269 }