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

wirenboard / wb-mqtt-serial / 2

29 Dec 2025 12:28PM UTC coverage: 76.817% (+4.0%) from 72.836%
2

Pull #1045

github

54aa0c
pgasheev
up changelog
Pull Request #1045: Fix firmware version in WB-M1W2 template

6873 of 9161 branches covered (75.02%)

12966 of 16879 relevant lines covered (76.82%)

1651.61 hits per line

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

91.89
/test/mercury200_test.cpp
1
#include "devices/mercury200_device.h"
2
#include "fake_serial_port.h"
3
#include "mercury200_expectations.h"
4
#include <string>
5

6
class TMercury200Test: public TSerialDeviceTest, public TMercury200Expectations
7
{
8
protected:
9
    void SetUp();
10
    void VerifyEnergyQuery();
11
    void VerifyParamQuery();
12

13
    virtual PDeviceConfig GetDeviceConfig() const;
14

15
    PMercury200Device Mercury200Dev;
16

17
    PRegister Mercury200RET1Reg;
18
    PRegister Mercury200RET2Reg;
19
    PRegister Mercury200RET3Reg;
20
    PRegister Mercury200RET4Reg;
21
    PRegister Mercury200UReg;
22
    PRegister Mercury200IReg;
23
    PRegister Mercury200PReg;
24
    PRegister Mercury200BatReg;
25
};
26

27
PDeviceConfig TMercury200Test::GetDeviceConfig() const
6✔
28
{
29
    return std::make_shared<TDeviceConfig>("mercury200", "0xFE123456", "mercury200");
6✔
30
}
31

32
void TMercury200Test::SetUp()
6✔
33
{
34
    TSerialDeviceTest::SetUp();
6✔
35
    Mercury200Dev = std::make_shared<TMercury200Device>(GetDeviceConfig(), DeviceFactory.GetProtocol("mercury200"));
6✔
36

37
    Mercury200RET1Reg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, 0x27, BCD32));
6✔
38
    TRegisterDesc regAddress;
6✔
39
    regAddress.Address = std::make_shared<TUint32RegisterAddress>(0x27);
6✔
40
    regAddress.DataOffset = 4;
6✔
41
    Mercury200RET2Reg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, regAddress, BCD32));
6✔
42
    regAddress.DataOffset = 8;
6✔
43
    Mercury200RET3Reg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, regAddress, BCD32));
6✔
44
    regAddress.DataOffset = 12;
6✔
45
    Mercury200RET4Reg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, regAddress, BCD32));
6✔
46
    Mercury200UReg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, 0x63, BCD16));
6✔
47
    regAddress.Address = std::make_shared<TUint32RegisterAddress>(0x63);
6✔
48
    regAddress.DataOffset = 2;
6✔
49
    Mercury200IReg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, regAddress, BCD16));
6✔
50
    regAddress.DataOffset = 4;
6✔
51
    Mercury200PReg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, regAddress, BCD24));
6✔
52
    Mercury200BatReg = Mercury200Dev->AddRegister(TRegisterConfig::Create(0, 0x29, BCD16));
6✔
53

54
    SerialPort->Open();
6✔
55
}
6✔
56

57
void TMercury200Test::VerifyEnergyQuery()
2✔
58
{
59
    EnqueueMercury200EnergyResponse();
2✔
60
    ASSERT_EQ(TRegisterValue{0x62142}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200RET1Reg->GetConfig()));
4✔
61
    ASSERT_EQ(TRegisterValue{0x20834}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200RET2Reg->GetConfig()));
4✔
62
    ASSERT_EQ(TRegisterValue{0x11111}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200RET3Reg->GetConfig()));
4✔
63
    ASSERT_EQ(TRegisterValue{0x22222}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200RET4Reg->GetConfig()));
4✔
64
    Mercury200Dev->InvalidateReadCache();
2✔
65
}
66

67
void TMercury200Test::VerifyParamQuery()
2✔
68
{
69
    EnqueueMercury200ParamResponse();
2✔
70
    ASSERT_EQ(TRegisterValue{0x1234}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200UReg->GetConfig()));
4✔
71
    ASSERT_EQ(TRegisterValue{0x5678}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200IReg->GetConfig()));
4✔
72
    ASSERT_EQ(TRegisterValue{0x765432}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200PReg->GetConfig()));
4✔
73
    Mercury200Dev->InvalidateReadCache();
2✔
74
}
75

76
TEST_F(TMercury200Test, EnergyQuery)
16✔
77
{
78
    try {
79
        VerifyEnergyQuery();
4✔
80
    } catch (const std::exception& e) {
×
81
        SerialPort->Close();
×
82
        throw e;
×
83
    }
84
    SerialPort->Close();
4✔
85
}
4✔
86

87
TEST_F(TMercury200Test, ParamsQuery)
16✔
88
{
89
    try {
90
        VerifyParamQuery();
4✔
91
    } catch (const std::exception& e) {
×
92
        SerialPort->Close();
×
93
        throw e;
×
94
    }
95
    SerialPort->Close();
4✔
96
}
4✔
97

98
TEST_F(TMercury200Test, BatteryVoltageQuery)
16✔
99
{
100
    EnqueueMercury200BatteryVoltageResponse();
4✔
101
    ASSERT_EQ(TRegisterValue{0x0391}, Mercury200Dev->ReadRegisterImpl(*SerialPort, *Mercury200BatReg->GetConfig()));
8✔
102
    SerialPort->Close();
4✔
103
}
104

105
class TMercury200IntegrationTest: public TSerialDeviceIntegrationTest, public TMercury200Expectations
106
{
107
protected:
108
    void SetUp() override;
109
    void TearDown() override;
110
    const char* ConfigPath() const override
2✔
111
    {
112
        return "configs/config-mercury200-test.json";
2✔
113
    }
114
    std::string GetTemplatePath() const override
2✔
115
    {
116
        return "../templates";
4✔
117
    }
118
};
119

120
void TMercury200IntegrationTest::SetUp()
2✔
121
{
122
    TSerialDeviceIntegrationTest::SetUp();
2✔
123
    SerialPort->SetExpectedFrameTimeout(std::chrono::milliseconds(7));
2✔
124
    ASSERT_TRUE(!!SerialPort);
2✔
125
}
126

127
void TMercury200IntegrationTest::TearDown()
2✔
128
{
129
    SerialPort->Close();
2✔
130
    TSerialDeviceIntegrationTest::TearDown();
2✔
131
}
2✔
132

133
TEST_F(TMercury200IntegrationTest, Poll)
16✔
134
{
135
    EnqueueMercury200EnergyResponse();
4✔
136
    EnqueueMercury200BatteryVoltageResponse();
4✔
137
    EnqueueMercury200ParamResponse();
4✔
138
    Note() << "LoopOnce()";
4✔
139
    for (auto i = 0; i < 3; ++i) {
16✔
140
        SerialDriver->LoopOnce();
12✔
141
    }
142
}
4✔
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