@Test
    public void testNoServices() throws HostStateChangeDeniedException {
        HostName hostName1 = new HostName("host1");
        HostName hostName2 = new HostName("host2");
        HostName hostName3 = new HostName("host3");
        HostName hostName4 = new HostName("host4");
        HostName hostName5 = new HostName("host5");
        HostName hostName6 = new HostName("host6");

        ServiceInstance service2 = modelUtils.createServiceInstance("service-2", hostName2, ServiceStatus.DOWN);

        // Within down moratorium
        Instant downSince5 = clock.instant().minus(ClusterApiImpl.downMoratorium).plus(Duration.ofSeconds(5));
        ServiceInstance service5 = modelUtils.createServiceInstance("service-5", hostName5,
                new ServiceStatusInfo(ServiceStatus.DOWN, downSince5, downSince5, Optional.empty(), Optional.empty()));

        // After down moratorium
        Instant downSince6 = clock.instant().minus(ClusterApiImpl.downMoratorium).minus(Duration.ofSeconds(5));
        ServiceInstance service6 = modelUtils.createServiceInstance("service-6", hostName6,
                new ServiceStatusInfo(ServiceStatus.DOWN, downSince6, downSince6, Optional.empty(), Optional.empty()));

        ServiceCluster serviceCluster = modelUtils.createServiceCluster(
                "cluster",
                new ServiceType("service-type"),
                List.of(
                        modelUtils.createServiceInstance("service-1", hostName1, ServiceStatus.UP),
                        service2,
                        modelUtils.createServiceInstance("service-3", hostName3, ServiceStatus.UP),
                        modelUtils.createServiceInstance("service-4", hostName4, ServiceStatus.DOWN),
                        service5,
                        service6
                )
        );
        modelUtils.createApplicationInstance(List.of(serviceCluster));

        modelUtils.createNode(hostName1, HostStatus.NO_REMARKS);
        modelUtils.createNode(hostName2, HostStatus.NO_REMARKS);
        modelUtils.createNode(hostName3, HostStatus.ALLOWED_TO_BE_DOWN);
        modelUtils.createNode(hostName4, HostStatus.ALLOWED_TO_BE_DOWN);
        modelUtils.createNode(hostName5, HostStatus.NO_REMARKS);
        modelUtils.createNode(hostName6, HostStatus.NO_REMARKS);

        var reason2 = SuspensionReasons.isDown(service2);
        var reason6 = SuspensionReasons.downSince(service6, downSince6, Duration.ofSeconds(35));
        var reasons2and6 = new SuspensionReasons().mergeWith(reason2).mergeWith(reason6);

        verifyNoServices(serviceCluster, Optional.empty(), false, hostName1);
        verifyNoServices(serviceCluster, Optional.of(reason2), false, hostName2);
        verifyNoServices(serviceCluster, Optional.of(SuspensionReasons.nothingNoteworthy()), false, hostName3);
        verifyNoServices(serviceCluster, Optional.of(SuspensionReasons.nothingNoteworthy()), false, hostName4);
        verifyNoServices(serviceCluster, Optional.empty(), false, hostName5);
        verifyNoServices(serviceCluster, Optional.of(reason6), false, hostName6);

        verifyNoServices(serviceCluster, Optional.empty(), false, hostName1, hostName2);
        verifyNoServices(serviceCluster, Optional.of(reasons2and6), false, hostName2, hostName3, hostName6);
        verifyNoServices(serviceCluster, Optional.of(reasons2and6), false,
                hostName2, hostName3, hostName4, hostName6);
        verifyNoServices(serviceCluster, Optional.empty(), true,
                hostName2, hostName3, hostName4, hostName5, hostName6);
        verifyNoServices(serviceCluster, Optional.empty(), false,
                hostName1, hostName2, hostName3, hostName4, hostName6);
        verifyNoServices(serviceCluster, Optional.empty(), true,
                hostName1, hostName2, hostName3, hostName4, hostName5, hostName6);
    }
Make a ClusterApiImpl for the cfg1 config server, with cfg3 missing from the cluster (not provisioned).
orchestrator/src/test/java/com/yahoo/vespa/orchestrator/model/ClusterApiImplTest.java