feat: add OTA

This commit is contained in:
TCFDONMEZ
2026-09-29 17:04:59 +03:00
parent 511c166436
commit 48a7a0dd72
10 changed files with 292 additions and 38 deletions
@@ -121,6 +121,28 @@ public class OtaUpdaterTest {
assertArrayEquals(new int[]{1, 0, 5}, OtaUpdater.segments("1.x.5"));
}
@Test
public void sha256SidecarFormatsAreParsed() {
String hash = "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef";
assertEquals(hash, OtaUpdater.parseExpectedSha256(hash,
"FatihsMG4-unstable-2.2.7.apk"));
assertEquals(hash, OtaUpdater.parseExpectedSha256(
hash + " *FatihsMG4-unstable-2.2.7.apk\n",
"FatihsMG4-unstable-2.2.7.apk"));
assertNull(OtaUpdater.parseExpectedSha256(hash + " another.apk",
"FatihsMG4-unstable-2.2.7.apk"));
assertNull(OtaUpdater.parseExpectedSha256("not-a-hash",
"FatihsMG4-unstable-2.2.7.apk"));
}
@Test
public void updateWithoutHashSidecarIsReportedButCannotBeVerified() throws Exception {
JSONArray releases = new JSONArray().put(releaseWithoutHashes(true, asset("2.2.7")));
OtaUpdater.Update update = OtaUpdater.selectUpdate(releases, "2.2.6.0-unstable");
assertEquals("2.2.7", update.versionName);
assertNull(update.hashUrl);
}
@Test
public void newestAssetWinsEvenWhenItIsLaterInTheSameRelease() throws Exception {
JSONArray releases = new JSONArray().put(release(true,
@@ -201,6 +223,22 @@ public class OtaUpdaterTest {
private static JSONObject release(boolean prerelease, JSONObject... assets) throws Exception {
JSONArray list = new JSONArray();
for (JSONObject asset : assets) {
list.put(asset);
String name = asset.optString("name", "");
if (name.toLowerCase(java.util.Locale.US).endsWith(".apk")) {
list.put(new JSONObject()
.put("name", name + ".sha256")
.put("browser_download_url",
asset.optString("browser_download_url") + ".sha256"));
}
}
return new JSONObject().put("prerelease", prerelease).put("assets", list);
}
private static JSONObject releaseWithoutHashes(boolean prerelease, JSONObject... assets)
throws Exception {
JSONArray list = new JSONArray();
for (JSONObject asset : assets) list.put(asset);
return new JSONObject().put("prerelease", prerelease).put("assets", list);
}