Files
Ange-Marie MAURIN - A2M Systèmes a185b3414a feat(core): protocole Studio - Core 0.2, session en direct, bail et sécurité
CoreServices / CoreRuntime / LiveSession (conception reprise d'un subagent interrompu, implémentation complétée) : session à 60 Hz avec entrée maintenue, export de l'enregistrement et des empreintes par tick, import par rejeu (sim::rebuild_session) puis poursuite dans le même enregistrement ; bail réversible (--linked, core/attach, core/detach, délai de grâce, code de sortie 3) ; core/shutdown ; jeton en temps constant et contrôle de l'Origin (origines ws:// des clients natifs acceptées, spec mise à jour). Base64 strict corrigé (rejetait des entrées valides). 56 cas de test, ASan vert sur les tests serveur. build.ps1 : -Target accepte a,b.
2026-11-06 23:00:53 +01:00

61 lines
1.7 KiB
C++

// SPDX-License-Identifier: MPL-2.0
#include "base64.hpp"
#include <doctest/doctest.h>
#include <cstddef>
#include <string>
#include <string_view>
#include <vector>
using namespace sequa::core::server;
namespace {
std::vector<std::byte> bytes_of(std::string_view text)
{
std::vector<std::byte> bytes;
for (const char c : text) {
bytes.push_back(static_cast<std::byte>(c));
}
return bytes;
}
} // namespace
TEST_CASE("Base64 : vecteurs de la RFC 4648 section 10")
{
const std::pair<std::string_view, std::string_view> vectors[] = {
{"", ""}, {"f", "Zg=="}, {"fo", "Zm8="}, {"foo", "Zm9v"},
{"foob", "Zm9vYg=="}, {"fooba", "Zm9vYmE="}, {"foobar", "Zm9vYmFy"},
};
for (const auto& [plain, encoded] : vectors) {
CHECK(base64::encode(bytes_of(plain)) == encoded);
const auto decoded = base64::decode(encoded);
REQUIRE(decoded.has_value());
CHECK(*decoded == bytes_of(plain));
}
}
TEST_CASE("Base64 : decodage strict")
{
for (const std::string_view bad : {"Zg", "Zg=", "Z===", "====", "Zm9v!", "Zm=v", "Zh==", "Zm9=", "Zm 9v", "Zm9v\n"}) {
CAPTURE(bad);
CHECK_FALSE(base64::decode(bad).has_value());
}
}
TEST_CASE("Base64 : aller-retour de tous les octets")
{
std::vector<std::byte> all;
for (int i = 0; i < 256; ++i) {
all.push_back(static_cast<std::byte>(i));
}
for (std::size_t length = 0; length <= all.size(); length += 37) {
const std::vector<std::byte> part(all.begin(), all.begin() + static_cast<std::ptrdiff_t>(length));
const auto decoded = base64::decode(base64::encode(part));
REQUIRE(decoded.has_value());
CHECK(*decoded == part);
}
}