Skip to content

Commit 11c372a

Browse files
committed
Expand fork test with kwm-resets
1 parent 77533c5 commit 11c372a

1 file changed

Lines changed: 39 additions & 1 deletion

File tree

tests/unit/fork.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#include <catch2/matchers/catch_matchers_string.hpp>
33

44
#include <tinykvm/machine.hpp>
5-
#include <linux/kvm.h>
65
extern std::vector<uint8_t> build_and_load(const std::string& code);
76
static const uint64_t MAX_MEMORY = 8ul << 20; /* 8MB */
87
static const uint64_t MAX_COWMEM = 3ul << 20; /* 3MB */
@@ -605,6 +604,8 @@ int func2() {
605604
REQUIRE(machine2.is_forkable());
606605
REQUIRE(!machine2.is_forked());
607606

607+
/// -- full resets -- ///
608+
608609
auto fork1 = tinykvm::Machine { machine1, {
609610
.max_cow_mem = MAX_COWMEM,
610611
.split_hugepages = true
@@ -637,4 +638,41 @@ int func2() {
637638
.split_hugepages = true
638639
});
639640
}
641+
642+
/// -- keep working memory resets -- ///
643+
644+
auto fork3 = tinykvm::Machine { machine1, {
645+
.max_cow_mem = MAX_COWMEM,
646+
.split_hugepages = true
647+
} };
648+
649+
for (int i = 0; i < 100; i++)
650+
{
651+
fork3.run(4.0f);
652+
REQUIRE(fork3.return_value() == 666);
653+
654+
fork3.reset_to(machine1, {
655+
.max_cow_mem = 4ul << 20,
656+
.split_hugepages = true,
657+
.reset_keep_all_work_memory = true
658+
});
659+
}
660+
661+
auto fork4 = tinykvm::Machine { machine2, {
662+
.max_cow_mem = MAX_COWMEM,
663+
.split_hugepages = true
664+
} };
665+
666+
for (int i = 0; i < 100; i++)
667+
{
668+
fork4.setup_linux({"fork"}, env);
669+
fork4.run(4.0f);
670+
REQUIRE(fork4.return_value() == 666);
671+
672+
fork4.reset_to(machine2, {
673+
.max_cow_mem = 4ul << 20,
674+
.split_hugepages = true,
675+
.reset_keep_all_work_memory = true
676+
});
677+
}
640678
}

0 commit comments

Comments
 (0)