Skip to content

Commit b1c3223

Browse files
committed
Expand unit testing for new CoW mode
1 parent 0f0265d commit b1c3223

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

tests/unit/fork.cpp

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,35 @@ int func2() {
463463
fork1.vmcall("func1");
464464
REQUIRE(fork1.return_value() == 12345);
465465

466-
fork1.vmcall("func2");
467-
REQUIRE(fork1.return_value() == 54321);
466+
fork1.vmcall("set_value", 22222);
467+
468+
fork1.vmcall("func1");
469+
REQUIRE(fork1.return_value() == 22222);
470+
471+
REQUIRE_THROWS([&] () {
472+
const size_t size = 8ULL << 20;
473+
uint64_t addr = fork1.mmap_allocate(size);
474+
char buffer[4096];
475+
memset(buffer, 'a', sizeof(buffer));
476+
for (size_t i = 0; i < size; i += 4096)
477+
{
478+
fork1.copy_to_guest(addr + i, buffer, 4096);
479+
}
480+
// Unreachable
481+
abort();
482+
}());
483+
484+
auto fork2 = tinykvm::Machine { machine2, {
485+
.max_mem = MAX_MEMORY, .max_cow_mem = MAX_COWMEM
486+
} };
487+
REQUIRE(fork2.return_value() == 666); // Main() return value
488+
489+
fork2.vmcall("func1");
490+
REQUIRE(fork2.return_value() == 12345);
491+
492+
fork2.vmcall("set_value", 22222);
493+
494+
fork2.vmcall("func1");
495+
REQUIRE(fork2.return_value() == 22222);
468496
}
469497
}

0 commit comments

Comments
 (0)