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