@Test
public void testPostSSHRequestException() throws IOException {

    ChangeLogStore structStore = new ZMSFileChangeLogStore("/tmp/zts_server_unit_tests/zts_root",
            privateKey, "0");
    DataStore store = new DataStore(structStore, null);
    ZTSImpl ztsImpl = new ZTSImpl(mockCloudStore, store);
    SignedDomain providerDomain = signedAuthorizedProviderDomain();
    store.processDomain(providerDomain, false);
    SignedDomain tenantDomain = signedBootstrapTenantDomain("athenz.provider", "athenz", "production");
    store.processDomain(tenantDomain, false);
    SSHCertRequestData data = new SSHCertRequestData();
    data.setDestinations(Arrays.asList("dest1", "dest2"));
    data.setPrincipals(Arrays.asList("user1", "user2"));
    data.setSources(Collections.singletonList("src"));
    data.setTouchPublicKey("publickey");
    SSHCertRequestMeta meta = new SSHCertRequestMeta();
    meta.setRequestor("req");
    meta.setOrigin("origin");
    meta.setClientInfo("info");
    meta.setSshClientVersion("1.2");
    meta.setCertType("user");
    SSHCertRequest certRequest = new SSHCertRequest();
    certRequest.setCertRequestData(data);
    certRequest.setCertRequestMeta(meta);
    InstanceCertManager instanceManager = Mockito.spy(ztsImpl.instanceCertManager);
    Mockito.when(instanceManager.generateSSHCertificates(Mockito.any(), eq(certRequest)))
            .thenThrow(new com.yahoo.athenz.common.server.rest.ResourceException(400, "Failed to get ssh certs"));
    ztsImpl.instanceCertManager = instanceManager;
    Path path = Paths.get("src/test/resources/athenz.instanceid.pem");
    String pem = new String(Files.readAllBytes(path));
    CertificateAuthority certAuthority = new CertificateAuthority();
    SimplePrincipal principal = (SimplePrincipal) SimplePrincipal.create("athenz", "production",
            "v=S1;d=athenz;n=production;s=signature", 0, certAuthority);
    X509Certificate cert = Crypto.loadX509Certificate(pem);
    principal.setX509Certificate(cert);
    ResourceContext context = createResourceContext(principal);
    try {
        ztsImpl.postSSHCertRequest(context, certRequest);
        fail();
    } catch (ResourceException ex) {
        assertEquals(400, ex.getCode());
        assertTrue(ex.getMessage().contains("Failed to get ssh certs"));
    }
}