Merge "Document and test that plugins can throw RuntimeExceptions from ETag computation"
This commit is contained in:
		@@ -50,6 +50,11 @@ public interface ChangeETagComputation {
 | 
			
		||||
   * <p><strong>Note:</strong> Change ETags are computed very frequently and the computation must be
 | 
			
		||||
   * cheap. Take good care to not perform any expensive computations when implementing this.
 | 
			
		||||
   *
 | 
			
		||||
   * <p>If an error is encountered during the ETag computation the plugin can indicate this by
 | 
			
		||||
   * throwing any RuntimeException. In this case no value will be included in the change ETag
 | 
			
		||||
   * computation. This means if the error is transient, the ETag will differ when the computation
 | 
			
		||||
   * succeeds on a follow-up run.
 | 
			
		||||
   *
 | 
			
		||||
   * @param projectName the name of the project that contains the change
 | 
			
		||||
   * @param changeId ID of the change for which the ETag should be computed
 | 
			
		||||
   * @return the ETag
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,7 @@ import com.google.gerrit.common.data.GlobalCapability;
 | 
			
		||||
import com.google.gerrit.common.data.LabelFunction;
 | 
			
		||||
import com.google.gerrit.common.data.LabelType;
 | 
			
		||||
import com.google.gerrit.common.data.Permission;
 | 
			
		||||
import com.google.gerrit.exceptions.StorageException;
 | 
			
		||||
import com.google.gerrit.extensions.annotations.Exports;
 | 
			
		||||
import com.google.gerrit.extensions.api.changes.AddReviewerInput;
 | 
			
		||||
import com.google.gerrit.extensions.api.changes.AddReviewerResult;
 | 
			
		||||
@@ -2182,6 +2183,24 @@ public class ChangeIT extends AbstractDaemonTest {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void throwingExceptionFromETagComputationDoesNotBreakGerrit() throws Exception {
 | 
			
		||||
    PushOneCommit.Result r = createChange();
 | 
			
		||||
    String oldETag = parseResource(r).getETag();
 | 
			
		||||
 | 
			
		||||
    RegistrationHandle registrationHandle =
 | 
			
		||||
        changeETagComputations.add(
 | 
			
		||||
            "gerrit",
 | 
			
		||||
            (p, id) -> {
 | 
			
		||||
              throw new StorageException("exception during test");
 | 
			
		||||
            });
 | 
			
		||||
    try {
 | 
			
		||||
      assertThat(parseResource(r).getETag()).isEqualTo(oldETag);
 | 
			
		||||
    } finally {
 | 
			
		||||
      registrationHandle.remove();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void emailNotificationForFileLevelComment() throws Exception {
 | 
			
		||||
    String changeId = createChange().getChangeId();
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ import com.google.gerrit.acceptance.AbstractDaemonTest;
 | 
			
		||||
import com.google.gerrit.acceptance.PushOneCommit;
 | 
			
		||||
import com.google.gerrit.acceptance.TestProjectInput;
 | 
			
		||||
import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations;
 | 
			
		||||
import com.google.gerrit.exceptions.StorageException;
 | 
			
		||||
import com.google.gerrit.extensions.api.changes.ActionVisitor;
 | 
			
		||||
import com.google.gerrit.extensions.api.changes.ReviewInput;
 | 
			
		||||
import com.google.gerrit.extensions.client.ListChangesOption;
 | 
			
		||||
@@ -235,6 +236,24 @@ public class ActionsIT extends AbstractDaemonTest {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void throwingExceptionFromETagComputationDoesNotBreakGerrit() throws Exception {
 | 
			
		||||
    String change = createChange().getChangeId();
 | 
			
		||||
    String oldETag = getETag(change);
 | 
			
		||||
 | 
			
		||||
    RegistrationHandle registrationHandle =
 | 
			
		||||
        changeETagComputations.add(
 | 
			
		||||
            "gerrit",
 | 
			
		||||
            (p, id) -> {
 | 
			
		||||
              throw new StorageException("exception during test");
 | 
			
		||||
            });
 | 
			
		||||
    try {
 | 
			
		||||
      assertThat(getETag(change)).isEqualTo(oldETag);
 | 
			
		||||
    } finally {
 | 
			
		||||
      registrationHandle.remove();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @Test
 | 
			
		||||
  public void revisionActionsTwoChangesInTopic_conflicting() throws Exception {
 | 
			
		||||
    String changeId = createChangeWithTopic().getChangeId();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user