Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/main/java/me/itzg/helpers/fabric/FabricMetaClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,21 @@ static boolean nonEmptyString(String loaderVersion) {
* @param version can be latest, snapshot or specific
*/
public Mono<String> resolveMinecraftVersion(@Nullable String version) {
if (!isLatest(version) && !isSnapshot(version)) {
return Mono.just(version);
}

return sharedFetch.fetch(
uriBuilder.resolve("/v2/versions/game")
)
.toObjectList(VersionEntry.class)
.assemble()
.flatMap(versionEntries -> {
if (version == null || version.equalsIgnoreCase("latest")) {
if (isLatest(version)) {
return findFirst(versionEntries, VersionEntry::isStable)
.switchIfEmpty(Mono.error(() -> new GenericException("Unable to find any stable versions")));
}
else if (version.equalsIgnoreCase("snapshot")) {
else if (isSnapshot(version)) {
return findFirst(versionEntries, versionEntry -> !versionEntry.isStable())
.switchIfEmpty(Mono.error(() -> new GenericException("Unable to find any unstable versions")));
}
Expand All @@ -58,6 +62,14 @@ else if (version.equalsIgnoreCase("snapshot")) {
});
}

private static boolean isSnapshot(@Nullable String version) {
return version != null && version.equalsIgnoreCase("snapshot");
}

private static boolean isLatest(@Nullable String version) {
return version == null || version.equalsIgnoreCase("latest");
}

public Mono<String> resolveLoaderVersion(String minecraftVersion, String loaderVersion) {
if (nonEmptyString(loaderVersion)) {
return Mono.just(loaderVersion);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,50 @@ void testUpgradeFromVersionToVersion(WireMockRuntimeInfo wmRuntimeInfo) {
.doesNotExist();
}

@Test
void testNoNetworkUsageWhenVersionMatches(WireMockRuntimeInfo wmRuntimeInfo) {
final WireMock wm = wmRuntimeInfo.getWireMock();
wm.loadMappingsFrom("src/test/resources/fabric");

final FabricLauncherInstaller installer = new FabricLauncherInstaller(
tempDir
);
installer.setFabricMetaBaseUrl(wmRuntimeInfo.getHttpBaseUrl());

installer.installUsingVersions(
"1.19.2", null, null
);

wm.verifyThat(
// since minecraft version is pinned
0,
getRequestedFor(urlEqualTo("/v2/versions/game")));
wm.verifyThat(
// to lookup installer version
1,
getRequestedFor(urlEqualTo("/v2/versions/installer")));

final Path expectedLauncher192 = tempDir.resolve("fabric-server-mc.1.19.2-loader.0.14.12-launcher.0.11.1.jar");
assertThat(expectedLauncher192)
.isNotEmptyFile()
.hasContent("fabric-server-mc.1.19.2-loader.0.14.12-launcher.0.11.1");

// Now try again with same

wm.resetRequests();

installer.installUsingVersions(
"1.19.2", "0.14.12", "0.11.1"
);

assertThat(expectedLauncher192)
.isNotEmptyFile()
.hasContent("fabric-server-mc.1.19.2-loader.0.14.12-launcher.0.11.1");

wm.verifyThat(0, getRequestedFor(urlEqualTo("/v2/versions/game")));
wm.verifyThat(0, getRequestedFor(urlEqualTo("/v2/versions/installer")));
}

@Test
@EnabledIfSystemProperty(named = "testEnableManualTests", matches = "true", disabledReason = "For manual recording")
void forRecordingVersionDiscovery() {
Expand Down