diff options
author | SmallJoker <SmallJoker@users.noreply.github.com> | 2019-08-24 19:07:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-24 19:07:38 +0200 |
commit | 0b4f424f414380b7a46270e1389e8aa0524d8fba (patch) | |
tree | 5731cbe72bb3178d697b3cda43b838f26ba34f7d /src/unittest | |
parent | 008b80fe1ca9d46610b8971e2ac92fb56da8e69f (diff) | |
download | minetest-0b4f424f414380b7a46270e1389e8aa0524d8fba.tar.gz minetest-0b4f424f414380b7a46270e1389e8aa0524d8fba.tar.bz2 minetest-0b4f424f414380b7a46270e1389e8aa0524d8fba.zip |
Inventory: Send dirty lists where appropriate (#8742)
This change reduces the amount of sent data towards clients. Inventory lists that are already known to the player are skipped, saving quite some data over time.
Raises protocol version to 38 to ensure correct backwards-compatible code.
Diffstat (limited to 'src/unittest')
-rw-r--r-- | src/unittest/test_inventory.cpp | 89 | ||||
-rw-r--r-- | src/unittest/test_servermodmanager.cpp | 5 | ||||
-rw-r--r-- | src/unittest/test_world/do_not_remove.txt | 0 | ||||
-rw-r--r-- | src/unittest/test_world/world.mt | 1 |
4 files changed, 41 insertions, 54 deletions
diff --git a/src/unittest/test_inventory.cpp b/src/unittest/test_inventory.cpp index 1a783afae..5f71636c4 100644 --- a/src/unittest/test_inventory.cpp +++ b/src/unittest/test_inventory.cpp @@ -33,8 +33,9 @@ public: void testSerializeDeserialize(IItemDefManager *idef); - static const char *serialized_inventory; - static const char *serialized_inventory_2; + static const char *serialized_inventory_in; + static const char *serialized_inventory_out; + static const char *serialized_inventory_inc; }; static TestInventory g_test_instance; @@ -49,7 +50,7 @@ void TestInventory::runTests(IGameDef *gamedef) void TestInventory::testSerializeDeserialize(IItemDefManager *idef) { Inventory inv(idef); - std::istringstream is(serialized_inventory, std::ios::binary); + std::istringstream is(serialized_inventory_in, std::ios::binary); inv.deSerialize(is); UASSERT(inv.getList("0")); @@ -62,82 +63,64 @@ void TestInventory::testSerializeDeserialize(IItemDefManager *idef) inv.getList("main")->setWidth(5); std::ostringstream inv_os(std::ios::binary); - inv.serialize(inv_os); - UASSERTEQ(std::string, inv_os.str(), serialized_inventory_2); + inv.serialize(inv_os, false); + UASSERTEQ(std::string, inv_os.str(), serialized_inventory_out); + + inv.setModified(false); + inv_os.str(""); + inv_os.clear(); + inv.serialize(inv_os, true); + UASSERTEQ(std::string, inv_os.str(), serialized_inventory_inc); + + ItemStack leftover = inv.getList("main")->takeItem(7, 99 - 12); + ItemStack wanted = ItemStack("default:dirt", 99 - 12, 0, idef); + UASSERT(leftover == wanted); + leftover = inv.getList("main")->getItem(7); + wanted.count = 12; + UASSERT(leftover == wanted); } -const char *TestInventory::serialized_inventory = - "List 0 32\n" +const char *TestInventory::serialized_inventory_in = + "List 0 10\n" "Width 3\n" "Empty\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:cobble 61\n" "Empty\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:dirt 71\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:dirt 99\n" "Item default:cobble 38\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" + "EndInventoryList\n" + "List abc 1\n" + "Item default:stick 3\n" + "Width 0\n" "EndInventoryList\n" "EndInventory\n"; -const char *TestInventory::serialized_inventory_2 = - "List main 32\n" +const char *TestInventory::serialized_inventory_out = + "List main 10\n" "Width 5\n" "Empty\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:cobble 61\n" "Empty\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:dirt 71\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "Item default:dirt 99\n" "Item default:cobble 38\n" "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" - "Empty\n" "EndInventoryList\n" + "List abc 1\n" + "Width 0\n" + "Item default:stick 3\n" + "EndInventoryList\n" + "EndInventory\n"; + +const char *TestInventory::serialized_inventory_inc = + "KeepList main\n" + "KeepList abc\n" "EndInventory\n"; diff --git a/src/unittest/test_servermodmanager.cpp b/src/unittest/test_servermodmanager.cpp index 72ac7c6bf..0757323f4 100644 --- a/src/unittest/test_servermodmanager.cpp +++ b/src/unittest/test_servermodmanager.cpp @@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "test.h" #include <algorithm> #include "server/mods.h" +#include "settings.h" #include "test_config.h" class TestServerModManager : public TestBase @@ -85,6 +86,10 @@ void TestServerModManager::runTests(IGameDef *gamedef) void TestServerModManager::testCreation() { + std::string path = std::string(TEST_WORLDDIR) + DIR_DELIM + "world.mt"; + Settings world_config; + world_config.set("gameid", "minimal"); + UASSERTEQ(bool, world_config.updateConfigFile(path.c_str()), true); ServerModManager sm(TEST_WORLDDIR); } diff --git a/src/unittest/test_world/do_not_remove.txt b/src/unittest/test_world/do_not_remove.txt new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/src/unittest/test_world/do_not_remove.txt diff --git a/src/unittest/test_world/world.mt b/src/unittest/test_world/world.mt deleted file mode 100644 index ab9b5413a..000000000 --- a/src/unittest/test_world/world.mt +++ /dev/null @@ -1 +0,0 @@ -gameid = minimal |