mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2026-06-13 19:36:26 +03:00
add tests for version upgrades
This commit is contained in:
@@ -2113,6 +2113,101 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & cmd, const
|
|||||||
ok = true;
|
ok = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (command == "version") {
|
||||||
|
shell.printfln("Testing version upgrade and downgrade detection...");
|
||||||
|
|
||||||
|
// mirrors System::check_upgrade(): settings = version stored in settings file, current = running firmware
|
||||||
|
struct VersionTest {
|
||||||
|
const char * settings;
|
||||||
|
const char * current;
|
||||||
|
const char * expected; // "upgrade", "downgrade" or "same"
|
||||||
|
};
|
||||||
|
|
||||||
|
const VersionTest tests[] = {
|
||||||
|
// identical versions
|
||||||
|
{"3.9.0", "3.9.0", "same"},
|
||||||
|
{"3.9.0-dev.12", "3.9.0-dev.12", "same"},
|
||||||
|
|
||||||
|
// numeric upgrades (patch, minor, major)
|
||||||
|
{"3.9.0", "3.9.1", "upgrade"},
|
||||||
|
{"3.8.5", "3.9.0", "upgrade"},
|
||||||
|
{"2.10.9", "3.0.0", "upgrade"},
|
||||||
|
|
||||||
|
// numeric downgrades
|
||||||
|
{"3.9.1", "3.9.0", "downgrade"},
|
||||||
|
{"3.9.0", "3.8.5", "downgrade"},
|
||||||
|
{"3.0.0", "2.10.9", "downgrade"},
|
||||||
|
|
||||||
|
// prerelease (dev) sequences on the same base version
|
||||||
|
{"3.9.0-dev.12", "3.9.0-dev.13", "upgrade"},
|
||||||
|
{"3.9.0-dev.13", "3.9.0-dev.12", "downgrade"},
|
||||||
|
{"3.9.0-dev.9", "3.9.0-dev.12", "upgrade"}, // single vs double digit dev number
|
||||||
|
{"3.9.0-dev.8", "3.9.0-dev.12", "upgrade"}, // regression: was reported as a downgrade
|
||||||
|
|
||||||
|
// prerelease vs release on the same base version (semver: prerelease < release)
|
||||||
|
{"3.9.0-dev.12", "3.9.0", "upgrade"},
|
||||||
|
{"3.9.0", "3.9.0-dev.12", "downgrade"},
|
||||||
|
|
||||||
|
// prerelease vs a different base version
|
||||||
|
{"3.9.0-dev.12", "3.9.1", "upgrade"},
|
||||||
|
{"3.9.1", "3.9.0-dev.12", "downgrade"},
|
||||||
|
{"3.8.5", "3.9.0-dev.12", "upgrade"},
|
||||||
|
|
||||||
|
// mixed prerelease tags
|
||||||
|
{"3.5.0-b13", "3.9.0-dev.12", "upgrade"},
|
||||||
|
|
||||||
|
// partial version strings are shorter than 5 chars, so check_upgrade() treats them as missing (3.5.0)
|
||||||
|
{"3.9", "3.9.0", "upgrade"},
|
||||||
|
{"3.9", "3.9.1", "upgrade"},
|
||||||
|
|
||||||
|
// build metadata after '+' is ignored
|
||||||
|
{"3.9.0+abc123", "3.9.0", "same"},
|
||||||
|
|
||||||
|
// numeric prerelease identifiers compare numerically, so leading zeros are equivalent
|
||||||
|
{"3.9.0-dev.01", "3.9.0-dev.1", "same"},
|
||||||
|
{"3.9.0-dev.012", "3.9.0-dev.12", "same"},
|
||||||
|
|
||||||
|
// missing/short version: check_upgrade() assumes 3.5.0
|
||||||
|
{"", "3.9.0", "upgrade"},
|
||||||
|
{"1.0", "3.9.0", "upgrade"},
|
||||||
|
};
|
||||||
|
|
||||||
|
uint8_t failed = 0;
|
||||||
|
for (const auto & test : tests) {
|
||||||
|
// replicate check_upgrade()'s handling of a missing version
|
||||||
|
std::string settingsVersion = test.settings;
|
||||||
|
if (settingsVersion.length() < 5) {
|
||||||
|
settingsVersion = "3.5.0";
|
||||||
|
}
|
||||||
|
|
||||||
|
FirmwareVersion settings_version(settingsVersion);
|
||||||
|
FirmwareVersion this_version(test.current);
|
||||||
|
|
||||||
|
const char * actual;
|
||||||
|
if (this_version > settings_version) {
|
||||||
|
actual = "upgrade";
|
||||||
|
} else if (this_version < settings_version) {
|
||||||
|
actual = "downgrade";
|
||||||
|
} else {
|
||||||
|
actual = "same";
|
||||||
|
}
|
||||||
|
|
||||||
|
bool pass = (strcmp(actual, test.expected) == 0);
|
||||||
|
if (!pass) {
|
||||||
|
failed++;
|
||||||
|
}
|
||||||
|
shell.printfln("%s %-14s -> %-14s expected %-9s got %-9s", pass ? "PASS" : "FAIL", test.settings, test.current, test.expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (failed) {
|
||||||
|
shell.printfln("%d test(s) FAILED", failed);
|
||||||
|
} else {
|
||||||
|
shell.printfln("All version tests passed");
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = true;
|
||||||
|
}
|
||||||
|
|
||||||
if (command == "mqtt2") {
|
if (command == "mqtt2") {
|
||||||
shell.printfln("Testing MQTT large payloads...");
|
shell.printfln("Testing MQTT large payloads...");
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ namespace emsesp {
|
|||||||
// #define EMSESP_DEBUG_DEFAULT "shuntingyard"
|
// #define EMSESP_DEBUG_DEFAULT "shuntingyard"
|
||||||
// #define EMSESP_DEBUG_DEFAULT "src"
|
// #define EMSESP_DEBUG_DEFAULT "src"
|
||||||
// #define EMSESP_DEBUG_DEFAULT "led"
|
// #define EMSESP_DEBUG_DEFAULT "led"
|
||||||
|
#define EMSESP_DEBUG_DEFAULT "version"
|
||||||
|
|
||||||
#ifndef EMSESP_DEBUG_DEFAULT
|
#ifndef EMSESP_DEBUG_DEFAULT
|
||||||
#define EMSESP_DEBUG_DEFAULT "general"
|
#define EMSESP_DEBUG_DEFAULT "general"
|
||||||
|
|||||||
Reference in New Issue
Block a user