mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-02-22 06:26:56 +01:00
Merge branch 'develop' into bugfix/api-key-to-access-token
This commit is contained in:
@@ -32,6 +32,7 @@ import org.mockito.Answers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.net.ahc.AdvancedHttpClient;
|
||||
import sonia.scm.net.ahc.AdvancedHttpResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Date;
|
||||
@@ -44,6 +45,7 @@ import java.util.concurrent.Semaphore;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static sonia.scm.admin.ReleaseFeedParser.SPAN_KIND;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class ReleaseFeedParserTest {
|
||||
@@ -62,7 +64,7 @@ class ReleaseFeedParserTest {
|
||||
void shouldFindLatestRelease() throws IOException {
|
||||
String url = "https://www.scm-manager.org/download/rss.xml";
|
||||
|
||||
when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenReturn(createReleaseFeedDto());
|
||||
when(request(url).contentFromXml(ReleaseFeedDto.class)).thenReturn(createReleaseFeedDto());
|
||||
|
||||
Optional<UpdateInfo> update = releaseFeedParser.findLatestRelease(url);
|
||||
|
||||
@@ -71,13 +73,17 @@ class ReleaseFeedParserTest {
|
||||
assertThat(update.get().getLink()).isEqualTo("download-3");
|
||||
}
|
||||
|
||||
private AdvancedHttpResponse request(String url) throws IOException {
|
||||
return client.get(url).spanKind(SPAN_KIND).request();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldHandleTimeout() throws IOException {
|
||||
String url = "https://www.scm-manager.org/download/rss.xml";
|
||||
|
||||
Semaphore waitWithResultUntilTimeout = new Semaphore(0);
|
||||
|
||||
when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> {
|
||||
when(request(url).contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> {
|
||||
waitWithResultUntilTimeout.acquire();
|
||||
return createReleaseFeedDto();
|
||||
});
|
||||
@@ -95,7 +101,7 @@ class ReleaseFeedParserTest {
|
||||
|
||||
Semaphore waitWithResultUntilBothTriggered = new Semaphore(0);
|
||||
|
||||
when(client.get(url).request().contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> {
|
||||
when(request(url).contentFromXml(ReleaseFeedDto.class)).thenAnswer(invocation -> {
|
||||
waitWithResultUntilBothTriggered.acquire();
|
||||
return createReleaseFeedDto();
|
||||
});
|
||||
|
||||
@@ -37,6 +37,8 @@ import org.mockito.junit.jupiter.MockitoSettings;
|
||||
import org.mockito.quality.Strictness;
|
||||
import sonia.scm.SCMContext;
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
import sonia.scm.group.Group;
|
||||
import sonia.scm.group.GroupManager;
|
||||
import sonia.scm.security.AnonymousMode;
|
||||
import sonia.scm.security.PermissionAssigner;
|
||||
import sonia.scm.security.PermissionDescriptor;
|
||||
@@ -56,6 +58,8 @@ import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static sonia.scm.group.GroupCollector.AUTHENTICATED;
|
||||
import static sonia.scm.lifecycle.SetupContextListener.SetupAction.AUTHENTICATED_GROUP_DESCRIPTION;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class SetupContextListenerTest {
|
||||
@@ -75,6 +79,9 @@ class SetupContextListenerTest {
|
||||
@Mock
|
||||
ScmConfiguration scmConfiguration;
|
||||
|
||||
@Mock
|
||||
private GroupManager groupManager;
|
||||
|
||||
@Mock
|
||||
private PermissionAssigner permissionAssigner;
|
||||
|
||||
@@ -96,6 +103,7 @@ class SetupContextListenerTest {
|
||||
|
||||
@Test
|
||||
void shouldCreateAdminAccountIfNoUserExistsAndAssignPermissions() {
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
when(passwordService.encryptPassword("scmadmin")).thenReturn("secret");
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
@@ -108,6 +116,7 @@ class SetupContextListenerTest {
|
||||
void shouldCreateAdminAccountIfOnlyAnonymousUserExistsAndAssignPermissions() {
|
||||
when(userManager.getAll()).thenReturn(Lists.newArrayList(SCMContext.ANONYMOUS));
|
||||
when(userManager.contains(SCMContext.USER_ANONYMOUS)).thenReturn(true);
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
when(passwordService.encryptPassword("scmadmin")).thenReturn("secret");
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
@@ -135,6 +144,7 @@ class SetupContextListenerTest {
|
||||
void shouldDoNothingOnSecondStart() {
|
||||
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
|
||||
when(userManager.getAll()).thenReturn(users);
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
|
||||
@@ -146,6 +156,7 @@ class SetupContextListenerTest {
|
||||
void shouldCreateAnonymousUserIfRequired() {
|
||||
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
|
||||
when(userManager.getAll()).thenReturn(users);
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
when(scmConfiguration.getAnonymousMode()).thenReturn(AnonymousMode.FULL);
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
@@ -157,6 +168,7 @@ class SetupContextListenerTest {
|
||||
void shouldNotCreateAnonymousUserIfNotRequired() {
|
||||
List<User> users = Lists.newArrayList(UserTestData.createTrillian());
|
||||
when(userManager.getAll()).thenReturn(users);
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
|
||||
@@ -167,6 +179,7 @@ class SetupContextListenerTest {
|
||||
void shouldNotCreateAnonymousUserIfAlreadyExists() {
|
||||
List<User> users = Lists.newArrayList(SCMContext.ANONYMOUS);
|
||||
when(userManager.getAll()).thenReturn(users);
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
when(scmConfiguration.getAnonymousMode()).thenReturn(AnonymousMode.FULL);
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
@@ -174,6 +187,28 @@ class SetupContextListenerTest {
|
||||
verify(userManager, times(1)).create(SCMContext.ANONYMOUS);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldCreateAuthenticatedGroupIfMissing() {
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(null);
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
|
||||
Group authenticated = createAuthenticatedGroup();
|
||||
authenticated.setDescription(AUTHENTICATED_GROUP_DESCRIPTION);
|
||||
authenticated.setExternal(true);
|
||||
|
||||
verify(groupManager, times(1)).create(authenticated);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldNotCreateAuthenticatedGroupIfAlreadyExists() {
|
||||
when(groupManager.get(AUTHENTICATED)).thenReturn(createAuthenticatedGroup());
|
||||
|
||||
setupContextListener.contextInitialized(null);
|
||||
|
||||
verify(groupManager, never()).create(any());
|
||||
}
|
||||
|
||||
private void verifyAdminPermissionsAssigned() {
|
||||
ArgumentCaptor<String> usernameCaptor = ArgumentCaptor.forClass(String.class);
|
||||
ArgumentCaptor<Collection<PermissionDescriptor>> permissionCaptor = ArgumentCaptor.forClass(Collection.class);
|
||||
@@ -192,4 +227,7 @@ class SetupContextListenerTest {
|
||||
assertThat(user.getPassword()).isEqualTo("secret");
|
||||
}
|
||||
|
||||
private Group createAuthenticatedGroup() {
|
||||
return new Group("xml", AUTHENTICATED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.net.ahc;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -29,33 +29,29 @@ package sonia.scm.net.ahc;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import sonia.scm.config.ScmConfiguration;
|
||||
import sonia.scm.net.SSLContextProvider;
|
||||
import sonia.scm.net.TrustAllHostnameVerifier;
|
||||
import sonia.scm.trace.Span;
|
||||
import sonia.scm.trace.Tracer;
|
||||
import sonia.scm.util.HttpUtil;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.SocketAddress;
|
||||
import java.net.URL;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.net.ssl.HttpsURLConnection;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
import sonia.scm.net.SSLContextProvider;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.SocketAddress;
|
||||
import java.net.URL;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
//~--- JDK imports ------------------------------------------------------------
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -82,12 +78,12 @@ public class DefaultAdvancedHttpClientTest
|
||||
DefaultAdvancedHttpClient.TIMEOUT_CONNECTION);
|
||||
verify(connection).addRequestProperty(HttpUtil.HEADER_CONTENT_LENGTH, "0");
|
||||
}
|
||||
|
||||
|
||||
@Test(expected = ContentTransformerNotFoundException.class)
|
||||
public void testContentTransformerNotFound(){
|
||||
client.createTransformer(String.class, "text/plain");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testContentTransformer(){
|
||||
ContentTransformer transformer = mock(ContentTransformer.class);
|
||||
@@ -265,6 +261,63 @@ public class DefaultAdvancedHttpClientTest
|
||||
"Basic dHJpY2lhOnRyaWNpYXMgc2VjcmV0");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateTracingSpan() throws IOException {
|
||||
when(connection.getResponseCode()).thenReturn(200);
|
||||
|
||||
new AdvancedHttpRequest(client, HttpMethod.GET, "https://www.scm-manager.org").spanKind("spaceships").request();
|
||||
verify(tracer).span("spaceships");
|
||||
verify(span).label("url", "https://www.scm-manager.org");
|
||||
verify(span).label("method", "GET");
|
||||
verify(span).label("status", 200);
|
||||
verify(span, never()).failed();
|
||||
verify(span).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateFailedTracingSpan() throws IOException {
|
||||
when(connection.getResponseCode()).thenReturn(500);
|
||||
|
||||
new AdvancedHttpRequest(client, HttpMethod.GET, "https://www.scm-manager.org").request();
|
||||
verify(tracer).span("HTTP Request");
|
||||
verify(span).label("url", "https://www.scm-manager.org");
|
||||
verify(span).label("method", "GET");
|
||||
verify(span).label("status", 500);
|
||||
verify(span).failed();
|
||||
verify(span).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateFailedTracingSpanOnIOException() throws IOException {
|
||||
when(connection.getResponseCode()).thenThrow(new IOException("failed"));
|
||||
|
||||
boolean thrown = false;
|
||||
try {
|
||||
new AdvancedHttpRequest(client, HttpMethod.DELETE, "http://failing.host").spanKind("failures").request();
|
||||
} catch (IOException ex) {
|
||||
thrown = true;
|
||||
}
|
||||
assertTrue(thrown);
|
||||
|
||||
verify(tracer).span("failures");
|
||||
verify(span).label("url", "http://failing.host");
|
||||
verify(span).label("method", "DELETE");
|
||||
verify(span).label("exception", IOException.class.getName());
|
||||
verify(span).label("message", "failed");
|
||||
verify(span).failed();
|
||||
verify(span).close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldNotCreateSpan() throws IOException {
|
||||
when(connection.getResponseCode()).thenReturn(200);
|
||||
|
||||
new AdvancedHttpRequest(client, HttpMethod.GET, "https://www.scm-manager.org")
|
||||
.disableTracing().request();
|
||||
verify(tracer, never()).span(anyString());
|
||||
}
|
||||
|
||||
|
||||
//~--- set methods ----------------------------------------------------------
|
||||
|
||||
/**
|
||||
@@ -277,6 +330,7 @@ public class DefaultAdvancedHttpClientTest
|
||||
configuration = new ScmConfiguration();
|
||||
transformers = new HashSet<ContentTransformer>();
|
||||
client = new TestingAdvacedHttpClient(configuration, transformers);
|
||||
when(tracer.span(anyString())).thenReturn(span);
|
||||
}
|
||||
|
||||
//~--- inner classes --------------------------------------------------------
|
||||
@@ -298,10 +352,9 @@ public class DefaultAdvancedHttpClientTest
|
||||
* @param configuration
|
||||
* @param transformers
|
||||
*/
|
||||
public TestingAdvacedHttpClient(ScmConfiguration configuration,
|
||||
Set<ContentTransformer> transformers)
|
||||
public TestingAdvacedHttpClient(ScmConfiguration configuration, Set<ContentTransformer> transformers)
|
||||
{
|
||||
super(configuration, transformers, new SSLContextProvider());
|
||||
super(configuration, tracer, transformers, new SSLContextProvider());
|
||||
}
|
||||
|
||||
//~--- methods ------------------------------------------------------------
|
||||
@@ -364,4 +417,10 @@ public class DefaultAdvancedHttpClientTest
|
||||
|
||||
/** Field description */
|
||||
private Set<ContentTransformer> transformers;
|
||||
|
||||
@Mock
|
||||
private Tracer tracer;
|
||||
|
||||
@Mock
|
||||
private Span span;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm.net.ahc;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
@@ -33,9 +33,11 @@ import com.google.common.collect.Multimap;
|
||||
import com.google.common.io.ByteSource;
|
||||
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import org.mockito.Answers;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
@@ -56,6 +58,7 @@ import java.util.HashSet;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import sonia.scm.net.SSLContextProvider;
|
||||
import sonia.scm.trace.Tracer;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -65,6 +68,13 @@ import sonia.scm.net.SSLContextProvider;
|
||||
public class DefaultAdvancedHttpResponseTest
|
||||
{
|
||||
|
||||
private DefaultAdvancedHttpClient client;
|
||||
|
||||
@Before
|
||||
public void setUpClient() {
|
||||
client = new DefaultAdvancedHttpClient(new ScmConfiguration(), tracer, new HashSet<>(), new SSLContextProvider());
|
||||
}
|
||||
|
||||
/**
|
||||
* Method description
|
||||
*
|
||||
@@ -130,13 +140,10 @@ public class DefaultAdvancedHttpResponseTest
|
||||
assertTrue(headers.get("Test-2").isEmpty());
|
||||
}
|
||||
|
||||
//~--- fields ---------------------------------------------------------------
|
||||
|
||||
/** Field description */
|
||||
private final DefaultAdvancedHttpClient client =
|
||||
new DefaultAdvancedHttpClient(new ScmConfiguration(), new HashSet<>(), new SSLContextProvider());
|
||||
|
||||
/** Field description */
|
||||
@Mock
|
||||
private HttpURLConnection connection;
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private Tracer tracer;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.event.ScmEventBus;
|
||||
import sonia.scm.net.ahc.AdvancedHttpClient;
|
||||
import sonia.scm.net.ahc.AdvancedHttpResponse;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
@@ -41,6 +42,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static sonia.scm.plugin.Tracing.SPAN_KIND;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class PluginCenterLoaderTest {
|
||||
@@ -63,16 +65,20 @@ class PluginCenterLoaderTest {
|
||||
void shouldFetch() throws IOException {
|
||||
Set<AvailablePlugin> plugins = Collections.emptySet();
|
||||
PluginCenterDto dto = new PluginCenterDto();
|
||||
when(client.get(PLUGIN_URL).request().contentFromJson(PluginCenterDto.class)).thenReturn(dto);
|
||||
when(request().contentFromJson(PluginCenterDto.class)).thenReturn(dto);
|
||||
when(mapper.map(dto)).thenReturn(plugins);
|
||||
|
||||
Set<AvailablePlugin> fetched = loader.load(PLUGIN_URL);
|
||||
assertThat(fetched).isSameAs(plugins);
|
||||
}
|
||||
|
||||
private AdvancedHttpResponse request() throws IOException {
|
||||
return client.get(PLUGIN_URL).spanKind(SPAN_KIND).request();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldReturnEmptySetIfPluginCenterNotBeReached() throws IOException {
|
||||
when(client.get(PLUGIN_URL).request()).thenThrow(new IOException("failed to fetch"));
|
||||
when(request()).thenThrow(new IOException("failed to fetch"));
|
||||
|
||||
Set<AvailablePlugin> fetch = loader.load(PLUGIN_URL);
|
||||
assertThat(fetch).isEmpty();
|
||||
@@ -80,7 +86,7 @@ class PluginCenterLoaderTest {
|
||||
|
||||
@Test
|
||||
void shouldFirePluginCenterErrorEvent() throws IOException {
|
||||
when(client.get(PLUGIN_URL).request()).thenThrow(new IOException("failed to fetch"));
|
||||
when(request()).thenThrow(new IOException("failed to fetch"));
|
||||
|
||||
loader.load(PLUGIN_URL);
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import sonia.scm.SCMContextProvider;
|
||||
import sonia.scm.net.ahc.AdvancedHttpClient;
|
||||
import sonia.scm.net.ahc.AdvancedHttpResponse;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
@@ -50,6 +51,7 @@ import static org.mockito.Mockito.anyInt;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static sonia.scm.plugin.Tracing.SPAN_KIND;
|
||||
|
||||
@ExtendWith({MockitoExtension.class})
|
||||
class PluginInstallerTest {
|
||||
@@ -101,10 +103,14 @@ class PluginInstallerTest {
|
||||
}
|
||||
|
||||
private void mockContent(String content) throws IOException {
|
||||
when(client.get("https://download.hitchhiker.com").request().contentAsStream())
|
||||
when(request("https://download.hitchhiker.com").contentAsStream())
|
||||
.thenReturn(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)));
|
||||
}
|
||||
|
||||
private AdvancedHttpResponse request(String url) throws IOException {
|
||||
return client.get(url).spanKind(SPAN_KIND).request();
|
||||
}
|
||||
|
||||
private AvailablePlugin createGitPlugin() {
|
||||
return createPlugin(
|
||||
"scm-git-plugin",
|
||||
@@ -115,7 +121,7 @@ class PluginInstallerTest {
|
||||
|
||||
@Test
|
||||
void shouldThrowPluginDownloadException() throws IOException {
|
||||
when(client.get("https://download.hitchhiker.com").request()).thenThrow(new IOException("failed to download"));
|
||||
when(request("https://download.hitchhiker.com")).thenThrow(new IOException("failed to download"));
|
||||
|
||||
PluginInstallationContext context = PluginInstallationContext.empty();
|
||||
AvailablePlugin gitPlugin = createGitPlugin();
|
||||
@@ -136,7 +142,7 @@ class PluginInstallerTest {
|
||||
void shouldThrowPluginDownloadExceptionAndCleanup() throws IOException {
|
||||
InputStream stream = mock(InputStream.class);
|
||||
when(stream.read(any(), anyInt(), anyInt())).thenThrow(new IOException("failed to read"));
|
||||
when(client.get("https://download.hitchhiker.com").request().contentAsStream()).thenReturn(stream);
|
||||
when(request("https://download.hitchhiker.com").contentAsStream()).thenReturn(stream);
|
||||
|
||||
PluginInstallationContext context = PluginInstallationContext.empty();
|
||||
AvailablePlugin gitPlugin = createGitPlugin();
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2020-present Cloudogu GmbH and Contributors
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
package sonia.scm.trace;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class LoggingExporterTest {
|
||||
|
||||
private String message;
|
||||
|
||||
private LoggingExporter exporter;
|
||||
|
||||
@BeforeEach
|
||||
void setUpLogger() {
|
||||
exporter = new LoggingExporter((message) -> this.message = message);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldLogTheSpanKind() {
|
||||
exporter.export(new SpanContext(
|
||||
"AwesomeSpanKind", Collections.emptyMap(), Instant.now(), Instant.now(), false
|
||||
));
|
||||
|
||||
assertThat(message).contains("AwesomeSpanKind");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldLogFailed() {
|
||||
exporter.export(new SpanContext(
|
||||
"sample", Collections.emptyMap(), Instant.now(), Instant.now(), true
|
||||
));
|
||||
|
||||
assertThat(message).contains("failed");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldLogDuration() {
|
||||
Instant opened = Instant.now();
|
||||
exporter.export(new SpanContext(
|
||||
"sample", ImmutableMap.of(), opened, opened.plusMillis(42L), false
|
||||
));
|
||||
|
||||
assertThat(message).contains("42ms");
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldLogLabels() {
|
||||
exporter.export(new SpanContext(
|
||||
"sample", ImmutableMap.of("l1", "v1", "l2", "v2"), Instant.now(), Instant.now(), false
|
||||
));
|
||||
|
||||
assertThat(message)
|
||||
.contains("l1")
|
||||
.contains("v1")
|
||||
.contains("l2")
|
||||
.contains("v2");
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user