@@ -1470,7 +1470,33 @@ mod tests {
1470
1470
) -> Instance {
1471
1471
let id = Uuid :: new_v4 ( ) ;
1472
1472
let propolis_id = Uuid :: new_v4 ( ) ;
1473
+
1473
1474
let ticket = InstanceTicket :: new_without_manager_for_test ( id) ;
1475
+
1476
+ let initial_state =
1477
+ fake_instance_initial_state ( propolis_id, propolis_addr) ;
1478
+
1479
+ let services = fake_instance_manager_services (
1480
+ logctx,
1481
+ storage_handle,
1482
+ nexus_client_with_resolver,
1483
+ ) ;
1484
+
1485
+ Instance :: new (
1486
+ logctx. log . new ( o ! ( "component" => "Instance" ) ) ,
1487
+ id,
1488
+ propolis_id,
1489
+ ticket,
1490
+ initial_state,
1491
+ services,
1492
+ )
1493
+ . unwrap ( )
1494
+ }
1495
+
1496
+ fn fake_instance_initial_state (
1497
+ propolis_id : Uuid ,
1498
+ propolis_addr : SocketAddr ,
1499
+ ) -> InstanceInitialState {
1474
1500
let hardware = InstanceHardware {
1475
1501
properties : InstanceProperties {
1476
1502
ncpus : InstanceCpuCount ( 1 ) ,
@@ -1495,7 +1521,7 @@ mod tests {
1495
1521
cloud_init_bytes : None ,
1496
1522
} ;
1497
1523
1498
- let initial_state = InstanceInitialState {
1524
+ InstanceInitialState {
1499
1525
hardware,
1500
1526
instance_runtime : InstanceRuntimeState {
1501
1527
propolis_id : Some ( propolis_id) ,
@@ -1510,8 +1536,14 @@ mod tests {
1510
1536
time_updated : Default :: default ( ) ,
1511
1537
} ,
1512
1538
propolis_addr,
1513
- } ;
1539
+ }
1540
+ }
1514
1541
1542
+ fn fake_instance_manager_services (
1543
+ logctx : & LogContext ,
1544
+ storage_handle : StorageHandle ,
1545
+ nexus_client_with_resolver : NexusClientWithResolver ,
1546
+ ) -> InstanceManagerServices {
1515
1547
let vnic_allocator =
1516
1548
VnicAllocator :: new ( "Foo" , Etherstub ( "mystub" . to_string ( ) ) ) ;
1517
1549
let port_manager = PortManager :: new (
@@ -1526,24 +1558,14 @@ mod tests {
1526
1558
cleanup_context,
1527
1559
) ;
1528
1560
1529
- let services = InstanceManagerServices {
1561
+ InstanceManagerServices {
1530
1562
nexus_client : nexus_client_with_resolver,
1531
1563
vnic_allocator,
1532
1564
port_manager,
1533
1565
storage : storage_handle,
1534
1566
zone_bundler,
1535
1567
zone_builder_factory : ZoneBuilderFactory :: fake ( ) ,
1536
- } ;
1537
-
1538
- Instance :: new (
1539
- logctx. log . new ( o ! ( "component" => "Instance" ) ) ,
1540
- id,
1541
- propolis_id,
1542
- ticket,
1543
- initial_state,
1544
- services,
1545
- )
1546
- . unwrap ( )
1568
+ }
1547
1569
}
1548
1570
1549
1571
#[ tokio:: test]
@@ -1724,4 +1746,81 @@ mod tests {
1724
1746
1725
1747
logctx. cleanup_successful ( ) ;
1726
1748
}
1749
+
1750
+ #[ tokio:: test]
1751
+ async fn test_instance_manager_creation_nexus_timeout ( ) {
1752
+ let logctx = omicron_test_utils:: dev:: test_setup_log (
1753
+ "test_instance_manager_creation_nexus_timeout" ,
1754
+ ) ;
1755
+
1756
+ let storage_handle = fake_storage_manager_with_u2 ( ) . await ;
1757
+
1758
+ let ( nexus_client, nexus_server, state_rx) = fake_nexus_server ( & logctx) ;
1759
+
1760
+ let ( _dns_server, resolver, _dns_config_dir) =
1761
+ timeout ( TIMEOUT_DURATION , dns_server ( & logctx, & nexus_server) )
1762
+ . await
1763
+ . expect ( "timed out making DNS server and Resolver" ) ;
1764
+
1765
+ let nexus_client_with_resolver =
1766
+ NexusClientWithResolver :: new_with_client ( nexus_client, resolver) ;
1767
+
1768
+ let InstanceManagerServices {
1769
+ nexus_client,
1770
+ vnic_allocator : _,
1771
+ port_manager,
1772
+ storage,
1773
+ zone_bundler,
1774
+ zone_builder_factory,
1775
+ } = fake_instance_manager_services (
1776
+ & logctx,
1777
+ storage_handle,
1778
+ nexus_client_with_resolver,
1779
+ ) ;
1780
+
1781
+ let etherstub = Etherstub ( "mystub" . to_string ( ) ) ;
1782
+
1783
+ let mgr = crate :: instance_manager:: InstanceManager :: new (
1784
+ logctx. log . new ( o ! ( "component" => "InstanceManager" ) ) ,
1785
+ nexus_client,
1786
+ etherstub,
1787
+ port_manager,
1788
+ storage,
1789
+ zone_bundler,
1790
+ zone_builder_factory,
1791
+ )
1792
+ . unwrap ( ) ;
1793
+
1794
+ let ( propolis_server, _propolis_client) =
1795
+ propolis_mock_server ( & logctx. log ) ;
1796
+ let propolis_addr = propolis_server. local_addr ( ) ;
1797
+
1798
+ // automock'd things used during this test
1799
+ let _mock_vnic_contexts = mock_vnic_contexts ( ) ;
1800
+ let _mock_zone_contexts = mock_zone_contexts ( ) ;
1801
+
1802
+ let instance_id = Uuid :: new_v4 ( ) ;
1803
+ let propolis_id = Uuid :: new_v4 ( ) ;
1804
+ let InstanceInitialState {
1805
+ hardware,
1806
+ instance_runtime,
1807
+ vmm_runtime,
1808
+ propolis_addr,
1809
+ } = fake_instance_initial_state ( propolis_id, propolis_addr) ;
1810
+
1811
+ mgr. ensure_registered (
1812
+ instance_id,
1813
+ propolis_id,
1814
+ hardware,
1815
+ instance_runtime,
1816
+ vmm_runtime,
1817
+ propolis_addr,
1818
+ )
1819
+ . await
1820
+ . unwrap ( ) ;
1821
+
1822
+ todo ! ( ) ;
1823
+
1824
+ logctx. cleanup_successful ( ) ;
1825
+ }
1727
1826
}
0 commit comments