Skip to content

Commit

Permalink
fix(roles): file-based roles fail when the user is not provided in th…
Browse files Browse the repository at this point in the history
…e file (#508) (#509)

* handle case of null for file-based roles
* add unit tests
  • Loading branch information
spinnakerbot authored and Travis Tomsu committed Nov 19, 2019
1 parent 9dcab2c commit 47a6a00
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,7 @@
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -59,7 +55,7 @@ private Map<String, List<Role>> parse(Reader source) throws IOException {
@Override
public List<Role> loadRoles(ExternalUser user) {
try {
return new ArrayList<>(parse().get(user.getId()));
return Optional.ofNullable(parse().get(user.getId())).orElse(Collections.emptyList());
} catch (IOException io) {
log.error("Couldn't load roles for user " + user.getId() + " from file", io);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,20 +33,24 @@ class FileBasedUserRolesProviderSpec extends Specification {
when:
def result1 = provider.loadRoles(externalUser("batman"))
def result2 = provider.loadRoles(externalUser("foo"))
def result3 = provider.loadRoles(externalUser("spiderman"))

then:
result1.name.containsAll(["crimefighter", "jokerjailer"])
result2.name.containsAll(["bar", "baz"])
result3 == []

when:
def result3 = provider.multiLoadRoles([externalUser("batman")])
def result4 = provider.multiLoadRoles([externalUser("batman"), externalUser("foo")])
def result4 = provider.multiLoadRoles([externalUser("batman")])
def result5 = provider.multiLoadRoles([externalUser("batman"), externalUser("foo")])
def result6 = provider.multiLoadRoles([externalUser("spiderman")])

then:
result3.containsKey("batman")
!result3.containsKey("foo")
result4.containsKey("batman")
!result4.containsKey("foo")

result4.keySet().containsAll("batman", "foo")
result5.keySet().containsAll("batman", "foo")
result6.keySet().size() == 0
}

private static ExternalUser externalUser(String id) {
Expand Down

0 comments on commit 47a6a00

Please sign in to comment.