// Compile the actual GSC registration adapter against portable VM interfaces. #include int main() { afk::component component; component.on_startup(nullptr); const auto call = [](const std::string& name, std::vector args = {}) { return gsc::function::functions.at(name)(args); }; assert(call("afkversion").as() == "1.0.0"); auto ack=call("afkresponse",{"private-secret-invalid-json"}).as(); assert(!ack["valid"].as() && ack["reason"].as() == "invalid_json"); assert(call("afkload",{"server","endpoint"}).is()); for (int i=0;i<2;++i) assert(!call("afkstore",{"server","endpoint","private-secret Authorization"}).as()); const std::string body=R"({"server":"server","guid":"1234","match":"match","request_id":"one","action":"reserve","session_id":"session","seconds":600})"; assert(call("afkstore",{"server","endpoint",body}).as()); assert(call("afkprepare",{"server","endpoint",body}).as()); assert(call("afkauthorize",{"server","endpoint","session","600"}).as()); assert(call("afkbegin",{"server","endpoint","session"}).as()); assert(call("afkremaining",{"server","endpoint","session"}).as() > 0); assert(call("afkcheckpoint",{"server","endpoint","session"}).as() >= 0); assert(call("afkstop",{"server","endpoint","session","manual"}).as()); assert(call("afkrecover",{"server","endpoint","new-match"}).as()); std::filesystem::path file; for (const auto& entry : std::filesystem::recursive_directory_iterator("tws-afk")) if (entry.path().extension() == ".json") file=entry.path(); assert(!file.empty()); { std::ofstream stream(file); stream << "private-secret-corrupt-journal"; } for (int i=0;i<2;++i) { assert(call("afkload",{"server","endpoint"}).get_raw().type == game::SCRIPT_NONE); assert(!call("afkremove",{"server","endpoint","one"}).as()); } std::filesystem::remove(file); assert(call("afkload",{"server","endpoint"}).is()); assert(call("afkremove",{"server","endpoint","one"}).as()); }