diff --git a/src/main/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersTool.java b/src/main/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersTool.java index 883a780e9ea..88ff5a9a719 100644 --- a/src/main/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersTool.java +++ b/src/main/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersTool.java @@ -404,18 +404,26 @@ public class ESUsersTool extends CliTool { } } else { boolean unknownRolesFound = false; + boolean usersExist = false; for (Map.Entry entry : userRoles.entrySet()) { String[] roles = entry.getValue(); Set unknownRoles = Sets.difference(Sets.newHashSet(roles), knownRoles.keySet()); String[] markedRoles = markUnknownRoles(roles, unknownRoles); terminal.println("%-15s: %s", entry.getKey(), Joiner.on(",").join(markedRoles)); unknownRolesFound = unknownRolesFound || !unknownRoles.isEmpty(); + usersExist = true; } // list users without roles Set usersWithoutRoles = Sets.newHashSet(users); usersWithoutRoles.removeAll(userRoles.keySet()); for (String user : usersWithoutRoles) { terminal.println("%-15s: -", user); + usersExist = true; + } + + if (!usersExist) { + terminal.println("No users found"); + return ExitStatus.OK; } if (unknownRolesFound) { diff --git a/src/test/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersToolTests.java b/src/test/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersToolTests.java index c7c3dff2834..b7c57bfcc68 100644 --- a/src/test/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersToolTests.java +++ b/src/test/java/org/elasticsearch/shield/authc/esusers/tool/ESUsersToolTests.java @@ -631,6 +631,26 @@ public class ESUsersToolTests extends CliToolTestCase { assertThat(catchTerminalOutput.getTerminalOutput(), hasItem(not(containsString("user")))); } + @Test + public void testListUsersAndRoles_Cmd_NoUsers() throws Exception { + File usersFile = writeFile(""); + File usersRoleFile = writeFile(""); + Settings settings = ImmutableSettings.builder() + .put("shield.authc.realms.esusers.type", "esusers") + .put("shield.authc.realms.esusers.files.users", usersFile) + .put("shield.authc.realms.esusers.files.users_roles", usersRoleFile) + .build(); + + CaptureOutputTerminal terminal = new CaptureOutputTerminal(); + ESUsersTool.ListUsersAndRoles cmd = new ESUsersTool.ListUsersAndRoles(terminal, null); + CliTool.ExitStatus status = execute(cmd, settings); + + assertThat(status, is(CliTool.ExitStatus.OK)); + List output = terminal.getTerminalOutput(); + assertThat(output, hasSize(1)); + assertThat(output.get(0), equalTo("No users found\n")); + } + @Test public void testListUsersAndRoles_Cmd_listSingleUserNotFound() throws Exception { File usersRoleFile = writeFile("admin: admin\nuser: user\nfoo:user\nbar:user\n");