Skip to content

Commit 0779013

Browse files
committed
Generate a v6 metadata Realm with useful data to test
1 parent 52216f8 commit 0779013

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed
8.89 KB
Binary file not shown.

test/object-store/sync/metadata.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,14 +504,74 @@ TEST_CASE("sync metadata: can open old metadata realms", "[sync][metadata]") {
504504
const auto identity = "metadata migration test";
505505
const std::string sample_token = "metadata migration token";
506506

507+
const auto access_token_1 = encode_fake_jwt("access token 1", 456, 123);
508+
const auto access_token_2 = encode_fake_jwt("access token 2", 456, 124);
509+
const auto refresh_token_1 = encode_fake_jwt("refresh token 1", 456, 123);
510+
const auto refresh_token_2 = encode_fake_jwt("refresh token 2", 456, 124);
511+
507512
// change to true to create a test file for the current schema version
508513
// this will only work on unix-like systems
509514
if ((false)) {
515+
#if true
516+
// Code to generate the v6 metadata Realm used to test the 6 -> 7 migration
517+
{
518+
using State = SyncUser::State;
519+
SyncMetadataManager manager(metadata_path, false);
520+
521+
auto user = manager.get_or_make_user_metadata("removed user", "");
522+
user->set_state(State::Removed);
523+
524+
auto make_user_pair = [&](const char* name, State state1, State state2, const std::string& token_1,
525+
const std::string& token_2) {
526+
auto user = manager.get_or_make_user_metadata(name, "a");
527+
user->set_state_and_tokens(state1, token_1, refresh_token_1);
528+
user->set_identities({{"identity 1", "a"}, {"shared identity", "shared"}});
529+
user->add_realm_file_path("file 1");
530+
user->add_realm_file_path("file 2");
531+
532+
user = manager.get_or_make_user_metadata(name, "b");
533+
user->set_state_and_tokens(state2, token_2, refresh_token_2);
534+
user->set_identities({{"identity 2", "b"}, {"shared identity", "shared"}});
535+
user->add_realm_file_path("file 2");
536+
user->add_realm_file_path("file 3");
537+
};
538+
539+
make_user_pair("first logged in, second logged out", State::LoggedIn, State::LoggedOut, access_token_1,
540+
access_token_2);
541+
make_user_pair("first logged in, second removed", State::LoggedIn, State::Removed, access_token_1,
542+
access_token_2);
543+
make_user_pair("second logged in, first logged out", State::LoggedOut, State::LoggedIn, access_token_1,
544+
access_token_2);
545+
make_user_pair("second logged in, first removed", State::Removed, State::LoggedIn, access_token_1,
546+
access_token_2);
547+
make_user_pair("both logged in, first newer", State::LoggedIn, State::LoggedIn, access_token_2,
548+
access_token_1);
549+
make_user_pair("both logged in, second newer", State::LoggedIn, State::LoggedIn, access_token_1,
550+
access_token_2);
551+
}
552+
553+
// Replace the randomly generated UUIDs with deterministic values
554+
{
555+
Realm::Config config;
556+
config.path = metadata_path;
557+
auto realm = Realm::get_shared_realm(config);
558+
realm->begin_transaction();
559+
auto& group = realm->read_group();
560+
auto table = group.get_table("class_UserMetadata");
561+
auto col = table->get_column_key("local_uuid");
562+
size_t i = 0;
563+
for (auto& obj : *table) {
564+
obj.set(col, util::to_string(i++));
565+
}
566+
realm->commit_transaction();
567+
}
568+
#else
510569
{ // Create a metadata Realm with a test user
511570
SyncMetadataManager manager(metadata_path, false);
512571
auto user_metadata = manager.get_or_make_user_metadata(identity, provider_type);
513572
user_metadata->set_access_token(sample_token);
514573
}
574+
#endif
515575

516576
// Open the metadata Realm directly and grab the schema version from it
517577
Realm::Config config;

0 commit comments

Comments
 (0)