aboutsummaryrefslogtreecommitdiff
path: root/src/unittest
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-09-19 20:56:13 +0200
commitc8900e169a1ddceec07a449f1ae7c4322ff02036 (patch)
tree5156605fb473d25786426eb6876ba2e7d3b7507b /src/unittest
parent950d2c9b3e10cbace9236e820c8119d1abb9e01f (diff)
parente0529da5c84f224c380e6d5e063392cb01f85683 (diff)
downloaddragonfireclient-c8900e169a1ddceec07a449f1ae7c4322ff02036.tar.xz
Merge branch 'master' of https://github.com/minetest/minetest
Diffstat (limited to 'src/unittest')
-rw-r--r--src/unittest/test_areastore.cpp4
-rw-r--r--src/unittest/test_compression.cpp42
-rw-r--r--src/unittest/test_connection.cpp12
-rw-r--r--src/unittest/test_irrptr.cpp10
-rw-r--r--src/unittest/test_map_settings_manager.cpp5
-rw-r--r--src/unittest/test_utilities.cpp93
6 files changed, 156 insertions, 10 deletions
diff --git a/src/unittest/test_areastore.cpp b/src/unittest/test_areastore.cpp
index 691cd69d2..2af3ca90c 100644
--- a/src/unittest/test_areastore.cpp
+++ b/src/unittest/test_areastore.cpp
@@ -135,7 +135,7 @@ void TestAreaStore::testSerialization()
b.data = "Area BB";
store.insertArea(&b);
- std::ostringstream os;
+ std::ostringstream os(std::ios_base::binary);
store.serialize(os);
std::string str = os.str();
@@ -157,7 +157,7 @@ void TestAreaStore::testSerialization()
UASSERTEQ(const std::string &, str, str_wanted);
- std::istringstream is(str);
+ std::istringstream is(str, std::ios_base::binary);
store.deserialize(is);
// deserialize() doesn't clear the store
diff --git a/src/unittest/test_compression.cpp b/src/unittest/test_compression.cpp
index dfcadd4b2..a96282f58 100644
--- a/src/unittest/test_compression.cpp
+++ b/src/unittest/test_compression.cpp
@@ -37,6 +37,7 @@ public:
void testRLECompression();
void testZlibCompression();
void testZlibLargeData();
+ void testZstdLargeData();
void testZlibLimit();
void _testZlibLimit(u32 size, u32 limit);
};
@@ -48,6 +49,7 @@ void TestCompression::runTests(IGameDef *gamedef)
TEST(testRLECompression);
TEST(testZlibCompression);
TEST(testZlibLargeData);
+ TEST(testZstdLargeData);
TEST(testZlibLimit);
}
@@ -111,7 +113,7 @@ void TestCompression::testZlibCompression()
fromdata[3]=1;
std::ostringstream os(std::ios_base::binary);
- compress(fromdata, os, SER_FMT_VER_HIGHEST_READ);
+ compressZlib(*fromdata, fromdata.getSize(), os);
std::string str_out = os.str();
@@ -124,7 +126,7 @@ void TestCompression::testZlibCompression()
std::istringstream is(str_out, std::ios_base::binary);
std::ostringstream os2(std::ios_base::binary);
- decompress(is, os2, SER_FMT_VER_HIGHEST_READ);
+ decompressZlib(is, os2);
std::string str_out2 = os2.str();
infostream << "decompress: ";
@@ -174,6 +176,42 @@ void TestCompression::testZlibLargeData()
}
}
+void TestCompression::testZstdLargeData()
+{
+ infostream << "Test: Testing zstd wrappers with a large amount "
+ "of pseudorandom data" << std::endl;
+
+ u32 size = 500000;
+ infostream << "Test: Input size of large compressZstd is "
+ << size << std::endl;
+
+ std::string data_in;
+ data_in.resize(size);
+ PseudoRandom pseudorandom(9420);
+ for (u32 i = 0; i < size; i++)
+ data_in[i] = pseudorandom.range(0, 255);
+
+ std::ostringstream os_compressed(std::ios::binary);
+ compressZstd(data_in, os_compressed, 0);
+ infostream << "Test: Output size of large compressZstd is "
+ << os_compressed.str().size()<<std::endl;
+
+ std::istringstream is_compressed(os_compressed.str(), std::ios::binary);
+ std::ostringstream os_decompressed(std::ios::binary);
+ decompressZstd(is_compressed, os_decompressed);
+ infostream << "Test: Output size of large decompressZstd is "
+ << os_decompressed.str().size() << std::endl;
+
+ std::string str_decompressed = os_decompressed.str();
+ UASSERTEQ(size_t, str_decompressed.size(), data_in.size());
+
+ for (u32 i = 0; i < size && i < str_decompressed.size(); i++) {
+ UTEST(str_decompressed[i] == data_in[i],
+ "index out[%i]=%i differs from in[%i]=%i",
+ i, str_decompressed[i], i, data_in[i]);
+ }
+}
+
void TestCompression::testZlibLimit()
{
// edge cases
diff --git a/src/unittest/test_connection.cpp b/src/unittest/test_connection.cpp
index c3aacc536..23b7e9105 100644
--- a/src/unittest/test_connection.cpp
+++ b/src/unittest/test_connection.cpp
@@ -88,7 +88,7 @@ void TestConnection::testNetworkPacketSerialize()
};
if (sizeof(wchar_t) == 2)
- warningstream << __func__ << " may fail on this platform." << std::endl;
+ warningstream << __FUNCTION__ << " may fail on this platform." << std::endl;
{
NetworkPacket pkt(123, 0);
@@ -96,7 +96,7 @@ void TestConnection::testNetworkPacketSerialize()
// serializing wide strings should do surrogate encoding, we test that here
pkt << std::wstring(L"\U00020b9a");
- SharedBuffer<u8> buf = pkt.oldForgePacket();
+ auto buf = pkt.oldForgePacket();
UASSERTEQ(int, buf.getSize(), sizeof(expected));
UASSERT(!memcmp(expected, &buf[0], buf.getSize()));
}
@@ -280,7 +280,7 @@ void TestConnection::testConnectSendReceive()
NetworkPacket pkt;
pkt.putRawPacket((u8*) "Hello World !", 14, 0);
- SharedBuffer<u8> sentdata = pkt.oldForgePacket();
+ auto sentdata = pkt.oldForgePacket();
infostream<<"** running client.Send()"<<std::endl;
client.Send(PEER_ID_SERVER, 0, &pkt, true);
@@ -295,7 +295,7 @@ void TestConnection::testConnectSendReceive()
<< ", data=" << (const char*)pkt.getU8Ptr(0)
<< std::endl;
- SharedBuffer<u8> recvdata = pkt.oldForgePacket();
+ auto recvdata = pkt.oldForgePacket();
UASSERT(memcmp(*sentdata, *recvdata, recvdata.getSize()) == 0);
}
@@ -324,13 +324,13 @@ void TestConnection::testConnectSendReceive()
infostream << "...";
infostream << std::endl;
- SharedBuffer<u8> sentdata = pkt.oldForgePacket();
+ auto sentdata = pkt.oldForgePacket();
server.Send(peer_id_client, 0, &pkt, true);
//sleep_ms(3000);
- SharedBuffer<u8> recvdata;
+ Buffer<u8> recvdata;
infostream << "** running client.Receive()" << std::endl;
session_t peer_id = 132;
u16 size = 0;
diff --git a/src/unittest/test_irrptr.cpp b/src/unittest/test_irrptr.cpp
index aa857ff46..3484f1514 100644
--- a/src/unittest/test_irrptr.cpp
+++ b/src/unittest/test_irrptr.cpp
@@ -91,6 +91,12 @@ void TestIrrPtr::testRefCounting()
obj->getReferenceCount());
}
+#if defined(__clang__)
+ #pragma GCC diagnostic push
+ #pragma GCC diagnostic ignored "-Wself-assign-overloaded"
+ #pragma GCC diagnostic ignored "-Wself-move"
+#endif
+
void TestIrrPtr::testSelfAssignment()
{
irr_ptr<IReferenceCounted> p1{new IReferenceCounted()};
@@ -129,3 +135,7 @@ void TestIrrPtr::testNullHandling()
UASSERT(!p2);
UASSERT(!p3);
}
+
+#if defined(__clang__)
+ #pragma GCC diagnostic pop
+#endif
diff --git a/src/unittest/test_map_settings_manager.cpp b/src/unittest/test_map_settings_manager.cpp
index 81ca68705..17c31fe79 100644
--- a/src/unittest/test_map_settings_manager.cpp
+++ b/src/unittest/test_map_settings_manager.cpp
@@ -148,6 +148,11 @@ void TestMapSettingsManager::testMapSettingsManager()
check_noise_params(&dummy, &script_np_factor);
}
+ // The settings manager MUST leave user settings alone
+ mgr.setMapSetting("testname", "1");
+ mgr.setMapSetting("testname", "1", true);
+ UASSERT(!Settings::getLayer(SL_GLOBAL)->exists("testname"));
+
// Now make our Params and see if the values are correctly sourced
MapgenParams *params = mgr.makeMapgenParams();
UASSERT(params->mgtype == MAPGEN_V5);
diff --git a/src/unittest/test_utilities.cpp b/src/unittest/test_utilities.cpp
index 93ba3f844..039110d54 100644
--- a/src/unittest/test_utilities.cpp
+++ b/src/unittest/test_utilities.cpp
@@ -23,6 +23,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/enriched_string.h"
#include "util/numeric.h"
#include "util/string.h"
+#include "util/base64.h"
class TestUtilities : public TestBase {
public:
@@ -56,6 +57,7 @@ public:
void testMyround();
void testStringJoin();
void testEulerConversion();
+ void testBase64();
};
static TestUtilities g_test_instance;
@@ -87,6 +89,7 @@ void TestUtilities::runTests(IGameDef *gamedef)
TEST(testMyround);
TEST(testStringJoin);
TEST(testEulerConversion);
+ TEST(testBase64);
}
////////////////////////////////////////////////////////////////////////////////
@@ -537,3 +540,93 @@ void TestUtilities::testEulerConversion()
setPitchYawRoll(m2, v2);
UASSERT(within(m1, m2, tolL));
}
+
+void TestUtilities::testBase64()
+{
+ // Test character set
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789+/") == true);
+ UASSERT(base64_is_valid("/+9876543210"
+ "zyxwvutsrqponmlkjihgfedcba"
+ "ZYXWVUTSRQPONMLKJIHGFEDCBA") == true);
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789+.") == false);
+ UASSERT(base64_is_valid("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz"
+ "0123456789 /") == false);
+
+ // Test empty string
+ UASSERT(base64_is_valid("") == true);
+
+ // Test different lengths, with and without padding,
+ // with correct and incorrect padding
+ UASSERT(base64_is_valid("A") == false);
+ UASSERT(base64_is_valid("AA") == true);
+ UASSERT(base64_is_valid("AAA") == true);
+ UASSERT(base64_is_valid("AAAA") == true);
+ UASSERT(base64_is_valid("AAAAA") == false);
+ UASSERT(base64_is_valid("AAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAAA") == true);
+ UASSERT(base64_is_valid("A===") == false);
+ UASSERT(base64_is_valid("AA==") == true);
+ UASSERT(base64_is_valid("AAA=") == true);
+ UASSERT(base64_is_valid("AAAA") == true);
+ UASSERT(base64_is_valid("AAAA====") == false);
+ UASSERT(base64_is_valid("AAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAA==") == true);
+ UASSERT(base64_is_valid("AAAAAAA=") == true);
+ UASSERT(base64_is_valid("AAAAAAA==") == false);
+ UASSERT(base64_is_valid("AAAAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAAA====") == false);
+ UASSERT(base64_is_valid("AAAAAAAA") == true);
+ UASSERT(base64_is_valid("AAAAAAAA=") == false);
+ UASSERT(base64_is_valid("AAAAAAAA==") == false);
+ UASSERT(base64_is_valid("AAAAAAAA===") == false);
+ UASSERT(base64_is_valid("AAAAAAAA====") == false);
+
+ // Test if canonical encoding
+ // Last character limitations, length % 4 == 3
+ UASSERT(base64_is_valid("AAB") == false);
+ UASSERT(base64_is_valid("AAE") == true);
+ UASSERT(base64_is_valid("AAQ") == true);
+ UASSERT(base64_is_valid("AAB=") == false);
+ UASSERT(base64_is_valid("AAE=") == true);
+ UASSERT(base64_is_valid("AAQ=") == true);
+ UASSERT(base64_is_valid("AAAAAAB=") == false);
+ UASSERT(base64_is_valid("AAAAAAE=") == true);
+ UASSERT(base64_is_valid("AAAAAAQ=") == true);
+ // Last character limitations, length % 4 == 2
+ UASSERT(base64_is_valid("AB") == false);
+ UASSERT(base64_is_valid("AE") == false);
+ UASSERT(base64_is_valid("AQ") == true);
+ UASSERT(base64_is_valid("AB==") == false);
+ UASSERT(base64_is_valid("AE==") == false);
+ UASSERT(base64_is_valid("AQ==") == true);
+ UASSERT(base64_is_valid("AAAAAB==") == false);
+ UASSERT(base64_is_valid("AAAAAE==") == false);
+ UASSERT(base64_is_valid("AAAAAQ==") == true);
+
+ // Extraneous character present
+ UASSERT(base64_is_valid(".") == false);
+ UASSERT(base64_is_valid("A.") == false);
+ UASSERT(base64_is_valid("AA.") == false);
+ UASSERT(base64_is_valid("AAA.") == false);
+ UASSERT(base64_is_valid("AAAA.") == false);
+ UASSERT(base64_is_valid("AAAAA.") == false);
+ UASSERT(base64_is_valid("A.A") == false);
+ UASSERT(base64_is_valid("AA.A") == false);
+ UASSERT(base64_is_valid("AAA.A") == false);
+ UASSERT(base64_is_valid("AAAA.A") == false);
+ UASSERT(base64_is_valid("AAAAA.A") == false);
+ UASSERT(base64_is_valid("\xE1""AAA") == false);
+
+ // Padding in wrong position
+ UASSERT(base64_is_valid("A=A") == false);
+ UASSERT(base64_is_valid("AA=A") == false);
+ UASSERT(base64_is_valid("AAA=A") == false);
+ UASSERT(base64_is_valid("AAAA=A") == false);
+ UASSERT(base64_is_valid("AAAAA=A") == false);
+} \ No newline at end of file