github.com/osrg/gobgp@v2.0.0+incompatible/pkg/server/rpki_test.go (about) 1 // Copyright (C) 2015 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 server 17 18 import ( 19 "net" 20 "strconv" 21 "strings" 22 "testing" 23 24 "github.com/osrg/gobgp/internal/pkg/config" 25 "github.com/osrg/gobgp/internal/pkg/table" 26 "github.com/osrg/gobgp/pkg/packet/bgp" 27 28 radix "github.com/armon/go-radix" 29 "github.com/stretchr/testify/assert" 30 ) 31 32 func strToASParam(str string) *bgp.PathAttributeAsPath { 33 toList := func(asstr, sep string) []uint32 { 34 as := make([]uint32, 0) 35 l := strings.Split(asstr, sep) 36 for _, s := range l { 37 v, _ := strconv.ParseUint(s, 10, 32) 38 as = append(as, uint32(v)) 39 } 40 return as 41 } 42 var atype uint8 43 var as []uint32 44 if strings.HasPrefix(str, "{") { 45 atype = bgp.BGP_ASPATH_ATTR_TYPE_SET 46 as = toList(str[1:len(str)-1], ",") 47 } else if strings.HasPrefix(str, "(") { 48 atype = bgp.BGP_ASPATH_ATTR_TYPE_CONFED_SET 49 as = toList(str[1:len(str)-1], " ") 50 } else { 51 atype = bgp.BGP_ASPATH_ATTR_TYPE_SEQ 52 as = toList(str, " ") 53 } 54 55 return bgp.NewPathAttributeAsPath([]bgp.AsPathParamInterface{bgp.NewAs4PathParam(atype, as)}) 56 } 57 58 func validateOne(tree *radix.Tree, cidr, aspathStr string) config.RpkiValidationResultType { 59 r := validatePath(65500, tree, cidr, strToASParam(aspathStr)) 60 return r.Status 61 } 62 63 func TestValidate0(t *testing.T) { 64 assert := assert.New(t) 65 66 manager, _ := newROAManager(0) 67 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("192.168.0.0").To4(), 24, 32, 100, "")) 68 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("192.168.0.0").To4(), 24, 24, 200, "")) 69 70 var r config.RpkiValidationResultType 71 72 tree := manager.Roas[bgp.RF_IPv4_UC] 73 r = validateOne(tree, "192.168.0.0/24", "100") 74 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 75 76 r = validateOne(tree, "192.168.0.0/24", "100 200") 77 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 78 79 r = validateOne(tree, "192.168.0.0/24", "300") 80 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 81 82 r = validateOne(tree, "192.168.0.0/25", "100") 83 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 84 85 r = validateOne(tree, "192.168.0.0/25", "200") 86 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 87 88 r = validateOne(tree, "192.168.0.0/25", "300") 89 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 90 } 91 92 func TestValidate1(t *testing.T) { 93 assert := assert.New(t) 94 95 manager, _ := newROAManager(0) 96 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 16, 65000, "")) 97 98 var r config.RpkiValidationResultType 99 100 tree := manager.Roas[bgp.RF_IPv4_UC] 101 r = validateOne(tree, "10.0.0.0/16", "65000") 102 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 103 104 r = validateOne(tree, "10.0.0.0/16", "65001") 105 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 106 } 107 108 func TestValidate2(t *testing.T) { 109 assert := assert.New(t) 110 111 manager, _ := newROAManager(0) 112 113 var r config.RpkiValidationResultType 114 115 tree := manager.Roas[bgp.RF_IPv4_UC] 116 r = validateOne(tree, "10.0.0.0/16", "65000") 117 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 118 119 r = validateOne(tree, "10.0.0.0/16", "65001") 120 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 121 } 122 123 func TestValidate3(t *testing.T) { 124 assert := assert.New(t) 125 126 manager, _ := newROAManager(0) 127 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 16, 65000, "")) 128 129 var r config.RpkiValidationResultType 130 131 tree := manager.Roas[bgp.RF_IPv4_UC] 132 r = validateOne(tree, "10.0.0.0/8", "65000") 133 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 134 135 r = validateOne(tree, "10.0.0.0/17", "65000") 136 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 137 138 manager, _ = newROAManager(0) 139 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 65000, "")) 140 141 tree = manager.Roas[bgp.RF_IPv4_UC] 142 r = validateOne(tree, "10.0.0.0/17", "65000") 143 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 144 } 145 146 func TestValidate4(t *testing.T) { 147 assert := assert.New(t) 148 149 manager, _ := newROAManager(0) 150 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 16, 65000, "")) 151 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 16, 65001, "")) 152 153 var r config.RpkiValidationResultType 154 tree := manager.Roas[bgp.RF_IPv4_UC] 155 r = validateOne(tree, "10.0.0.0/16", "65000") 156 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 157 158 r = validateOne(tree, "10.0.0.0/16", "65001") 159 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 160 } 161 162 func TestValidate5(t *testing.T) { 163 assert := assert.New(t) 164 165 manager, _ := newROAManager(0) 166 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 17, 17, 65000, "")) 167 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.128.0").To4(), 17, 17, 65000, "")) 168 169 var r config.RpkiValidationResultType 170 tree := manager.Roas[bgp.RF_IPv4_UC] 171 r = validateOne(tree, "10.0.0.0/16", "65000") 172 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 173 } 174 175 func TestValidate6(t *testing.T) { 176 assert := assert.New(t) 177 178 manager, _ := newROAManager(0) 179 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 8, 32, 0, "")) 180 181 var r config.RpkiValidationResultType 182 tree := manager.Roas[bgp.RF_IPv4_UC] 183 r = validateOne(tree, "10.0.0.0/7", "65000") 184 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 185 186 r = validateOne(tree, "10.0.0.0/8", "65000") 187 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 188 189 r = validateOne(tree, "10.0.0.0/24", "65000") 190 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 191 } 192 193 func TestValidate7(t *testing.T) { 194 assert := assert.New(t) 195 196 manager, _ := newROAManager(0) 197 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 65000, "")) 198 199 var r config.RpkiValidationResultType 200 tree := manager.Roas[bgp.RF_IPv4_UC] 201 r = validateOne(tree, "10.0.0.0/24", "{65000}") 202 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 203 204 r = validateOne(tree, "10.0.0.0/24", "{65001}") 205 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 206 207 r = validateOne(tree, "10.0.0.0/24", "{65000,65001}") 208 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_NOT_FOUND) 209 } 210 211 func TestValidate8(t *testing.T) { 212 assert := assert.New(t) 213 214 manager, _ := newROAManager(0) 215 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 0, "")) 216 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 65000, "")) 217 218 var r config.RpkiValidationResultType 219 tree := manager.Roas[bgp.RF_IPv4_UC] 220 r = validateOne(tree, "10.0.0.0/24", "65000") 221 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 222 223 r = validateOne(tree, "10.0.0.0/24", "65001") 224 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 225 } 226 227 func TestValidate9(t *testing.T) { 228 assert := assert.New(t) 229 230 manager, _ := newROAManager(0) 231 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 24, 24, 65000, "")) 232 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 65001, "")) 233 234 var r config.RpkiValidationResultType 235 tree := manager.Roas[bgp.RF_IPv4_UC] 236 r = validateOne(tree, "10.0.0.0/24", "65000") 237 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 238 239 r = validateOne(tree, "10.0.0.0/24", "65001") 240 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 241 } 242 243 func TestValidate10(t *testing.T) { 244 assert := assert.New(t) 245 246 manager, _ := newROAManager(0) 247 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 24, 24, 0, "")) 248 manager.addROA(table.NewROA(bgp.AFI_IP, net.ParseIP("10.0.0.0").To4(), 16, 24, 65001, "")) 249 250 var r config.RpkiValidationResultType 251 tree := manager.Roas[bgp.RF_IPv4_UC] 252 r = validateOne(tree, "10.0.0.0/24", "65000") 253 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_INVALID) 254 255 r = validateOne(tree, "10.0.0.0/24", "65001") 256 assert.Equal(r, config.RPKI_VALIDATION_RESULT_TYPE_VALID) 257 }