rippled
Loading...
Searching...
No Matches
BuildInfo_test.cpp
1#include <xrpl/beast/unit_test.h>
2#include <xrpl/protocol/BuildInfo.h>
3
4namespace ripple {
5
7{
8public:
9 void
11 {
12 testcase("EncodeSoftwareVersion");
13
14 auto encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.3-b7");
15
16 // the first two bytes identify the particular implementation, 0x183B
17 BEAST_EXPECT(
18 (encodedVersion & 0xFFFF'0000'0000'0000LLU) ==
19 0x183B'0000'0000'0000LLU);
20
21 // the next three bytes: major version, minor version, patch version,
22 // 0x010203
23 BEAST_EXPECT(
24 (encodedVersion & 0x0000'FFFF'FF00'0000LLU) ==
25 0x0000'0102'0300'0000LLU);
26
27 // the next two bits:
28 {
29 // 01 if a beta
30 BEAST_EXPECT(
31 (encodedVersion & 0x0000'0000'00C0'0000LLU) >> 22 == 0b01);
32 // 10 if an RC
33 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.4-rc7");
34 BEAST_EXPECT(
35 (encodedVersion & 0x0000'0000'00C0'0000LLU) >> 22 == 0b10);
36 // 11 if neither an RC nor a beta
37 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.5");
38 BEAST_EXPECT(
39 (encodedVersion & 0x0000'0000'00C0'0000LLU) >> 22 == 0b11);
40 }
41
42 // the next six bits: rc/beta number (1-63)
43 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.6-b63");
44 BEAST_EXPECT((encodedVersion & 0x0000'0000'003F'0000LLU) >> 16 == 63);
45
46 // the last two bytes are zeros
47 BEAST_EXPECT((encodedVersion & 0x0000'0000'0000'FFFFLLU) == 0);
48
49 // Test some version strings with wrong formats:
50 // no rc/beta number
51 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.3-b");
52 BEAST_EXPECT((encodedVersion & 0x0000'0000'00FF'0000LLU) == 0);
53 // rc/beta number out of range
54 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.3-b64");
55 BEAST_EXPECT((encodedVersion & 0x0000'0000'00FF'0000LLU) == 0);
56
57 // Check that the rc/beta number of a release is 0:
58 encodedVersion = BuildInfo::encodeSoftwareVersion("1.2.6");
59 BEAST_EXPECT((encodedVersion & 0x0000'0000'003F'0000LLU) == 0);
60 }
61
62 void
64 {
65 testcase("IsRippledVersion");
66 auto vFF = 0xFFFF'FFFF'FFFF'FFFFLLU;
67 BEAST_EXPECT(!BuildInfo::isRippledVersion(vFF));
68 auto vRippled = 0x183B'0000'0000'0000LLU;
69 BEAST_EXPECT(BuildInfo::isRippledVersion(vRippled));
70 }
71
72 void
74 {
75 testcase("IsNewerVersion");
76 auto vFF = 0xFFFF'FFFF'FFFF'FFFFLLU;
77 BEAST_EXPECT(!BuildInfo::isNewerVersion(vFF));
78
79 auto v159 = BuildInfo::encodeSoftwareVersion("1.5.9");
80 BEAST_EXPECT(!BuildInfo::isNewerVersion(v159));
81
82 auto vCurrent = BuildInfo::getEncodedVersion();
83 BEAST_EXPECT(!BuildInfo::isNewerVersion(vCurrent));
84
85 auto vMax = BuildInfo::encodeSoftwareVersion("255.255.255");
86 BEAST_EXPECT(BuildInfo::isNewerVersion(vMax));
87 }
88
89 void
96};
97
98BEAST_DEFINE_TESTSUITE(BuildInfo, protocol, ripple);
99} // namespace ripple
A testsuite class.
Definition suite.h:52
testcase_t testcase
Memberspace for declaring test cases.
Definition suite.h:152
void run() override
Runs the suite.
std::uint64_t getEncodedVersion()
Returns this server's version packed in a 64-bit integer.
std::uint64_t encodeSoftwareVersion(char const *const versionStr)
Encode an arbitrary server software version in a 64-bit integer.
Definition BuildInfo.cpp:74
bool isNewerVersion(std::uint64_t version)
Check if the version is newer than the local node's rippled software version.
bool isRippledVersion(std::uint64_t version)
Check if the encoded software version is a rippled software version.
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6