Skip to content

Commit

Permalink
Check availability of Jenkins (#434)
Browse files Browse the repository at this point in the history
- skips launcher update check if Jenkins is unavailable
  • Loading branch information
praj-foss authored and skaldarnar committed Jun 18, 2019
1 parent 1812a8a commit 28a88a7
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 10 deletions.
5 changes: 4 additions & 1 deletion src/main/java/org/terasology/launcher/LauncherInitTask.java
Expand Up @@ -28,6 +28,7 @@
import org.terasology.launcher.updater.LauncherUpdater;
import org.terasology.launcher.util.BundleUtils;
import org.terasology.launcher.util.DirectoryUtils;
import org.terasology.launcher.util.DownloadUtils;
import org.terasology.launcher.util.FileUtils;
import org.terasology.launcher.util.GuiUtils;
import org.terasology.launcher.util.LauncherStartFailedException;
Expand Down Expand Up @@ -72,7 +73,8 @@ protected LauncherConfiguration call() {
// validate the settings
LauncherSettingsValidator.validate(launcherSettings);

if (launcherSettings.isSearchForLauncherUpdates()) {
final boolean serverAvailable = DownloadUtils.isJenkinsAvailable();
if (serverAvailable && launcherSettings.isSearchForLauncherUpdates()) {
final boolean selfUpdaterStarted = checkForLauncherUpdates(downloadDirectory, tempDirectory, launcherSettings.isKeepDownloadedFiles());
if (selfUpdaterStarted) {
logger.info("Exit old TerasologyLauncher: {}", TerasologyLauncherVersionInfo.getInstance());
Expand All @@ -85,6 +87,7 @@ protected LauncherConfiguration call() {
final Path gameDirectory = getGameDirectory(os, launcherSettings.getGameDirectory());
final Path gameDataDirectory = getGameDataDirectory(os, launcherSettings.getGameDataDirectory());

// TODO: Fix this for server unavailability
final TerasologyGameVersions gameVersions = getTerasologyGameVersions(launcherDirectory, gameDirectory, launcherSettings);

logger.trace("Change LauncherSettings...");
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/org/terasology/launcher/util/DownloadUtils.java
Expand Up @@ -33,6 +33,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
Expand All @@ -58,6 +59,8 @@ public final class DownloadUtils {

private static final Logger logger = LoggerFactory.getLogger(DownloadUtils.class);

private static final String JENKINS_URL = "http://jenkins.terasology.org";
private static final int JENKINS_TIMEOUT = 3000; // milliseconds
private static final String JENKINS_JOB_URL = "http://jenkins.terasology.org/job/";
private static final String LAST_STABLE_BUILD = "/lastStableBuild";
private static final String LAST_SUCCESSFUL_BUILD = "/lastSuccessfulBuild";
Expand Down Expand Up @@ -188,6 +191,25 @@ public static URL createUrlJenkins(String jobName, int buildNumber, String subPa
return new URL(urlBuilder.toString());
}

public static boolean isJenkinsAvailable() {
logger.trace("Checking Jenkins availability...");
try {
HttpURLConnection conn = (HttpURLConnection) new URL(JENKINS_URL).openConnection();
try (AutoCloseable ac = conn::disconnect) {
conn.setConnectTimeout(JENKINS_TIMEOUT);
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
logger.trace("Jenkins is available at {}", JENKINS_URL);
return true;
} else {
throw new ConnectException();
}
}
} catch (Exception e) {
logger.warn("Could not connect to Jenkins at {}", JENKINS_URL);
}
return false;
}

/**
* Get the build number of the last stable build on the Jenkins server.
* <p>
Expand Down
Expand Up @@ -31,4 +31,4 @@ public enum GameDataDirectoryNames {
public String getName() {
return name;
}
}
}
Expand Up @@ -30,12 +30,12 @@
public class LocalCopyVisitor extends SimpleFileVisitor<Path> {

/**
* Directory to copy from
* Directory to copy from.
*/
private final Path sourceDirectory;

/**
* Directory to copy to
* Directory to copy to.
*/
private final Path targetDirectory;

Expand Down
10 changes: 4 additions & 6 deletions src/test/java/org/terasology/launcher/game/TestGameVersions.java
Expand Up @@ -32,6 +32,7 @@
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.stream.IntStream;

import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.spy;
Expand Down Expand Up @@ -142,12 +143,9 @@ public void testSingleOmegaBuildDetection() throws Exception {
}

private int[] getBuildArray(int start, int stop) {
int[] buildArray = new int[(stop - start) + 2]; // add 1 to include the end, and add 1 for the duplicate first build
buildArray[0] = stop; // Duplicate, to account for virtual 'latest' version
for (int i = buildArray.length - 1; i > 0; i--) {
buildArray[i] = start++;
}
return buildArray;
return IntStream.concat(IntStream.of(stop), // Duplicate, to account for virtual 'latest' version
IntStream.iterate(stop, i -> i - 1).limit(stop - start + 1)
).toArray();
}

private void runAssertions(TerasologyGameVersions gameVersions, int expected, BiConsumer<TerasologyGameVersion, Integer> additionalAssertions) {
Expand Down

0 comments on commit 28a88a7

Please sign in to comment.