@@ -1407,167 +1407,6 @@ def assert_invalid_path(path)
1407
1407
end
1408
1408
end
1409
1409
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
-
1571
1410
describe '#wildcard_host?' do
1572
1411
let! ( :route ) { Route . make ( host :) }
1573
1412
0 commit comments