package net.serenitybdd.integration.jenkins.environment.rules;
import com.google.common.base.Charsets;
import net.serenitybdd.integration.jenkins.JenkinsInstance;
import net.serenitybdd.integration.jenkins.environment.UpdateCenter;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import static java.util.Arrays.asList;
public class InstallPluginsFromUpdateCenter implements ApplicativeTestRule<JenkinsInstance> {
private static final Logger Log = LoggerFactory.getLogger(InstallPluginsFromUpdateCenter.class);
private final UpdateCenter updateCenter = new UpdateCenter();
private final List<String> requiredPlugins;
public InstallPluginsFromUpdateCenter(String... plugins) {
this.requiredPlugins = asList(plugins);
}
@Override
public TestRule applyTo(final JenkinsInstance jenkins) {
return new TestWatcher() {
@Override protected void starting(Description description) {
warmUpUpdateCenterCacheFor(jenkins);
jenkins.client().installPlugins(requiredPlugins);
}
};
}
private void warmUpUpdateCenterCacheFor(JenkinsInstance jenkins) {
try {
Log.info("Warming up the Update Center cache for Jenkins '{}'", jenkins.version());
String json = updateCenter.jsonFor(jenkins.version());
Path destination = Files.createDirectories(jenkins.home().resolve("updates")).resolve("default.json");
Files.write(destination, json.getBytes(Charsets.UTF_8));
} catch (IOException e) {
throw new RuntimeException("Couldn't warm up the Update Center cache", e);
}
}
}