@@ -1390,167 +1390,6 @@ def assert_invalid_path(path)
1390
1390
end
1391
1391
end
1392
1392
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
-
1554
1393
describe '#wildcard_host?' do
1555
1394
let! ( :route ) { Route . make ( host :) }
1556
1395
0 commit comments