implemented restarter to move control over the restart process to the core

This commit is contained in:
Sebastian Sdorra
2020-02-12 14:45:13 +01:00
parent bca34b829d
commit de3db6252e
12 changed files with 201 additions and 69 deletions

View File

@@ -0,0 +1,69 @@
package sonia.scm.lifecycle;
import com.github.legman.Subscribe;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.event.ScmEventBus;
import javax.swing.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.Mockito.verify;
@ExtendWith(MockitoExtension.class)
class DefaultRestarterTest {
@Mock
private ScmEventBus eventBus;
@Captor
private ArgumentCaptor<RestartEvent> eventCaptor;
@Test
void shouldLoadStrategyOnCreation() {
System.setProperty(RestartStrategyFactory.PROPERTY_STRATEGY, ExitRestartStrategy.NAME);
try {
DefaultRestarter restarter = new DefaultRestarter();
assertThat(restarter.isSupported()).isTrue();
} finally {
System.clearProperty(RestartStrategyFactory.PROPERTY_STRATEGY);
}
}
@Test
void shouldReturnFalseIfRestartStrategyIsNotAvailable() {
DefaultRestarter restarter = new DefaultRestarter(eventBus, null);
assertThat(restarter.isSupported()).isFalse();
}
@Test
void shouldReturnTrueIfRestartStrategyIsAvailable() {
DefaultRestarter restarter = new DefaultRestarter();
assertThat(restarter.isSupported()).isTrue();
}
@Test
void shouldThrowRestartNotSupportedException() {
DefaultRestarter restarter = new DefaultRestarter(eventBus,null);
assertThrows(
RestartNotSupportedException.class, () -> restarter.restart(DefaultRestarterTest.class, "test")
);
}
@Test
void shouldFireRestartEvent() {
DefaultRestarter restarter = new DefaultRestarter(eventBus, new ExitRestartStrategy());
restarter.restart(DefaultRestarterTest.class, "testing");
verify(eventBus).post(eventCaptor.capture());
RestartEvent event = eventCaptor.getValue();
assertThat(event.getCause()).isEqualTo(DefaultRestarterTest.class);
assertThat(event.getReason()).isEqualTo("testing");
}
}

View File

@@ -12,10 +12,12 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.TempDirectory;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.NotFoundException;
import sonia.scm.ScmConstraintViolationException;
import sonia.scm.lifecycle.Restarter;
import java.io.IOException;
import java.nio.file.Files;
@@ -54,13 +56,15 @@ class DefaultPluginManagerTest {
@Mock
private PluginInstaller installer;
@Mock
private Restarter restarter;
@InjectMocks
private DefaultPluginManager manager;
@Mock
private Subject subject;
private boolean restartTriggered = false;
@BeforeEach
void mockInstaller() {
lenient().when(installer.install(any())).then(ic -> {
@@ -69,16 +73,6 @@ class DefaultPluginManagerTest {
});
}
@BeforeEach
void createPluginManagerToTestWithCapturedRestart() {
manager = new DefaultPluginManager(null, loader, center, installer) { // event bus is only used in restart and this is replaced here
@Override
void triggerRestart(String cause) {
restartTriggered = true;
}
};
}
@Nested
class WithAdminPermissions {
@@ -185,7 +179,7 @@ class DefaultPluginManagerTest {
manager.install("scm-git-plugin", false);
verify(installer).install(git);
assertThat(restartTriggered).isFalse();
verify(restarter, never()).restart(any(), any());
}
@Test
@@ -263,7 +257,7 @@ class DefaultPluginManagerTest {
manager.install("scm-git-plugin", true);
verify(installer).install(git);
assertThat(restartTriggered).isTrue();
verify(restarter).restart(any(), any());
}
@Test
@@ -272,7 +266,7 @@ class DefaultPluginManagerTest {
when(loader.getInstalledPlugins()).thenReturn(ImmutableList.of(gitInstalled));
manager.install("scm-git-plugin", true);
assertThat(restartTriggered).isFalse();
verify(restarter, never()).restart(any(), any());
}
@Test
@@ -294,14 +288,14 @@ class DefaultPluginManagerTest {
manager.install("scm-review-plugin", false);
manager.executePendingAndRestart();
assertThat(restartTriggered).isTrue();
verify(restarter).restart(any(), any());
}
@Test
void shouldNotSendRestartEventWithoutPendingPlugins() {
manager.executePendingAndRestart();
assertThat(restartTriggered).isFalse();
verify(restarter, never()).restart(any(), any());
}
@Test
@@ -452,7 +446,7 @@ class DefaultPluginManagerTest {
manager.executePendingAndRestart();
assertThat(restartTriggered).isTrue();
verify(restarter).restart(any(), any());
}
@Test

View File

@@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.lifecycle.Restarter;
import sonia.scm.update.repository.DefaultMigrationStrategyDAO;
import sonia.scm.update.repository.MigrationStrategy;
import sonia.scm.update.repository.V1Repository;
@@ -27,6 +28,8 @@ class MigrationWizardServletTest {
XmlRepositoryV1UpdateStep updateStep;
@Mock
DefaultMigrationStrategyDAO migrationStrategyDao;
@Mock
Restarter restarter;
@Mock
HttpServletRequest request;
@@ -40,7 +43,7 @@ class MigrationWizardServletTest {
@BeforeEach
void initServlet() {
servlet = new MigrationWizardServlet(updateStep, migrationStrategyDao) {
servlet = new MigrationWizardServlet(updateStep, migrationStrategyDao, restarter) {
@Override
void respondWithTemplate(HttpServletResponse resp, Map<String, Object> model, String templateName) {
renderedTemplateName = templateName;

View File

@@ -20,6 +20,7 @@ import sonia.scm.lifecycle.RestartEvent;
import sonia.scm.cache.Cache;
import sonia.scm.cache.CacheManager;
import sonia.scm.event.ScmEventBus;
import sonia.scm.lifecycle.RestartEventFactory;
import sonia.scm.plugin.PluginLoader;
import javax.servlet.http.HttpServletRequest;
@@ -114,7 +115,7 @@ public class I18nServletTest {
public void shouldCleanCacheOnRestartEvent() {
ScmEventBus.getInstance().register(servlet);
ScmEventBus.getInstance().post(new RestartEvent(I18nServlet.class, "Restart to reload the plugin resources"));
ScmEventBus.getInstance().post(RestartEventFactory.create(I18nServlet.class, "Restart to reload the plugin resources"));
verify(cache).clear();
}