Skip to content
This repository was archived by the owner on Dec 3, 2023. It is now read-only.

Commit f45d913

Browse files
authored
fix: verify correctness of map -> list equality (#174)
* fix: verify correctness of map -> list equality * address comments * format
1 parent d28f885 commit f45d913

File tree

2 files changed

+43
-3
lines changed

2 files changed

+43
-3
lines changed

google-cloud-core/src/main/java/com/google/cloud/Policy.java

+13-3
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public final Builder addIdentity(Role role, Identity first, Identity... others)
260260
Binding binding = bindingsList.get(i);
261261
if (binding.getRole().equals(role.getValue())) {
262262
Binding.Builder bindingBuilder = binding.toBuilder();
263-
ImmutableList.Builder<String> membersBuilder = ImmutableList.builder();
263+
ImmutableSet.Builder<String> membersBuilder = ImmutableSet.builder();
264264
membersBuilder.addAll(binding.getMembers());
265265
membersBuilder.add(first.strValue());
266266
for (Identity identity : others) {
@@ -273,7 +273,7 @@ public final Builder addIdentity(Role role, Identity first, Identity... others)
273273
}
274274
// Binding does not yet exist.
275275
Binding.Builder bindingBuilder = Binding.newBuilder().setRole(role.getValue());
276-
ImmutableList.Builder<String> membersBuilder = ImmutableList.builder();
276+
ImmutableSet.Builder<String> membersBuilder = ImmutableSet.builder();
277277
membersBuilder.add(first.strValue());
278278
for (Identity identity : others) {
279279
membersBuilder.add(identity.strValue());
@@ -432,9 +432,19 @@ public boolean equals(Object obj) {
432432
return false;
433433
}
434434
Policy other = (Policy) obj;
435-
if (!bindingsList.equals(other.getBindingsList())) {
435+
if (bindingsList == null && other.getBindingsList() == null) {
436+
return true;
437+
}
438+
if ((bindingsList == null && other.getBindingsList() != null)
439+
|| bindingsList != null && other.getBindingsList() == null
440+
|| bindingsList.size() != other.getBindingsList().size()) {
436441
return false;
437442
}
443+
for (Binding binding : bindingsList) {
444+
if (!other.getBindingsList().contains(binding)) {
445+
return false;
446+
}
447+
}
438448
return Objects.equals(etag, other.getEtag()) && version == other.getVersion();
439449
}
440450

google-cloud-core/src/test/java/com/google/cloud/PolicyTest.java

+30
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,36 @@ public void testBuilder() {
104104
assertEquals(0, policy.getVersion());
105105
}
106106

107+
@Test
108+
public void testPolicyOrderShouldNotMatter() {
109+
Role role1 = Role.of("role1");
110+
Identity identity1 = Identity.user("user1@example.com");
111+
Role role2 = Role.of("role2");
112+
Identity identity2 = Identity.user("user2@example.com");
113+
Policy policy1 =
114+
Policy.newBuilder().addIdentity(role1, identity1).addIdentity(role2, identity2).build();
115+
Policy policy2 =
116+
Policy.newBuilder().addIdentity(role2, identity2).addIdentity(role1, identity1).build();
117+
assertEquals(policy1, policy2);
118+
}
119+
120+
@Test
121+
public void testPolicyMultipleAddIdentitiesShouldNotMatter() {
122+
Role role1 = Role.of("role1");
123+
Identity identity1 = Identity.user("user1@example.com");
124+
Role role2 = Role.of("role2");
125+
Identity identity2 = Identity.user("user2@example.com");
126+
Policy policy1 =
127+
Policy.newBuilder()
128+
.addIdentity(role1, identity1)
129+
.addIdentity(role2, identity2)
130+
.addIdentity(role2, identity2)
131+
.build();
132+
Policy policy2 =
133+
Policy.newBuilder().addIdentity(role2, identity2).addIdentity(role1, identity1).build();
134+
assertEquals(policy1, policy2);
135+
}
136+
107137
@Test
108138
public void testIllegalPolicies() {
109139
try {

0 commit comments

Comments
 (0)