CH-J Server Managerspráva serverů přes SSH
Menu
Vydané zdroje

CH-J Server Manager

Procházejte adresáře a soubory konkrétního vydání aplikace.

Stáhnout zdroje ZIP
CH-J Proprietary Software License 1.14

Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.

3,1 KB · 74 řádkůStáhnout soubor
1"use strict";
3const test = require("node:test");
4const assert = require("node:assert/strict");
5const {
6 assertSupportedUpdateTarget,
7 serverChannel,
8 validateReleaseListResponse,
9 validateReleaseResponse
10} = require("../src/shared/updateContract");
12function payload(overrides = {}) {
13 return {
14 update_available: true,
15 release: {
16 id: "release-1",
17 type: "app",
18 name: "CH-J Server Manager",
19 version: "0.0.2",
20 platform: "win",
21 arch: "x64",
22 channel: "alpha",
23 mandatory: false,
24 notes: "Alpha update",
25 sha512: "a".repeat(128),
26 size: 123,
27 filename: "CH-J-Server-Manager.exe",
28 download_url: "https://192.168.10.154/files/apps/win/update.exe",
29 signature_url: "https://192.168.10.154/files/apps/win/update.exe.asc",
30 ...overrides
31 }
32 };
35const expected = { currentVersion: "0.0.1", platform: "win32", arch: "x64", channel: "alpha" };
37test("valid PHP release response is normalized", () => {
38 const result = validateReleaseResponse(payload(), expected);
39 assert.equal(result.updateAvailable, true);
40 assert.equal(result.release.version, "0.0.2");
41 assert.equal(result.release.sha512.length, 128);
42});
44test("client independently rejects same or older release", () => {
45 assert.equal(validateReleaseResponse(payload({ version: "0.0.1" }), expected).updateAvailable, false);
46 assert.equal(validateReleaseResponse(payload({ version: "0.0.0" }), expected).updateAvailable, false);
47});
49test("wrong platform, channel and hash are rejected", () => {
50 assert.throws(() => validateReleaseResponse(payload({ platform: "mac", arch: "arm64" }), expected), /platform/);
51 assert.throws(() => validateReleaseResponse(payload({ channel: "stable" }), expected), /channel/);
52 assert.throws(() => validateReleaseResponse(payload({ sha512: "abcd" }), expected), /SHA-512/);
53});
55test("application and server use identical update channel names", () => {
56 assert.equal(serverChannel("alpha"), "alpha");
57 assert.equal(serverChannel("beta"), "beta");
58 assert.equal(serverChannel("stable"), "stable");
59 assert.throws(() => serverChannel("dev"), /Unsupported update channel/);
60});
62test("macOS updates support ARM64 only", () => {
63 assert.deepEqual(assertSupportedUpdateTarget("darwin", "arm64"), { platform: "mac", arch: "arm64" });
64 assert.throws(() => assertSupportedUpdateTarget("mac", "x64"), /Unsupported update architecture/);
65 assert.throws(() => assertSupportedUpdateTarget("mac", "universal"), /Unsupported update architecture/);
66});
68test("catalog keeps equal versions separate and sorts them by publication time", () => {
69 const first = payload({ id: "older-build", version: "0.0.1", published_at: "2026-08-07T15:00:00Z" }).release;
70 const second = payload({ id: "newer-build", version: "0.0.1", published_at: "2026-08-07T16:00:00Z" }).release;
71 const result = validateReleaseListResponse({ releases: [first, second] }, expected);
72 assert.deepEqual(result.releases.map((release) => release.id), ["newer-build", "older-build"]);
73 assert.throws(() => validateReleaseListResponse({ releases: [first, first] }, expected), /Duplicate release id/);
74});

SHA-256: 2c2a5cc1db15f42b7b8e3c83bdb3effc500ddf34d5d60a28f1ba2bd16a91b681

SHA-256 archivu: 5ac91caf4fa32a6fdb114f2430deed486fbe7489d5eea343d1f034169fafb5e0