summaryrefslogtreecommitdiffstats
path: root/javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java')
-rw-r--r--javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java300
1 files changed, 300 insertions, 0 deletions
diff --git a/javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java b/javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java
new file mode 100644
index 0000000000..fa6a722db2
--- /dev/null
+++ b/javatests/com/google/gerrit/reviewdb/client/RefNamesTest.java
@@ -0,0 +1,300 @@
+// Copyright (C) 2015 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.reviewdb.client;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.gerrit.reviewdb.client.RefNames.parseAfterShardedRefPart;
+import static com.google.gerrit.reviewdb.client.RefNames.parseRefSuffix;
+import static com.google.gerrit.reviewdb.client.RefNames.parseShardedRefPart;
+import static com.google.gerrit.reviewdb.client.RefNames.parseShardedUuidFromRefPart;
+import static com.google.gerrit.reviewdb.client.RefNames.skipShardedRefPart;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class RefNamesTest {
+ private static final String TEST_GROUP_UUID = "ccab3195282a8ce4f5014efa391e82d10f884c64";
+ private static final String TEST_SHARDED_GROUP_UUID =
+ TEST_GROUP_UUID.substring(0, 2) + "/" + TEST_GROUP_UUID;
+
+ @Rule public ExpectedException expectedException = ExpectedException.none();
+
+ private final Account.Id accountId = new Account.Id(1011123);
+ private final Change.Id changeId = new Change.Id(67473);
+ private final PatchSet.Id psId = new PatchSet.Id(changeId, 42);
+
+ @Test
+ public void fullName() throws Exception {
+ assertThat(RefNames.fullName(RefNames.REFS_CONFIG)).isEqualTo(RefNames.REFS_CONFIG);
+ assertThat(RefNames.fullName("refs/heads/master")).isEqualTo("refs/heads/master");
+ assertThat(RefNames.fullName("master")).isEqualTo("refs/heads/master");
+ assertThat(RefNames.fullName("refs/tags/v1.0")).isEqualTo("refs/tags/v1.0");
+ assertThat(RefNames.fullName("HEAD")).isEqualTo("HEAD");
+ }
+
+ @Test
+ public void changeRefs() throws Exception {
+ String changeMetaRef = RefNames.changeMetaRef(changeId);
+ assertThat(changeMetaRef).isEqualTo("refs/changes/73/67473/meta");
+ assertThat(RefNames.isNoteDbMetaRef(changeMetaRef)).isTrue();
+
+ String robotCommentsRef = RefNames.robotCommentsRef(changeId);
+ assertThat(robotCommentsRef).isEqualTo("refs/changes/73/67473/robot-comments");
+ assertThat(RefNames.isNoteDbMetaRef(robotCommentsRef)).isTrue();
+ }
+
+ @Test
+ public void refForGroupIsSharded() throws Exception {
+ AccountGroup.UUID groupUuid = new AccountGroup.UUID("ABCDEFG");
+ String groupRef = RefNames.refsGroups(groupUuid);
+ assertThat(groupRef).isEqualTo("refs/groups/AB/ABCDEFG");
+ }
+
+ @Test
+ public void refForGroupWithUuidLessThanTwoCharsIsRejected() throws Exception {
+ AccountGroup.UUID groupUuid = new AccountGroup.UUID("A");
+ expectedException.expect(IllegalArgumentException.class);
+ RefNames.refsGroups(groupUuid);
+ }
+
+ @Test
+ public void refForDeletedGroupIsSharded() throws Exception {
+ AccountGroup.UUID groupUuid = new AccountGroup.UUID("ABCDEFG");
+ String groupRef = RefNames.refsDeletedGroups(groupUuid);
+ assertThat(groupRef).isEqualTo("refs/deleted-groups/AB/ABCDEFG");
+ }
+
+ @Test
+ public void refForDeletedGroupWithUuidLessThanTwoCharsIsRejected() throws Exception {
+ AccountGroup.UUID groupUuid = new AccountGroup.UUID("A");
+ expectedException.expect(IllegalArgumentException.class);
+ RefNames.refsDeletedGroups(groupUuid);
+ }
+
+ @Test
+ public void refsUsers() throws Exception {
+ assertThat(RefNames.refsUsers(accountId)).isEqualTo("refs/users/23/1011123");
+ }
+
+ @Test
+ public void refsDraftComments() throws Exception {
+ assertThat(RefNames.refsDraftComments(changeId, accountId))
+ .isEqualTo("refs/draft-comments/73/67473/1011123");
+ }
+
+ @Test
+ public void refsDraftCommentsPrefix() throws Exception {
+ assertThat(RefNames.refsDraftCommentsPrefix(changeId))
+ .isEqualTo("refs/draft-comments/73/67473/");
+ }
+
+ @Test
+ public void refsStarredChanges() throws Exception {
+ assertThat(RefNames.refsStarredChanges(changeId, accountId))
+ .isEqualTo("refs/starred-changes/73/67473/1011123");
+ }
+
+ @Test
+ public void refsStarredChangesPrefix() throws Exception {
+ assertThat(RefNames.refsStarredChangesPrefix(changeId))
+ .isEqualTo("refs/starred-changes/73/67473/");
+ }
+
+ @Test
+ public void refsEdit() throws Exception {
+ assertThat(RefNames.refsEdit(accountId, changeId, psId))
+ .isEqualTo("refs/users/23/1011123/edit-67473/42");
+ }
+
+ @Test
+ public void isRefsEdit() throws Exception {
+ assertThat(RefNames.isRefsEdit("refs/users/23/1011123/edit-67473/42")).isTrue();
+
+ // user ref, but no edit ref
+ assertThat(RefNames.isRefsEdit("refs/users/23/1011123")).isFalse();
+
+ // other ref
+ assertThat(RefNames.isRefsEdit("refs/heads/master")).isFalse();
+ }
+
+ @Test
+ public void isRefsUsers() throws Exception {
+ assertThat(RefNames.isRefsUsers("refs/users/23/1011123")).isTrue();
+ assertThat(RefNames.isRefsUsers("refs/users/default")).isTrue();
+ assertThat(RefNames.isRefsUsers("refs/users/23/1011123/edit-67473/42")).isTrue();
+
+ assertThat(RefNames.isRefsUsers("refs/heads/master")).isFalse();
+ assertThat(RefNames.isRefsUsers("refs/groups/" + TEST_SHARDED_GROUP_UUID)).isFalse();
+ }
+
+ @Test
+ public void isRefsGroups() throws Exception {
+ assertThat(RefNames.isRefsGroups("refs/groups/" + TEST_SHARDED_GROUP_UUID)).isTrue();
+
+ assertThat(RefNames.isRefsGroups("refs/heads/master")).isFalse();
+ assertThat(RefNames.isRefsGroups("refs/users/23/1011123")).isFalse();
+ assertThat(RefNames.isRefsGroups(RefNames.REFS_GROUPNAMES)).isFalse();
+ assertThat(RefNames.isRefsGroups("refs/deleted-groups/" + TEST_SHARDED_GROUP_UUID)).isFalse();
+ }
+
+ @Test
+ public void isRefsDeletedGroups() throws Exception {
+ assertThat(RefNames.isRefsDeletedGroups("refs/deleted-groups/" + TEST_SHARDED_GROUP_UUID))
+ .isTrue();
+
+ assertThat(RefNames.isRefsDeletedGroups("refs/heads/master")).isFalse();
+ assertThat(RefNames.isRefsDeletedGroups("refs/users/23/1011123")).isFalse();
+ assertThat(RefNames.isRefsDeletedGroups(RefNames.REFS_GROUPNAMES)).isFalse();
+ assertThat(RefNames.isRefsDeletedGroups("refs/groups/" + TEST_SHARDED_GROUP_UUID)).isFalse();
+ }
+
+ @Test
+ public void isGroupRef() throws Exception {
+ assertThat(RefNames.isGroupRef("refs/groups/" + TEST_SHARDED_GROUP_UUID)).isTrue();
+ assertThat(RefNames.isGroupRef("refs/deleted-groups/" + TEST_SHARDED_GROUP_UUID)).isTrue();
+ assertThat(RefNames.isGroupRef(RefNames.REFS_GROUPNAMES)).isTrue();
+
+ assertThat(RefNames.isGroupRef("refs/heads/master")).isFalse();
+ assertThat(RefNames.isGroupRef("refs/users/23/1011123")).isFalse();
+ }
+
+ @Test
+ public void parseShardedRefsPart() throws Exception {
+ assertThat(parseShardedRefPart("01/1")).isEqualTo(1);
+ assertThat(parseShardedRefPart("01/1-drafts")).isEqualTo(1);
+ assertThat(parseShardedRefPart("01/1-drafts/2")).isEqualTo(1);
+
+ assertThat(parseShardedRefPart(null)).isNull();
+ assertThat(parseShardedRefPart("")).isNull();
+
+ // Prefix not stripped.
+ assertThat(parseShardedRefPart("refs/users/01/1")).isNull();
+
+ // Invalid characters.
+ assertThat(parseShardedRefPart("01a/1")).isNull();
+ assertThat(parseShardedRefPart("01/a1")).isNull();
+
+ // Mismatched shard.
+ assertThat(parseShardedRefPart("01/23")).isNull();
+
+ // Shard too short.
+ assertThat(parseShardedRefPart("1/1")).isNull();
+ }
+
+ @Test
+ public void parseShardedUuidFromRefsPart() throws Exception {
+ assertThat(parseShardedUuidFromRefPart(TEST_SHARDED_GROUP_UUID)).isEqualTo(TEST_GROUP_UUID);
+ assertThat(parseShardedUuidFromRefPart(TEST_SHARDED_GROUP_UUID + "-2"))
+ .isEqualTo(TEST_GROUP_UUID + "-2");
+ assertThat(parseShardedUuidFromRefPart("7e/7ec4775d")).isEqualTo("7ec4775d");
+ assertThat(parseShardedUuidFromRefPart("fo/foo")).isEqualTo("foo");
+
+ assertThat(parseShardedUuidFromRefPart(null)).isNull();
+ assertThat(parseShardedUuidFromRefPart("")).isNull();
+
+ // Prefix not stripped.
+ assertThat(parseShardedUuidFromRefPart("refs/groups/" + TEST_SHARDED_GROUP_UUID)).isNull();
+
+ // Invalid shards.
+ assertThat(parseShardedUuidFromRefPart("c/" + TEST_GROUP_UUID)).isNull();
+ assertThat(parseShardedUuidFromRefPart("cca/" + TEST_GROUP_UUID)).isNull();
+
+ // Mismatched shard.
+ assertThat(parseShardedUuidFromRefPart("ca/" + TEST_GROUP_UUID)).isNull();
+ assertThat(parseShardedUuidFromRefPart("64/" + TEST_GROUP_UUID)).isNull();
+
+ // Wrong number of segments.
+ assertThat(parseShardedUuidFromRefPart("cc")).isNull();
+ assertThat(parseShardedUuidFromRefPart(TEST_SHARDED_GROUP_UUID + "/1")).isNull();
+ }
+
+ @Test
+ public void skipShardedRefsPart() throws Exception {
+ assertThat(skipShardedRefPart("01/1")).isEqualTo("");
+ assertThat(skipShardedRefPart("01/1/")).isEqualTo("/");
+ assertThat(skipShardedRefPart("01/1/2")).isEqualTo("/2");
+ assertThat(skipShardedRefPart("01/1-edit")).isEqualTo("-edit");
+
+ assertThat(skipShardedRefPart(null)).isNull();
+ assertThat(skipShardedRefPart("")).isNull();
+
+ // Prefix not stripped.
+ assertThat(skipShardedRefPart("refs/draft-comments/01/1/2")).isNull();
+
+ // Invalid characters.
+ assertThat(skipShardedRefPart("01a/1/2")).isNull();
+ assertThat(skipShardedRefPart("01a/a1/2")).isNull();
+
+ // Mismatched shard.
+ assertThat(skipShardedRefPart("01/23/2")).isNull();
+
+ // Shard too short.
+ assertThat(skipShardedRefPart("1/1")).isNull();
+ }
+
+ @Test
+ public void parseAfterShardedRefsPart() throws Exception {
+ assertThat(parseAfterShardedRefPart("01/1/2")).isEqualTo(2);
+ assertThat(parseAfterShardedRefPart("01/1/2/4")).isEqualTo(2);
+ assertThat(parseAfterShardedRefPart("01/1/2-edit")).isEqualTo(2);
+
+ assertThat(parseAfterShardedRefPart(null)).isNull();
+ assertThat(parseAfterShardedRefPart("")).isNull();
+
+ // No ID after sharded ref part
+ assertThat(parseAfterShardedRefPart("01/1")).isNull();
+ assertThat(parseAfterShardedRefPart("01/1/")).isNull();
+ assertThat(parseAfterShardedRefPart("01/1/a")).isNull();
+
+ // Prefix not stripped.
+ assertThat(parseAfterShardedRefPart("refs/draft-comments/01/1/2")).isNull();
+
+ // Invalid characters.
+ assertThat(parseAfterShardedRefPart("01a/1/2")).isNull();
+ assertThat(parseAfterShardedRefPart("01a/a1/2")).isNull();
+
+ // Mismatched shard.
+ assertThat(parseAfterShardedRefPart("01/23/2")).isNull();
+
+ // Shard too short.
+ assertThat(parseAfterShardedRefPart("1/1")).isNull();
+ }
+
+ @Test
+ public void testParseRefSuffix() throws Exception {
+ assertThat(parseRefSuffix("1/2/34")).isEqualTo(34);
+ assertThat(parseRefSuffix("/34")).isEqualTo(34);
+
+ assertThat(parseRefSuffix(null)).isNull();
+ assertThat(parseRefSuffix("")).isNull();
+ assertThat(parseRefSuffix("34")).isNull();
+ assertThat(parseRefSuffix("12/ab")).isNull();
+ assertThat(parseRefSuffix("12/a4")).isNull();
+ assertThat(parseRefSuffix("12/4a")).isNull();
+ assertThat(parseRefSuffix("a4")).isNull();
+ assertThat(parseRefSuffix("4a")).isNull();
+ }
+
+ @Test
+ public void shard() throws Exception {
+ assertThat(RefNames.shard(1011123)).isEqualTo("23/1011123");
+ assertThat(RefNames.shard(537)).isEqualTo("37/537");
+ assertThat(RefNames.shard(12)).isEqualTo("12/12");
+ assertThat(RefNames.shard(0)).isEqualTo("00/0");
+ assertThat(RefNames.shard(1)).isEqualTo("01/1");
+ assertThat(RefNames.shard(-1)).isNull();
+ }
+}