93 lines
3.5 KiB
Java
93 lines
3.5 KiB
Java
package com.google.gerrit.acceptance.ssh;
|
|
|
|
import static com.google.common.truth.Truth.assertThat;
|
|
|
|
import com.google.common.collect.Iterables;
|
|
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
|
import com.google.gerrit.acceptance.UseSsh;
|
|
import com.google.gerrit.extensions.registration.DynamicSet;
|
|
import com.google.gerrit.extensions.registration.RegistrationHandle;
|
|
import com.google.gerrit.server.logging.LoggingContext;
|
|
import com.google.gerrit.server.logging.RequestId;
|
|
import com.google.gerrit.server.project.CreateProjectArgs;
|
|
import com.google.gerrit.server.validators.ProjectCreationValidationListener;
|
|
import com.google.gerrit.server.validators.ValidationException;
|
|
import com.google.inject.Inject;
|
|
import org.junit.After;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
|
|
@UseSsh
|
|
public class SshTraceIT extends AbstractDaemonTest {
|
|
@Inject private DynamicSet<ProjectCreationValidationListener> projectCreationValidationListeners;
|
|
|
|
private TraceValidatingProjectCreationValidationListener projectCreationListener;
|
|
private RegistrationHandle projectCreationListenerRegistrationHandle;
|
|
|
|
@Before
|
|
public void setup() {
|
|
projectCreationListener = new TraceValidatingProjectCreationValidationListener();
|
|
projectCreationListenerRegistrationHandle =
|
|
projectCreationValidationListeners.add(projectCreationListener);
|
|
}
|
|
|
|
@After
|
|
public void cleanup() {
|
|
projectCreationListenerRegistrationHandle.remove();
|
|
}
|
|
|
|
@Test
|
|
public void sshCallWithoutTrace() throws Exception {
|
|
adminSshSession.exec("gerrit create-project new1");
|
|
adminSshSession.assertSuccess();
|
|
assertThat(projectCreationListener.traceId).isNull();
|
|
assertThat(projectCreationListener.foundTraceId).isFalse();
|
|
assertThat(projectCreationListener.isLoggingForced).isFalse();
|
|
}
|
|
|
|
@Test
|
|
public void sshCallWithTrace() throws Exception {
|
|
adminSshSession.exec("gerrit create-project --trace new2");
|
|
|
|
// The trace ID is written to stderr.
|
|
adminSshSession.assertFailure(RequestId.Type.TRACE_ID.name());
|
|
|
|
assertThat(projectCreationListener.traceId).isNotNull();
|
|
assertThat(projectCreationListener.foundTraceId).isTrue();
|
|
assertThat(projectCreationListener.isLoggingForced).isTrue();
|
|
}
|
|
|
|
@Test
|
|
public void sshCallWithTraceAndProvidedTraceId() throws Exception {
|
|
adminSshSession.exec("gerrit create-project --trace --trace-id issue/123 new3");
|
|
|
|
// The trace ID is written to stderr.
|
|
adminSshSession.assertFailure(RequestId.Type.TRACE_ID.name());
|
|
|
|
assertThat(projectCreationListener.traceId).isEqualTo("issue/123");
|
|
assertThat(projectCreationListener.foundTraceId).isTrue();
|
|
assertThat(projectCreationListener.isLoggingForced).isTrue();
|
|
}
|
|
|
|
@Test
|
|
public void sshCallWithTraceIdAndWithoutTraceFails() throws Exception {
|
|
adminSshSession.exec("gerrit create-project --trace-id issue/123 new3");
|
|
adminSshSession.assertFailure("A trace ID can only be set if --trace was specified.");
|
|
}
|
|
|
|
private static class TraceValidatingProjectCreationValidationListener
|
|
implements ProjectCreationValidationListener {
|
|
String traceId;
|
|
Boolean foundTraceId;
|
|
Boolean isLoggingForced;
|
|
|
|
@Override
|
|
public void validateNewProject(CreateProjectArgs args) throws ValidationException {
|
|
this.traceId =
|
|
Iterables.getFirst(LoggingContext.getInstance().getTagsAsMap().get("TRACE_ID"), null);
|
|
this.foundTraceId = traceId != null;
|
|
this.isLoggingForced = LoggingContext.getInstance().shouldForceLogging(null, null, false);
|
|
}
|
|
}
|
|
}
|