DeleteAction implements Runnable { @Override public void run() { List<String> type = deleteActionConfig.deleteType; if (type == null || type.isEmpty()) { throw new IllegalArgumentException("Must specify a single type to delete."); } if (deleteActionConfig.name == null || !validName(deleteActionConfig.name)) { throw new IllegalArgumentException(format("Invalid name, must match %s", VALID_NAME_PATTERN)); } String firstType = type.get(0).toLowerCase().trim(); switch (firstType) { case "group": try { Group group = keywhizClient.getGroupByName(deleteActionConfig.name); logger.info("Deleting group '{}'.", group.getName()); keywhizClient.deleteGroupWithId(group.getId()); } catch (NotFoundException e) { throw new AssertionError("Group does not exist."); } catch (IOException e) { throw Throwables.propagate(e); } break; case "client": try { Client client = keywhizClient.getClientByName(deleteActionConfig.name); logger.info("Deleting client '{}'.", client.getName()); keywhizClient.deleteClientWithId(client.getId()); } catch (NotFoundException e) { throw new AssertionError("Client does not exist."); } catch (IOException e) { throw Throwables.propagate(e); } break; case "secret": try { SanitizedSecret sanitizedSecret = keywhizClient.getSanitizedSecretByName(deleteActionConfig.name); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, UTF_8)); while (true) { System.out.println( format("Please confirm deletion of secret '%s': Y/N", sanitizedSecret.name())); String line = reader.readLine(); if (line == null || line.toUpperCase().startsWith("N")) { return; } else if (line.toUpperCase().startsWith("Y")) { logger.info("Deleting secret '{}'.", sanitizedSecret.name()); keywhizClient.deleteSecretWithId(sanitizedSecret.id()); return; } } } catch (NotFoundException e) { throw new AssertionError("Secret does not exist: " + deleteActionConfig.name); } catch (IOException e) { throw new AssertionError(e); } default: throw new IllegalArgumentException("Invalid delete type specified: " + type); } } DeleteAction(DeleteActionConfig deleteActionConfig, KeywhizClient client); @Override void run();  }
@Test public void deleteCallsDeleteForGroup() throws Exception { deleteAction.inputStream = yes; deleteActionConfig.deleteType = Arrays.asList("group"); deleteActionConfig.name = "Web"; Group group = new Group(0, deleteActionConfig.name, null, null, null, null, null, null); when(keywhizClient.getGroupByName(deleteActionConfig.name)).thenReturn(group); deleteAction.run(); verify(keywhizClient).deleteGroupWithId(group.getId()); }
@Test public void deleteCallsDeleteForClient() throws Exception { deleteAction.inputStream = yes; deleteActionConfig.deleteType = Arrays.asList("client"); deleteActionConfig.name = "newClient"; Client client = new Client(657, "newClient", null, null, NOW, null, NOW, null, null, null, true, false); when(keywhizClient.getClientByName(deleteActionConfig.name)).thenReturn(client); deleteAction.run(); verify(keywhizClient).deleteClientWithId(client.getId()); }
@Test public void deleteCallsDeleteForSecret() throws Exception { deleteAction.inputStream = yes; deleteActionConfig.deleteType = Arrays.asList("secret"); deleteActionConfig.name = secret.getDisplayName(); when(keywhizClient.getSanitizedSecretByName(secret.getName())).thenReturn(sanitizedSecret); deleteAction.run(); verify(keywhizClient).deleteSecretWithId(sanitizedSecret.id()); }
@Test public void deleteSkipsWithoutConfirmation() throws Exception { deleteAction.inputStream = no; deleteActionConfig.deleteType = Arrays.asList("secret"); deleteActionConfig.name = secret.getDisplayName(); when(keywhizClient.getSanitizedSecretByName(secret.getName())).thenReturn(sanitizedSecret); deleteAction.run(); verify(keywhizClient, never()).deleteSecretWithId(anyInt()); }
@Test(expected = AssertionError.class) public void deleteThrowsIfDeleteGroupFails() throws Exception { deleteActionConfig.deleteType = Arrays.asList("group"); deleteActionConfig.name = "Web"; when(keywhizClient.getGroupByName(deleteActionConfig.name)).thenThrow(new NotFoundException()); deleteAction.run(); }
@Test(expected = AssertionError.class) public void deleteThrowsIfDeleteClientFails() throws Exception { deleteActionConfig.deleteType = Arrays.asList("client"); deleteActionConfig.name = "nonexistent-client-name"; when(keywhizClient.getClientByName(deleteActionConfig.name)).thenThrow(new NotFoundException()); deleteAction.run(); }
@Test(expected = AssertionError.class) public void deleteThrowsIfDeleteSecretFails() throws Exception { deleteActionConfig.deleteType = Arrays.asList("secret"); deleteActionConfig.name = secret.getDisplayName(); when(keywhizClient.getSanitizedSecretByName(secret.getName())) .thenThrow(new NotFoundException()); deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteThrowsIfNoTypeSpecified() throws Exception { deleteActionConfig.deleteType = null; deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteThrowsIfTooManyArguments() throws Exception { deleteActionConfig.deleteType = Arrays.asList("group", "secret"); deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteThrowsIfInvalidType() throws Exception { deleteActionConfig.deleteType = Arrays.asList("invalid_type"); deleteActionConfig.name = "any-name"; deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteValidatesGroupName() throws Exception { deleteActionConfig.deleteType = Arrays.asList("group"); deleteActionConfig.name = "Invalid Name"; deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteValidatesClientName() throws Exception { deleteActionConfig.deleteType = Arrays.asList("client"); deleteActionConfig.name = "Invalid Name"; deleteAction.run(); }
@Test(expected = IllegalArgumentException.class) public void deleteValidatesSecretName() throws Exception { deleteActionConfig.deleteType = Arrays.asList("secret"); deleteActionConfig.name = "Invalid Name"; deleteAction.run(); }