73 lines
2.7 KiB
C++
73 lines
2.7 KiB
C++
#include "glove/supervisor/change_apply_recovery.hpp"
|
|
|
|
#include <cstdio>
|
|
#include <optional>
|
|
#include <string>
|
|
|
|
namespace {
|
|
|
|
#define REQUIRE(condition) \
|
|
do { \
|
|
if (!(condition)) { \
|
|
std::fprintf(stderr, "REQUIRE failed: %s @ %s:%d\n", #condition, __FILE__, __LINE__); \
|
|
return 1; \
|
|
} \
|
|
} while (false)
|
|
|
|
auto run() -> int {
|
|
using namespace glove::supervisor;
|
|
|
|
const change_apply_reservation_record reservation{
|
|
.grant_id = "grant-1",
|
|
.authorization_digest = std::string(64, 'a'),
|
|
.manifest_digest = std::string(64, 'b'),
|
|
.session_id = "session-1",
|
|
.exposure_id = "workspace",
|
|
.generation = 7,
|
|
.scope_digest = std::string(64, 'c'),
|
|
.source_identity_digest = std::string(64, 'd'),
|
|
.baseline_tree_digest = std::string(64, 'e'),
|
|
.staged_tree_digest = std::string(64, 'f'),
|
|
.reserved_at_ms = 1'000,
|
|
};
|
|
auto name = change_apply_candidate_name(reservation.authorization_digest);
|
|
REQUIRE(name.has_value());
|
|
REQUIRE(*name == ".glove-apply-v1-" + reservation.authorization_digest);
|
|
REQUIRE(!change_apply_candidate_name("bad").has_value());
|
|
|
|
REQUIRE(
|
|
classify_change_apply_recovery(
|
|
reservation, reservation.baseline_tree_digest, std::nullopt
|
|
) == change_apply_recovery_state::reserved
|
|
);
|
|
REQUIRE(
|
|
classify_change_apply_recovery(
|
|
reservation, reservation.baseline_tree_digest, reservation.staged_tree_digest
|
|
) == change_apply_recovery_state::candidate_prepared
|
|
);
|
|
REQUIRE(
|
|
classify_change_apply_recovery(
|
|
reservation, reservation.staged_tree_digest, reservation.baseline_tree_digest
|
|
) == change_apply_recovery_state::exchange_committed
|
|
);
|
|
REQUIRE(
|
|
classify_change_apply_recovery(reservation, reservation.staged_tree_digest, std::nullopt) ==
|
|
change_apply_recovery_state::ambiguous
|
|
);
|
|
REQUIRE(
|
|
classify_change_apply_recovery(
|
|
reservation, reservation.baseline_tree_digest, reservation.baseline_tree_digest
|
|
) == change_apply_recovery_state::ambiguous
|
|
);
|
|
REQUIRE(
|
|
classify_change_apply_recovery(reservation, "bad", std::nullopt) ==
|
|
change_apply_recovery_state::ambiguous
|
|
);
|
|
return 0;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
auto main() -> int {
|
|
return run();
|
|
}
|