Coverage Report

Created: 2026-10-24 08:16

/work/testing/support/src/simulated_environment.cc
Line
Count
Source (jump to first uncovered line)
1
#include "../public/simulated_environment.hh"
2
3
#include <iostream>
4
5
namespace tox::test {
6
7
SimulatedEnvironment::SimulatedEnvironment(uint64_t seed)
8
    : sim_(std::make_unique<Simulation>(seed))
9
    , global_random_(std::make_unique<FakeRandom>(seed))
10
    , global_memory_(std::make_unique<FakeMemory>())
11
2.81k
{
12
2.81k
}
13
14
2.81k
SimulatedEnvironment::~SimulatedEnvironment() = default;
15
16
NetworkSystem &SimulatedEnvironment::network()
17
0
{
18
    // Return a dummy stack for interface compliance; real networking is per-node.
19
0
    static FakeNetworkStack *dummy = nullptr;
20
0
    if (!dummy) {
21
0
        IP dummy_ip;
22
0
        ip_init(&dummy_ip, false);
23
0
        dummy = new FakeNetworkStack(sim_->net(), dummy_ip);
24
0
    }
25
0
    return *dummy;
26
0
}
27
28
280
ClockSystem &SimulatedEnvironment::clock() { return sim_->clock(); }
29
0
RandomSystem &SimulatedEnvironment::random() { return *global_random_; }
30
0
MemorySystem &SimulatedEnvironment::memory() { return *global_memory_; }
31
32
858
FakeClock &SimulatedEnvironment::fake_clock() { return sim_->clock(); }
33
23
FakeRandom &SimulatedEnvironment::fake_random() { return *global_random_; }
34
1.29k
FakeMemory &SimulatedEnvironment::fake_memory() { return *global_memory_; }
35
36
std::unique_ptr<ScopedToxSystem> SimulatedEnvironment::create_node(uint16_t port)
37
2.42k
{
38
2.42k
    auto scoped = std::make_unique<ScopedToxSystem>();
39
2.42k
    scoped->node = sim_->create_node();
40
41
    // Bind port
42
2.42k
    if (port != 0) {
43
2.26k
        Socket s = scoped->node->fake_network().socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
44
2.26k
        IP_Port addr;
45
2.26k
        ip_init(&addr.ip, false);
46
2.26k
        addr.ip.ip.v4.uint32 = 0;
47
2.26k
        addr.port = net_htons(port);
48
2.26k
        scoped->node->fake_network().bind(s, &addr);
49
2.26k
    }
50
51
    // Get Primary Endpoint for Fuzzer
52
2.42k
    scoped->endpoint = scoped->node->get_primary_socket();
53
54
    // Use global Random and Memory for legacy compatibility.
55
2.42k
    scoped->c_random = global_random_->c_random();
56
2.42k
    scoped->c_memory = global_memory_->c_memory();
57
58
    // Use Node's Network
59
2.42k
    scoped->c_network = scoped->node->c_network;
60
61
    // Setup System
62
2.42k
    scoped->system.mem = &scoped->c_memory;
63
2.42k
    scoped->system.ns = &scoped->c_network;
64
2.42k
    scoped->system.rng = &scoped->c_random;
65
66
2.42k
    scoped->system.mono_time_user_data = &sim_->clock();
67
2.42k
    scoped->system.mono_time_callback = [](void *_Nullable user_data) -> uint64_t {
68
1.50k
        return static_cast<FakeClock *>(user_data)->current_time_ms();
69
1.50k
    };
70
71
2.42k
    return scoped;
72
2.42k
}
73
74
2.90k
void SimulatedEnvironment::advance_time(uint64_t ms) { sim_->advance_time(ms); }
75
76
}  // namespace tox::test