diff --git a/sources/src/main/java/com/google/solutions/jitaccess/core/data/RoleBinding.java b/sources/src/main/java/com/google/solutions/jitaccess/core/data/RoleBinding.java index 254d07962..81589a9fd 100644 --- a/sources/src/main/java/com/google/solutions/jitaccess/core/data/RoleBinding.java +++ b/sources/src/main/java/com/google/solutions/jitaccess/core/data/RoleBinding.java @@ -23,6 +23,7 @@ import com.google.common.base.Preconditions; +import java.util.Comparator; import java.util.Objects; /** @@ -74,6 +75,8 @@ public int hashCode() { @Override public int compareTo(RoleBinding o) { - return this.fullResourceName.compareTo(o.fullResourceName); + return Comparator.comparing((RoleBinding r) -> r.fullResourceName) + .thenComparing(r -> r.role) + .compare(this, o); } } diff --git a/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectId.java b/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectId.java index 1fc5adea1..fa1d36712 100644 --- a/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectId.java +++ b/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectId.java @@ -23,6 +23,10 @@ import org.junit.jupiter.api.Test; +import java.util.List; +import java.util.TreeSet; +import java.util.stream.Collectors; + import static org.junit.jupiter.api.Assertions.*; public class TestProjectId { @@ -104,4 +108,14 @@ public void whenObjectIsDifferentType_ThenEqualsReturnsFalse() { assertFalse(id1.equals("")); } + + @Test + public void whenInTreeSet_ThenReturnsInExpectedOrder() { + var projects = List.of(new ProjectId("project-3"),new ProjectId("project-1"), new ProjectId("project-2")); + var sortedProjects = new TreeSet<>(projects); + var sortedIter = sortedProjects.iterator(); + assertEquals(sortedIter.next(), new ProjectId("project-1")); + assertEquals(sortedIter.next(), new ProjectId("project-2")); + assertEquals(sortedIter.next(), new ProjectId("project-3")); + } } diff --git a/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectRole.java b/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectRole.java index 22c3dc8fa..2c585eb61 100644 --- a/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectRole.java +++ b/sources/src/test/java/com/google/solutions/jitaccess/core/data/TestProjectRole.java @@ -23,6 +23,9 @@ import org.junit.jupiter.api.Test; +import java.util.List; +import java.util.TreeSet; + import static org.junit.jupiter.api.Assertions.*; public class TestProjectRole { @@ -133,4 +136,26 @@ public void equalsNullIsFalse() { assertFalse(role.equals(null)); } + + @Test + public void whenInTreeSet_ThenReturnsInExpectedOrder() { + var role1 = new ProjectRole( + new RoleBinding("//cloudresourcemanager.googleapis.com/projects/project-1", "role/sample1"), + ProjectRole.Status.ELIGIBLE_FOR_JIT + ); + var role2 = new ProjectRole( + new RoleBinding("//cloudresourcemanager.googleapis.com/projects/project-1", "role/sample2"), + ProjectRole.Status.ELIGIBLE_FOR_JIT + ); + var role3 = new ProjectRole( + new RoleBinding("//cloudresourcemanager.googleapis.com/projects/project-2", "role/sample1"), + ProjectRole.Status.ELIGIBLE_FOR_JIT + ); + var roles = List.of(role3,role1,role2); + var sorted = new TreeSet<>(roles); + var sortedIter = sorted.iterator(); + assertEquals(sortedIter.next(), role1); + assertEquals(sortedIter.next(), role2); + assertEquals(sortedIter.next(), role3); + } } \ No newline at end of file