summaryrefslogtreecommitdiffstats
path: root/javatests/com/google/gerrit/common/data/PermissionTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'javatests/com/google/gerrit/common/data/PermissionTest.java')
-rw-r--r--javatests/com/google/gerrit/common/data/PermissionTest.java341
1 files changed, 341 insertions, 0 deletions
diff --git a/javatests/com/google/gerrit/common/data/PermissionTest.java b/javatests/com/google/gerrit/common/data/PermissionTest.java
new file mode 100644
index 0000000000..f76323facc
--- /dev/null
+++ b/javatests/com/google/gerrit/common/data/PermissionTest.java
@@ -0,0 +1,341 @@
+// Copyright (C) 2018 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.common.data;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import com.google.common.collect.ImmutableList;
+import com.google.gerrit.reviewdb.client.AccountGroup;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+
+public class PermissionTest {
+ private static final String PERMISSION_NAME = "foo";
+
+ private Permission permission;
+
+ @Before
+ public void setup() {
+ this.permission = new Permission(PERMISSION_NAME);
+ }
+
+ @Test
+ public void isPermission() {
+ assertThat(Permission.isPermission(Permission.ABANDON)).isTrue();
+ assertThat(Permission.isPermission("no-permission")).isFalse();
+
+ assertThat(Permission.isPermission(Permission.LABEL + "Code-Review")).isTrue();
+ assertThat(Permission.isPermission(Permission.LABEL_AS + "Code-Review")).isTrue();
+ assertThat(Permission.isPermission("Code-Review")).isFalse();
+ }
+
+ @Test
+ public void hasRange() {
+ assertThat(Permission.hasRange(Permission.ABANDON)).isFalse();
+ assertThat(Permission.hasRange("no-permission")).isFalse();
+
+ assertThat(Permission.hasRange(Permission.LABEL + "Code-Review")).isTrue();
+ assertThat(Permission.hasRange(Permission.LABEL_AS + "Code-Review")).isTrue();
+ assertThat(Permission.hasRange("Code-Review")).isFalse();
+ }
+
+ @Test
+ public void isLabel() {
+ assertThat(Permission.isLabel(Permission.ABANDON)).isFalse();
+ assertThat(Permission.isLabel("no-permission")).isFalse();
+
+ assertThat(Permission.isLabel(Permission.LABEL + "Code-Review")).isTrue();
+ assertThat(Permission.isLabel(Permission.LABEL_AS + "Code-Review")).isFalse();
+ assertThat(Permission.isLabel("Code-Review")).isFalse();
+ }
+
+ @Test
+ public void isLabelAs() {
+ assertThat(Permission.isLabelAs(Permission.ABANDON)).isFalse();
+ assertThat(Permission.isLabelAs("no-permission")).isFalse();
+
+ assertThat(Permission.isLabelAs(Permission.LABEL + "Code-Review")).isFalse();
+ assertThat(Permission.isLabelAs(Permission.LABEL_AS + "Code-Review")).isTrue();
+ assertThat(Permission.isLabelAs("Code-Review")).isFalse();
+ }
+
+ @Test
+ public void forLabel() {
+ assertThat(Permission.forLabel("Code-Review")).isEqualTo(Permission.LABEL + "Code-Review");
+ }
+
+ @Test
+ public void forLabelAs() {
+ assertThat(Permission.forLabelAs("Code-Review")).isEqualTo(Permission.LABEL_AS + "Code-Review");
+ }
+
+ @Test
+ public void extractLabel() {
+ assertThat(Permission.extractLabel(Permission.LABEL + "Code-Review")).isEqualTo("Code-Review");
+ assertThat(Permission.extractLabel(Permission.LABEL_AS + "Code-Review"))
+ .isEqualTo("Code-Review");
+ assertThat(Permission.extractLabel("Code-Review")).isNull();
+ assertThat(Permission.extractLabel(Permission.ABANDON)).isNull();
+ }
+
+ @Test
+ public void canBeOnAllProjects() {
+ assertThat(Permission.canBeOnAllProjects(AccessSection.ALL, Permission.ABANDON)).isTrue();
+ assertThat(Permission.canBeOnAllProjects(AccessSection.ALL, Permission.OWNER)).isFalse();
+ assertThat(Permission.canBeOnAllProjects(AccessSection.ALL, Permission.LABEL + "Code-Review"))
+ .isTrue();
+ assertThat(
+ Permission.canBeOnAllProjects(AccessSection.ALL, Permission.LABEL_AS + "Code-Review"))
+ .isTrue();
+
+ assertThat(Permission.canBeOnAllProjects("refs/heads/*", Permission.ABANDON)).isTrue();
+ assertThat(Permission.canBeOnAllProjects("refs/heads/*", Permission.OWNER)).isTrue();
+ assertThat(Permission.canBeOnAllProjects("refs/heads/*", Permission.LABEL + "Code-Review"))
+ .isTrue();
+ assertThat(Permission.canBeOnAllProjects("refs/heads/*", Permission.LABEL_AS + "Code-Review"))
+ .isTrue();
+ }
+
+ @Test
+ public void getName() {
+ assertThat(permission.getName()).isEqualTo(PERMISSION_NAME);
+ }
+
+ @Test
+ public void getLabel() {
+ assertThat(new Permission(Permission.LABEL + "Code-Review").getLabel())
+ .isEqualTo("Code-Review");
+ assertThat(new Permission(Permission.LABEL_AS + "Code-Review").getLabel())
+ .isEqualTo("Code-Review");
+ assertThat(new Permission("Code-Review").getLabel()).isNull();
+ assertThat(new Permission(Permission.ABANDON).getLabel()).isNull();
+ }
+
+ @Test
+ public void exclusiveGroup() {
+ assertThat(permission.getExclusiveGroup()).isFalse();
+
+ permission.setExclusiveGroup(true);
+ assertThat(permission.getExclusiveGroup()).isTrue();
+
+ permission.setExclusiveGroup(false);
+ assertThat(permission.getExclusiveGroup()).isFalse();
+ }
+
+ @Test
+ public void noExclusiveGroupOnOwnerPermission() {
+ Permission permission = new Permission(Permission.OWNER);
+ assertThat(permission.getExclusiveGroup()).isFalse();
+
+ permission.setExclusiveGroup(true);
+ assertThat(permission.getExclusiveGroup()).isFalse();
+ }
+
+ @Test
+ public void getEmptyRules() {
+ assertThat(permission.getRules()).isNotNull();
+ assertThat(permission.getRules()).isEmpty();
+ }
+
+ @Test
+ public void setAndGetRules() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+ assertThat(permission.getRules()).containsExactly(permissionRule1, permissionRule2).inOrder();
+
+ PermissionRule permissionRule3 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-3"), "group3"));
+ permission.setRules(ImmutableList.of(permissionRule3));
+ assertThat(permission.getRules()).containsExactly(permissionRule3);
+ }
+
+ @Test
+ public void cannotAddPermissionByModifyingListThatWasProvidedToAccessSection() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ GroupReference groupReference3 = new GroupReference(new AccountGroup.UUID("uuid-3"), "group3");
+
+ List<PermissionRule> rules = new ArrayList<>();
+ rules.add(permissionRule1);
+ rules.add(permissionRule2);
+ permission.setRules(rules);
+ assertThat(permission.getRule(groupReference3)).isNull();
+
+ PermissionRule permissionRule3 = new PermissionRule(groupReference3);
+ rules.add(permissionRule3);
+ assertThat(permission.getRule(groupReference3)).isNull();
+ }
+
+ @Test
+ public void cannotAddPermissionByModifyingListThatWasRetrievedFromAccessSection() {
+ GroupReference groupReference1 = new GroupReference(new AccountGroup.UUID("uuid-1"), "group1");
+ PermissionRule permissionRule1 = new PermissionRule(groupReference1);
+ permission.getRules().add(permissionRule1);
+ assertThat(permission.getRule(groupReference1)).isNull();
+
+ List<PermissionRule> rules = new ArrayList<>();
+ rules.add(new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2")));
+ rules.add(new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-3"), "group3")));
+ permission.setRules(rules);
+ assertThat(permission.getRule(groupReference1)).isNull();
+ permission.getRules().add(permissionRule1);
+ assertThat(permission.getRule(groupReference1)).isNull();
+ }
+
+ @Test
+ public void getNonExistingRule() {
+ GroupReference groupReference = new GroupReference(new AccountGroup.UUID("uuid-1"), "group1");
+ assertThat(permission.getRule(groupReference)).isNull();
+ assertThat(permission.getRule(groupReference, false)).isNull();
+ }
+
+ @Test
+ public void getRule() {
+ GroupReference groupReference = new GroupReference(new AccountGroup.UUID("uuid-1"), "group1");
+ PermissionRule permissionRule = new PermissionRule(groupReference);
+ permission.setRules(ImmutableList.of(permissionRule));
+ assertThat(permission.getRule(groupReference)).isEqualTo(permissionRule);
+ }
+
+ @Test
+ public void createMissingRuleOnGet() {
+ GroupReference groupReference = new GroupReference(new AccountGroup.UUID("uuid-1"), "group1");
+ assertThat(permission.getRule(groupReference)).isNull();
+
+ assertThat(permission.getRule(groupReference, true))
+ .isEqualTo(new PermissionRule(groupReference));
+ }
+
+ @Test
+ public void addRule() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+ GroupReference groupReference3 = new GroupReference(new AccountGroup.UUID("uuid-3"), "group3");
+ assertThat(permission.getRule(groupReference3)).isNull();
+
+ PermissionRule permissionRule3 = new PermissionRule(groupReference3);
+ permission.add(permissionRule3);
+ assertThat(permission.getRule(groupReference3)).isEqualTo(permissionRule3);
+ assertThat(permission.getRules())
+ .containsExactly(permissionRule1, permissionRule2, permissionRule3)
+ .inOrder();
+ }
+
+ @Test
+ public void removeRule() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ GroupReference groupReference3 = new GroupReference(new AccountGroup.UUID("uuid-3"), "group3");
+ PermissionRule permissionRule3 = new PermissionRule(groupReference3);
+
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2, permissionRule3));
+ assertThat(permission.getRule(groupReference3)).isNotNull();
+
+ permission.remove(permissionRule3);
+ assertThat(permission.getRule(groupReference3)).isNull();
+ assertThat(permission.getRules()).containsExactly(permissionRule1, permissionRule2).inOrder();
+ }
+
+ @Test
+ public void removeRuleByGroupReference() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ GroupReference groupReference3 = new GroupReference(new AccountGroup.UUID("uuid-3"), "group3");
+ PermissionRule permissionRule3 = new PermissionRule(groupReference3);
+
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2, permissionRule3));
+ assertThat(permission.getRule(groupReference3)).isNotNull();
+
+ permission.removeRule(groupReference3);
+ assertThat(permission.getRule(groupReference3)).isNull();
+ assertThat(permission.getRules()).containsExactly(permissionRule1, permissionRule2).inOrder();
+ }
+
+ @Test
+ public void clearRules() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+ assertThat(permission.getRules()).isNotEmpty();
+
+ permission.clearRules();
+ assertThat(permission.getRules()).isEmpty();
+ }
+
+ @Test
+ public void mergePermissions() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+ PermissionRule permissionRule3 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-3"), "group3"));
+
+ Permission permission1 = new Permission("foo");
+ permission1.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+
+ Permission permission2 = new Permission("bar");
+ permission2.setRules(ImmutableList.of(permissionRule2, permissionRule3));
+
+ permission1.mergeFrom(permission2);
+ assertThat(permission1.getRules())
+ .containsExactly(permissionRule1, permissionRule2, permissionRule3)
+ .inOrder();
+ }
+
+ @Test
+ public void testEquals() {
+ PermissionRule permissionRule1 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-1"), "group1"));
+ PermissionRule permissionRule2 =
+ new PermissionRule(new GroupReference(new AccountGroup.UUID("uuid-2"), "group2"));
+
+ permission.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+
+ Permission permissionSameRulesOtherName = new Permission("bar");
+ permissionSameRulesOtherName.setRules(ImmutableList.of(permissionRule1, permissionRule2));
+ assertThat(permission.equals(permissionSameRulesOtherName)).isFalse();
+
+ Permission permissionSameRulesSameNameOtherExclusiveGroup = new Permission("foo");
+ permissionSameRulesSameNameOtherExclusiveGroup.setRules(
+ ImmutableList.of(permissionRule1, permissionRule2));
+ permissionSameRulesSameNameOtherExclusiveGroup.setExclusiveGroup(true);
+ assertThat(permission.equals(permissionSameRulesSameNameOtherExclusiveGroup)).isFalse();
+
+ Permission permissionOther = new Permission(PERMISSION_NAME);
+ permissionOther.setRules(ImmutableList.of(permissionRule1));
+ assertThat(permission.equals(permissionOther)).isFalse();
+
+ permissionOther.add(permissionRule2);
+ assertThat(permission.equals(permissionOther)).isTrue();
+ }
+}