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