@@ -1390,167 +1390,6 @@ def assert_invalid_path(path)
13901390 end
13911391 end
13921392
1393- describe 'vip_offset' do
1394- before do
1395- TestConfig . override (
1396- internal_route_vip_range : '127.128.99.0/29' ,
1397- kubernetes : { }
1398- )
1399- end
1400-
1401- context 'auto-assign vip_offset' do
1402- let ( :internal_domain ) { SharedDomain . make ( name : 'apps.internal' , internal : true ) }
1403- let! ( :internal_route_1 ) { Route . make ( host : 'meow' , domain : internal_domain ) }
1404- let! ( :internal_route_2 ) { Route . make ( host : 'woof' , domain : internal_domain ) }
1405- let! ( :internal_route_3 ) { Route . make ( host : 'quack' , domain : internal_domain ) }
1406- let ( :external_private_route ) { Route . make }
1407-
1408- context 'when the Kubernetes API is not configured' do
1409- before do
1410- TestConfig . override ( # 8 theoretical available ips, 6 actual
1411- internal_route_vip_range : '127.128.99.0/29' ,
1412- kubernetes : { }
1413- )
1414- end
1415-
1416- it 'auto-assigns vip_offset to internal routes only' do
1417- expect ( internal_route_1 . vip_offset ) . not_to be_nil
1418- expect ( external_private_route . vip_offset ) . to be_nil
1419- end
1420-
1421- it 'assigns multiple vips in ascending order without duplicates' do
1422- expect ( internal_route_1 . vip_offset ) . to eq ( 1 )
1423- expect ( internal_route_2 . vip_offset ) . to eq ( 2 )
1424- end
1425-
1426- it 'never assigns the same vip_offset to multiple internal routes' do
1427- expect do
1428- Route . make ( host : 'ants' , vip_offset : 1 )
1429- end . to raise_error ( Sequel ::UniqueConstraintViolation , /duplicate.*routes_vip_offset_index/i )
1430- end
1431-
1432- it 'finds an available offset' do
1433- Route . make ( host : 'gulp' , domain : internal_domain )
1434- expect ( Route . select_map ( :vip_offset ) ) . to match_array ( ( 1 ..4 ) . to_a )
1435- end
1436-
1437- context 'when the taken offset is not the first' do
1438- before do
1439- TestConfig . override (
1440- kubernetes : { }
1441- )
1442- end
1443-
1444- it 'finds the first offset' do
1445- internal_route_1 . destroy
1446- expect ( Route . make ( host : 'gulp' , domain : internal_domain ) . vip_offset ) . to eq ( 1 )
1447- end
1448- end
1449-
1450- context 'when the taken offsets include first and not second' do
1451- it 'finds an available offset' do
1452- internal_route_2 . destroy
1453- expect ( Route . make ( host : 'gulp' , domain : internal_domain ) . vip_offset ) . to eq ( 2 )
1454- end
1455- end
1456-
1457- context 'when filling the vip range' do
1458- it 'can make 3 more new routes only' do
1459- expect { Route . make ( host : 'route4' , domain : internal_domain ) } . not_to raise_error
1460- expect { Route . make ( host : 'route5' , domain : internal_domain ) } . not_to raise_error
1461- expect { Route . make ( host : 'route6' , domain : internal_domain ) } . not_to raise_error
1462- expect { Route . make ( host : 'route7' , domain : internal_domain ) } . to raise_error ( Route ::OutOfVIPException )
1463- end
1464-
1465- it 'can reclaim lost vips' do
1466- expect { Route . make ( host : 'route4' , domain : internal_domain ) } . not_to raise_error
1467- expect { Route . make ( host : 'route5' , domain : internal_domain ) } . not_to raise_error
1468- expect { Route . make ( host : 'route6' , domain : internal_domain ) } . not_to raise_error
1469- Route . last . destroy
1470- internal_route_2 . destroy
1471- expect ( Route . make ( host : 'new2' , domain : internal_domain ) . vip_offset ) . to eq ( 2 )
1472- expect ( Route . make ( host : 'new6' , domain : internal_domain ) . vip_offset ) . to eq ( 6 )
1473- end
1474- end
1475- end
1476- end
1477-
1478- context 'when we assign vip_offsets explicitly' do
1479- let ( :internal_domain ) { SharedDomain . make ( name : 'apps.internal' , internal : true ) }
1480-
1481- it 'does not assign vip_offsets that exceed the CIDR range' do
1482- expect do
1483- Route . make ( host : 'ants0' , domain : internal_domain , vip_offset : 0 )
1484- end . to raise_error ( Sequel ::ValidationFailed , 'name vip_offset' )
1485- expect do
1486- Route . make ( host : 'ants1' , domain : internal_domain , vip_offset : 1 )
1487- end . not_to raise_error
1488- expect do
1489- Route . make ( host : 'ants6' , domain : internal_domain , vip_offset : 6 )
1490- end . not_to raise_error
1491- expect do
1492- Route . make ( host : 'ants7' , domain : internal_domain , vip_offset : 7 )
1493- end . to raise_error ( Sequel ::ValidationFailed , 'name vip_offset' )
1494- expect do
1495- Route . make ( host : 'ants8' , domain : internal_domain , vip_offset : 8 )
1496- end . to raise_error ( Sequel ::ValidationFailed , 'name vip_offset' )
1497- end
1498- end
1499-
1500- context 'when there are routes on internal domains' do
1501- let ( :internal_domain ) { SharedDomain . make ( name : 'apps.internal' , internal : true ) }
1502- let! ( :internal_route_1 ) { Route . make ( host : 'meow' , domain : internal_domain , vip_offset : nil ) }
1503- let! ( :internal_route_2 ) { Route . make ( host : 'woof' , domain : internal_domain , vip_offset : 2 ) }
1504- let! ( :internal_route_3 ) { Route . make ( host : 'quack' , domain : internal_domain , vip_offset : 4 ) }
1505- let ( :external_private_route ) { Route . make }
1506-
1507- it 'can have different vip_offsets in range' do
1508- expect ( internal_route_1 ) . to be_valid
1509- expect ( internal_route_1 . vip_offset ) . to eq ( 1 )
1510- expect ( internal_route_2 ) . to be_valid
1511- expect ( internal_route_3 ) . to be_valid
1512- end
1513-
1514- it 'assigns lowest-possible vip_offsets' do
1515- internal_route_4 = Route . make ( host : 'bray' , domain : internal_domain )
1516- expect ( internal_route_4 . vip_offset ) . to eq ( 3 )
1517- internal_route_5 = Route . make ( host : 'lemons' , domain : internal_domain )
1518- expect ( internal_route_5 . vip_offset ) . to eq ( 5 )
1519- end
1520-
1521- it 'reuses vip_offsets' do
1522- expected_vip_offset = internal_route_2 . vip_offset
1523- internal_route_2 . delete
1524- internal_route_6 = Route . make ( host : 'route6' , domain : internal_domain )
1525- expect ( internal_route_6 . vip_offset ) . to eq ( expected_vip_offset )
1526- end
1527- end
1528- end
1529-
1530- describe 'vip' do
1531- before do
1532- TestConfig . override (
1533- kubernetes : { }
1534- )
1535- end
1536-
1537- let ( :internal_domain ) { SharedDomain . make ( name : 'apps.internal' , internal : true ) }
1538- let! ( :internal_route_1 ) { Route . make ( host : 'meow' , domain : internal_domain , vip_offset : 1 ) }
1539- let! ( :internal_route_2 ) { Route . make ( host : 'woof' , domain : internal_domain , vip_offset : 2 ) }
1540- let! ( :internal_route_3 ) { Route . make ( host : 'quack' , domain : internal_domain , vip_offset : 4 ) }
1541- let ( :external_private_route ) { Route . make }
1542-
1543- it 'returns a ipv4 ip address offset from the beginning of the internal route vip range' do
1544- expect ( internal_route_1 . vip ) . to eq ( '127.128.0.1' )
1545- internal_route_2 . vip_offset = 16
1546- expect ( internal_route_2 . vip ) . to eq ( '127.128.0.16' )
1547- end
1548-
1549- it 'returns nil when asked for the ip addr for a nil offset' do
1550- expect ( external_private_route . vip ) . to be_nil
1551- end
1552- end
1553-
15541393 describe '#wildcard_host?' do
15551394 let! ( :route ) { Route . make ( host :) }
15561395
0 commit comments