• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ivanallen / pain / 17189463775

24 Aug 2025 01:41PM UTC coverage: 57.529% (-25.6%) from 83.114%
17189463775

push

github

ivanallen
add mock deva

Signed-off-by: allen <1007729991@qq.com>

842 of 2633 branches covered (31.98%)

98 of 128 new or added lines in 5 files covered. (76.56%)

14 existing lines in 2 files now uncovered.

1001 of 1740 relevant lines covered (57.53%)

256.27 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.59
/src/deva/mock/mock_deva.cc
1
#include "deva/mock/mock_deva.h"
2
#include <braft/route_table.h>
3
#include <pain/base/path.h>
4
#include <pain/base/plog.h>
5
#include <cerrno>
6
#include <fmt/format.h>
7
#include <fmt/ranges.h>
8

9
namespace pain::deva::mock {
10

11
MockDeva::MockDeva() :
2✔
12
    _group("test_group"),
6!
13
    _data_path("/tmp/deva_mock_data_XXXXXX"),
6!
14
    _node_addrs({"127.0.0.1:8200", "127.0.0.1:8201", "127.0.0.1:8202"}) {
18!
15
    _node_conf = fmt::format("{}", fmt::join(_node_addrs, ","));
6!
16
    make_temp_dir_or_die(&_data_path);
2!
17
    PLOG_INFO(("data_path", _data_path));
2✔
18

19
    auto node_size = _node_addrs.size();
2✔
20

21
    _deva_machine.resize(node_size);
2!
22
    _data_paths.resize(node_size);
2!
23

24
    for (size_t i = 0; i < node_size; i++) {
8✔
25
        _data_paths[i] = fmt::format("{}/{}", _data_path, i);
12✔
26
    }
27
    braft::rtb::update_configuration(_group, _node_conf);
2!
28
}
8!
29

30
MockDeva::~MockDeva() {
2✔
31
    stop();
2✔
32
    std::filesystem::remove_all(_data_path);
2✔
33
}
2✔
34

35
Status MockDeva::start() {
1✔
36
    for (size_t i = 0; i < _deva_machine.size(); i++) {
4✔
37
        auto status = start(i);
3!
38
        if (!status.ok()) {
3!
NEW
39
            return status;
×
40
        }
41
    }
3!
42
    return Status::OK();
1✔
43
}
44

45
Status MockDeva::start(int index) {
5✔
46
    _deva_machine[index] = std::make_unique<DevaMachine>(
20✔
47
        _data_paths[index].c_str(), _group.c_str(), _node_addrs[index].c_str(), _node_conf.c_str());
15!
48
    return _deva_machine[index]->start();
5✔
49
}
50

51
void MockDeva::stop(int index) {
11✔
52
    if (_deva_machine[index]) {
11✔
53
        _deva_machine[index]->stop();
5✔
54
        _deva_machine[index].reset();
5✔
55
    }
56
}
11✔
57

58
void MockDeva::stop() {
3✔
59
    for (size_t i = 0; i < _deva_machine.size(); i++) {
12✔
60
        stop(i);
9✔
61
    }
62
}
3✔
63

64
Status MockDeva::wait_for_leader(std::string* addr, int timeout_ms) {
2✔
65
    constexpr int sleep_interval_ms = 500;
2✔
66
    for (int i = 0; i < timeout_ms / sleep_interval_ms; i++) {
23!
67
        auto status = braft::rtb::refresh_leader(_group, sleep_interval_ms);
23!
68
        if (!status.ok()) {
23✔
69
            bthread_usleep(sleep_interval_ms * 1000); // NOLINT(readability-magic-numbers)
21!
70
            continue;
21✔
71
        }
72
        braft::PeerId leader;
2✔
73
        braft::rtb::select_leader(_group, &leader);
2!
74
        if (leader.is_empty()) {
2!
NEW
75
            bthread_usleep(sleep_interval_ms * 1000); // NOLINT(readability-magic-numbers)
×
NEW
76
            continue;
×
77
        }
78
        *addr = leader.to_string();
2!
79
        return Status::OK();
2✔
80
    }
25!
NEW
81
    return Status(ENODEV, "No leader");
×
82
}
83

84
} // namespace pain::deva::mock
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc