mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 05:27:19 +00:00
7b819d508b
commitf4311e593f
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Nov 16 22:16:50 2024 -0600 temp fix for MSVC debug builds commit0e81c69de8
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Nov 16 21:11:04 2024 -0600 CMakePresets indentation commitd7aa52a0fc
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Nov 16 21:03:37 2024 -0600 use DLU_CONFIG_DIR envvar commitd1bfe9f15d
Merge:6e781da2
de3fe931
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Nov 16 20:24:05 2024 -0600 Merge branch 'main' into MSVCCompilerFlags commit6e781da2e7
Merge:6ccd72c6
3a6123fe
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Apr 13 18:15:16 2024 -0500 Merge remote-tracking branch 'upstream/main' into MSVCCompilerFlags commit6ccd72c6a9
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Apr 13 17:48:58 2024 -0500 add RelWithDebInfo presets and move -Werror flag into presets.json commitb96cfd71a4
Merge:c4adcee8
1ee45639
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Apr 9 01:47:17 2024 -0500 Merge remote-tracking branch 'upstream/main' into MSVCCompilerFlags commitc4adcee8e8
Merge:7f9fcb5b
28ce8ac5
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 22:30:35 2024 -0500 Merge remote-tracking branch 'upstream/main' into MSVCCompilerFlags commit7f9fcb5b75
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 22:10:01 2024 -0500 change gnu and clang build directories to enable consistent artifact generation commit553740e8a0
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 21:38:34 2024 -0500 update build presets commit39a8029fda
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 20:30:06 2024 -0500 update github actions commit7eae64f8a6
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 20:18:46 2024 -0500 disable /WX on MSVC commit24d3bc0ce6
Author: jadebenn <jonahbenn@yahoo.com> Date: Mon Apr 8 20:11:59 2024 -0500 altered cmake configuration scripts commit368f4ccabf
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Apr 6 23:00:04 2024 -0500 change defaults commit7d7ea68bf9
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 22:23:32 2024 -0500 fix preset commit57d0b12f9b
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Apr 6 21:50:32 2024 -0500 expand cmake presets commitaa62d357bb
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 20:50:26 2024 -0500 rename gcc to gnu commitd6e4edd886
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 20:27:20 2024 -0500 change runtime output dir commitabe413f239
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 20:22:47 2024 -0500 debug try 2 commitc6c771b892
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 20:16:00 2024 -0500 add debug messages (again) commit6c6966afd2
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 19:46:58 2024 -0500 was not actually fixed commitfab74c90b6
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 19:37:02 2024 -0500 are these messages actually somehow fixing the issue? commita4b6b7c0d9
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 19:27:34 2024 -0500 see if this re-breaks mac commit07626f8ebb
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 19:04:59 2024 -0500 back to debug messages commitbdf9adc0e8
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:55 2024 -0500 Revert "try disabling an apple-specific build rule" This reverts commit45ec66e976
. commit8154207848
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:53 2024 -0500 Revert "more fiddling with mac test builds" This reverts commit0f843c02c9
. commit8f5c10d158
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:52 2024 -0500 Revert "try and narrow down the macos build failure cause" This reverts commit5fd86833fa
. commit54876bf886
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:50 2024 -0500 Revert "try stripping out all the custom macos test logic again" This reverts commitcc15a26ce8
. commit8af35727a6
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:48 2024 -0500 Revert "I'm really just throwing everything to the wall and seeing what sticks" This reverts commit1a05b027fe
. commite143f22ada
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:46 2024 -0500 Revert "more macos tinkering" This reverts commit829ec35b57
. commit495e70c376
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:44 2024 -0500 Revert "implib" This reverts commitd41349d6ed
. commit37dbb52104
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:42 2024 -0500 Revert "try manual link directory specification" This reverts commit0c2d40632e
. commitce568189fc
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:40 2024 -0500 Revert "save me" This reverts commitbd73aa21a9
. commitc420a72016
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:36 2024 -0500 Revert "aaaaaaaaa" This reverts commit338279c396
. commitdccac945bb
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:47:08 2024 -0500 Revert "paths paths paths" This reverts commit9a7d86aa6c
. commit9a7d86aa6c
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:39:08 2024 -0500 paths paths paths commit338279c396
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:29:01 2024 -0500 aaaaaaaaa commitbd73aa21a9
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:21:16 2024 -0500 save me commit0c2d40632e
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 18:09:03 2024 -0500 try manual link directory specification commitd41349d6ed
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 17:52:20 2024 -0500 implib commit829ec35b57
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 17:43:47 2024 -0500 more macos tinkering commit1a05b027fe
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 17:18:41 2024 -0500 I'm really just throwing everything to the wall and seeing what sticks commitcc15a26ce8
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 17:09:45 2024 -0500 try stripping out all the custom macos test logic again commit5fd86833fa
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 16:54:53 2024 -0500 try and narrow down the macos build failure cause commit0f843c02c9
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 16:47:19 2024 -0500 more fiddling with mac test builds commit45ec66e976
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 16:29:29 2024 -0500 try disabling an apple-specific build rule commit6e41423dc3
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 04:01:07 2024 -0500 one last MacOS try for the night commitbc79a17ddb
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 03:50:41 2024 -0500 try fixing macos build commitd6031ce9f5
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 03:04:52 2024 -0500 try zero-initializinng this struct to solve docker issue commit24cbd94a80
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Apr 6 02:34:36 2024 -0500 attempted docker fix commit7812f27330
Merge:ef8029d4
18c27b14
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Fri Apr 5 23:32:29 2024 -0500 Merge branch 'main' into MSVCCompilerFlags commitef8029d46f
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Fri Apr 5 23:30:26 2024 -0500 update cmake configs commit04a7bc2b8d
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 21:00:23 2024 -0500 edit build script commit9fc6b4e973
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 18:10:09 2024 -0500 fix build directory issue commita19afaaab0
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 18:06:37 2024 -0500 update .gitignore commit426d34a0aa
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 17:58:19 2024 -0500 unexclude toolchain dir commit9ce7d9043c
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 17:55:02 2024 -0500 updated cmake workflows commitdb5c10c331
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 16:58:00 2024 -0500 temporarily remove macos build for testing purposes commitf7da00ff89
Merge:145f97cf
661e0939
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 16:51:39 2024 -0500 Merge branch 'MSVCCompilerFlags' of https://github.com/jadebenn/DarkflameServer into MSVCCompilerFlags commit145f97cfdc
Author: jadebenn <jonahbenn@yahoo.com> Date: Fri Apr 5 16:50:39 2024 -0500 build reorganization and experimental clang support commit661e0939b7
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Wed Apr 3 22:13:11 2024 -0500 fix typo in windows preset commit018e5707d7
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 20:30:33 2024 -0500 try using compiler flags for mac instead commit81e5f059d5
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 20:20:31 2024 -0500 macos refuses to work :( commita3d70197f2
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 20:13:37 2024 -0500 try adding build types back to mac commit005d439a4a
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 19:58:44 2024 -0500 edit macos presets commitbba825f0c8
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 19:48:20 2024 -0500 update CMake presets commit199c8224a5
Merge:1116ba83
c1c5db65
Author: jadebenn <jonahbenn@yahoo.com> Date: Wed Apr 3 19:00:39 2024 -0500 Merge remote-tracking branch 'upstream/main' into MSVCCompilerFlags commit1116ba8306
Merge:9316bd6e
c7b3d9e8
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sun Feb 11 21:03:02 2024 -0600 Merge branch 'DarkflameUniverse:main' into MSVCCompilerFlags commit9316bd6eeb
Merge:62fb8ad0
29666a1f
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Feb 10 21:02:52 2024 -0600 Merge branch 'DarkflameUniverse:main' into MSVCCompilerFlags commit62fb8ad071
Merge:d5089b72
24f94edf
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Thu Feb 8 21:41:50 2024 -0600 Merge branch 'DarkflameUniverse:main' into MSVCCompilerFlags commitd5089b72cc
Author: jadebenn <jonahbenn@yahoo.com> Date: Sun Feb 4 16:26:38 2024 -0600 add Linux debug preset commit7c9f56ff76
Author: jadebenn <jonahbenn@yahoo.com> Date: Sat Feb 3 16:02:53 2024 -0600 move out g++ O2 flag commit6cc99fae42
Merge:96276391
050184c5
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Sat Feb 3 02:41:43 2024 -0600 Merge branch 'DarkflameUniverse:main' into MSVCCompilerFlags commit962763916d
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 22:00:49 2024 -0600 export the compile commands so I can see if they're having any effect commit4b7d1d6593
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 21:49:24 2024 -0600 trying 'init' flags instead commit3fa80063e9
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 21:13:47 2024 -0600 ONE MORE TIME commitae2115c68d
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 20:52:33 2024 -0600 final(?) try for now commit119937f5d9
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 20:34:44 2024 -0600 ditto commitab39754597
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 20:34:41 2024 -0600 testing if these even have any effect commite7058be3dc
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 20:28:05 2024 -0600 third test commit10d7776fb2
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 19:33:59 2024 -0600 trying more variations on the flags commit70f3756098
Author: jadebenn <jonahbenn@yahoo.com> Date: Tue Jan 30 18:49:46 2024 -0600 testing commit9b7c593ae9
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Tue Jan 30 08:49:53 2024 -0600 Update CMakePresets.json commit8a34544d0e
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Tue Jan 30 08:44:29 2024 -0600 test moving flags to json commitb682f13fa9
Merge:2239507d
d78b5087
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Mon Jan 29 22:49:29 2024 -0600 Merge branch 'DarkflameUniverse:main' into MSVCCompilerFlags commit2239507d3c
Author: jadebenn <jadebenn@users.noreply.github.com> Date: Mon Jan 29 06:14:47 2024 -0600 Add MSVC optimization flags
440 lines
12 KiB
C++
440 lines
12 KiB
C++
#include <fstream>
|
|
#include <memory>
|
|
#include <gtest/gtest.h>
|
|
|
|
#include "AMFDeserialize.h"
|
|
#include "Amf3.h"
|
|
|
|
#include "Game.h"
|
|
#include "Logger.h"
|
|
|
|
/**
|
|
* Helper method that all tests use to get their respective AMF.
|
|
*/
|
|
std::unique_ptr<AMFBaseValue> ReadFromBitStream(RakNet::BitStream& bitStream) {
|
|
AMFDeserialize deserializer;
|
|
AMFBaseValue* returnValue(deserializer.Read(bitStream));
|
|
return std::unique_ptr<AMFBaseValue>{ returnValue };
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFUndefined value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFUndefinedTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x00);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Undefined);
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFNull value from a BitStream.
|
|
*
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFNullTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x01);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Null);
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFFalse value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFFalseTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x02);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::False);
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFTrue value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFTrueTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x03);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::True);
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFInteger value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFIntegerTest) {
|
|
CBITSTREAM;
|
|
{
|
|
bitStream.Write<uint8_t>(0x04);
|
|
// 127 == 01111111
|
|
bitStream.Write<uint8_t>(127);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Integer);
|
|
// Check that the max value of a byte can be read correctly
|
|
ASSERT_EQ(static_cast<AMFIntValue*>(res.get())->GetValue(), 127);
|
|
}
|
|
bitStream.Reset();
|
|
{
|
|
bitStream.Write<uint8_t>(0x04);
|
|
bitStream.Write<uint32_t>(UINT32_MAX);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Integer);
|
|
// Check that we can read the maximum value correctly
|
|
ASSERT_EQ(static_cast<AMFIntValue*>(res.get())->GetValue(), 536870911);
|
|
}
|
|
bitStream.Reset();
|
|
{
|
|
bitStream.Write<uint8_t>(0x04);
|
|
// 131 == 10000011
|
|
bitStream.Write<uint8_t>(131);
|
|
// 255 == 11111111
|
|
bitStream.Write<uint8_t>(255);
|
|
// 127 == 01111111
|
|
bitStream.Write<uint8_t>(127);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Integer);
|
|
// Check that short max can be read correctly
|
|
ASSERT_EQ(static_cast<AMFIntValue*>(res.get())->GetValue(), UINT16_MAX);
|
|
}
|
|
bitStream.Reset();
|
|
{
|
|
bitStream.Write<uint8_t>(0x04);
|
|
// 255 == 11111111
|
|
bitStream.Write<uint8_t>(255);
|
|
// 127 == 01111111
|
|
bitStream.Write<uint8_t>(127);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Integer);
|
|
// Check that 2 byte max can be read correctly
|
|
ASSERT_EQ(static_cast<AMFIntValue*>(res.get())->GetValue(), 16383);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFDouble value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFDoubleTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x05);
|
|
bitStream.Write<double>(25346.4f);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Double);
|
|
ASSERT_EQ(static_cast<AMFDoubleValue*>(res.get())->GetValue(), 25346.4f);
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFString value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFStringTest) {
|
|
CBITSTREAM;
|
|
bitStream.Write<uint8_t>(0x06);
|
|
bitStream.Write<uint8_t>(0x0F);
|
|
std::string toWrite = "stateID";
|
|
for (auto e : toWrite) bitStream.Write<char>(e);
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::String);
|
|
ASSERT_EQ(static_cast<AMFStringValue*>(res.get())->GetValue(), "stateID");
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading an AMFArray value from a BitStream.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeAMFArrayTest) {
|
|
CBITSTREAM;
|
|
// Test empty AMFArray
|
|
bitStream.Write<uint8_t>(0x09);
|
|
bitStream.Write<uint8_t>(0x01);
|
|
bitStream.Write<uint8_t>(0x01);
|
|
{
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Array);
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->GetAssociative().size(), 0);
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->GetDense().size(), 0);
|
|
}
|
|
bitStream.Reset();
|
|
// Test a key'd value and dense value
|
|
bitStream.Write<uint8_t>(0x09);
|
|
bitStream.Write<uint8_t>(0x03);
|
|
bitStream.Write<uint8_t>(0x15);
|
|
for (auto e : "BehaviorID") if (e != '\0') bitStream.Write<char>(e);
|
|
bitStream.Write<uint8_t>(0x06);
|
|
bitStream.Write<uint8_t>(0x0B);
|
|
for (auto e : "10447") if (e != '\0') bitStream.Write<char>(e);
|
|
bitStream.Write<uint8_t>(0x01);
|
|
bitStream.Write<uint8_t>(0x06);
|
|
bitStream.Write<uint8_t>(0x0B);
|
|
for (auto e : "10447") if (e != '\0') bitStream.Write<char>(e);
|
|
{
|
|
std::unique_ptr<AMFBaseValue> res{ ReadFromBitStream(bitStream) };
|
|
ASSERT_EQ(res->GetValueType(), eAmf::Array);
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->GetAssociative().size(), 1);
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->GetDense().size(), 1);
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->Get<std::string>("BehaviorID")->GetValue(), "10447");
|
|
ASSERT_EQ(static_cast<AMFArrayValue*>(res.get())->Get<std::string>(0)->GetValue(), "10447");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief This test checks that if we recieve an unimplemented eAmf
|
|
* we correctly throw an error and can actch it.
|
|
* Yes this leaks memory.
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeUnimplementedValuesTest) {
|
|
std::vector<eAmf> unimplementedValues = {
|
|
eAmf::XMLDoc,
|
|
eAmf::Date,
|
|
eAmf::Object,
|
|
eAmf::XML,
|
|
eAmf::ByteArray,
|
|
eAmf::VectorInt,
|
|
eAmf::VectorUInt,
|
|
eAmf::VectorDouble,
|
|
eAmf::VectorObject,
|
|
eAmf::Dictionary
|
|
};
|
|
// Run unimplemented tests to check that errors are thrown if
|
|
// unimplemented AMF values are attempted to be parsed.
|
|
std::ifstream fileStream;
|
|
fileStream.open("AMFBitStreamUnimplementedTest.bin", std::ios::binary);
|
|
|
|
// Read a test BitStream from a file
|
|
std::vector<char> baseBitStream;
|
|
char byte = 0;
|
|
while (fileStream.get(byte)) {
|
|
baseBitStream.push_back(byte);
|
|
}
|
|
|
|
fileStream.close();
|
|
|
|
for (auto value : unimplementedValues) {
|
|
RakNet::BitStream testBitStream;
|
|
for (auto element : baseBitStream) {
|
|
testBitStream.Write(element);
|
|
}
|
|
testBitStream.Write(value);
|
|
bool caughtException = false;
|
|
try {
|
|
ReadFromBitStream(testBitStream);
|
|
} catch (eAmf unimplementedValueType) {
|
|
caughtException = true;
|
|
}
|
|
|
|
ASSERT_EQ(caughtException, true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Test reading a packet capture from live from a BitStream
|
|
*/
|
|
TEST(dCommonTests, AMFDeserializeLivePacketTest) {
|
|
std::ifstream testFileStream;
|
|
testFileStream.open("AMFBitStreamTest.bin", std::ios::binary);
|
|
|
|
// Read a test BitStream from a file
|
|
RakNet::BitStream testBitStream;
|
|
char byte = 0;
|
|
while (testFileStream.get(byte)) {
|
|
testBitStream.Write<char>(byte);
|
|
}
|
|
|
|
testFileStream.close();
|
|
|
|
std::unique_ptr<AMFBaseValue> resultFromFn{ ReadFromBitStream(testBitStream) };
|
|
auto* result = static_cast<AMFArrayValue*>(resultFromFn.get());
|
|
// Test the outermost array
|
|
|
|
ASSERT_EQ(result->Get<std::string>("BehaviorID")->GetValue(), "10447");
|
|
ASSERT_EQ(result->Get<std::string>("objectID")->GetValue(), "288300744895913279");
|
|
|
|
// Test the execution state array
|
|
auto* executionState = result->GetArray("executionState");
|
|
|
|
ASSERT_NE(executionState, nullptr);
|
|
|
|
auto& strips = executionState->GetArray("strips")->GetDense();
|
|
|
|
ASSERT_EQ(strips.size(), 1);
|
|
|
|
auto* stripsPosition0 = dynamic_cast<AMFArrayValue*>(strips[0]);
|
|
|
|
auto* actionIndex = stripsPosition0->Get<double>("actionIndex");
|
|
|
|
ASSERT_EQ(actionIndex->GetValue(), 0.0f);
|
|
|
|
auto* stripIdExecution = stripsPosition0->Get<double>("id");
|
|
|
|
ASSERT_EQ(stripIdExecution->GetValue(), 0.0f);
|
|
|
|
auto* stateIdExecution = executionState->Get<double>("stateID");
|
|
|
|
ASSERT_EQ(stateIdExecution->GetValue(), 0.0f);
|
|
|
|
auto& states = result->GetArray("states")->GetDense();
|
|
|
|
ASSERT_EQ(states.size(), 1);
|
|
|
|
auto* firstState = dynamic_cast<AMFArrayValue*>(states[0]);
|
|
|
|
auto* stateID = firstState->Get<double>("id");
|
|
|
|
ASSERT_EQ(stateID->GetValue(), 0.0f);
|
|
|
|
auto& stripsInState = firstState->GetArray("strips")->GetDense();
|
|
|
|
ASSERT_EQ(stripsInState.size(), 1);
|
|
|
|
auto* firstStrip = dynamic_cast<AMFArrayValue*>(stripsInState[0]);
|
|
|
|
auto& actionsInFirstStrip = firstStrip->GetArray("actions")->GetDense();
|
|
|
|
ASSERT_EQ(actionsInFirstStrip.size(), 3);
|
|
|
|
auto* actionID = firstStrip->Get<double>("id");
|
|
|
|
ASSERT_EQ(actionID->GetValue(), 0.0f);
|
|
|
|
auto* uiArray = firstStrip->GetArray("ui");
|
|
|
|
auto* xPos = uiArray->Get<double>("x");
|
|
auto* yPos = uiArray->Get<double>("y");
|
|
|
|
ASSERT_EQ(xPos->GetValue(), 103.0f);
|
|
ASSERT_EQ(yPos->GetValue(), 82.0f);
|
|
|
|
auto* stripId = firstStrip->Get<double>("id");
|
|
|
|
ASSERT_EQ(stripId->GetValue(), 0.0f);
|
|
|
|
auto* firstAction = dynamic_cast<AMFArrayValue*>(actionsInFirstStrip[0]);
|
|
|
|
auto* firstType = firstAction->Get<std::string>("Type");
|
|
|
|
ASSERT_EQ(firstType->GetValue(), "OnInteract");
|
|
|
|
auto* firstCallback = firstAction->Get<std::string>("__callbackID__");
|
|
|
|
ASSERT_EQ(firstCallback->GetValue(), "");
|
|
|
|
auto* secondAction = dynamic_cast<AMFArrayValue*>(actionsInFirstStrip[1]);
|
|
|
|
auto* secondType = secondAction->Get<std::string>("Type");
|
|
|
|
ASSERT_EQ(secondType->GetValue(), "FlyUp");
|
|
|
|
auto* secondCallback = secondAction->Get<std::string>("__callbackID__");
|
|
|
|
ASSERT_EQ(secondCallback->GetValue(), "");
|
|
|
|
auto* secondDistance = secondAction->Get<double>("Distance");
|
|
|
|
ASSERT_EQ(secondDistance->GetValue(), 25.0f);
|
|
|
|
auto* thirdAction = dynamic_cast<AMFArrayValue*>(actionsInFirstStrip[2]);
|
|
|
|
auto* thirdType = thirdAction->Get<std::string>("Type");
|
|
|
|
ASSERT_EQ(thirdType->GetValue(), "FlyDown");
|
|
|
|
auto* thirdCallback = thirdAction->Get<std::string>("__callbackID__");
|
|
|
|
ASSERT_EQ(thirdCallback->GetValue(), "");
|
|
|
|
auto* thirdDistance = thirdAction->Get<double>("Distance");
|
|
|
|
ASSERT_EQ(thirdDistance->GetValue(), 25.0f);
|
|
}
|
|
|
|
TEST(dCommonTests, AMFBadConversionTest) {
|
|
std::ifstream testFileStream;
|
|
testFileStream.open("AMFBitStreamTest.bin", std::ios::binary);
|
|
|
|
// Read a test BitStream from a file
|
|
RakNet::BitStream testBitStream;
|
|
char byte = 0;
|
|
while (testFileStream.get(byte)) {
|
|
testBitStream.Write<char>(byte);
|
|
}
|
|
|
|
testFileStream.close();
|
|
|
|
std::unique_ptr<AMFBaseValue> resultFromFn(ReadFromBitStream(testBitStream));
|
|
auto result = static_cast<AMFArrayValue*>(resultFromFn.get());
|
|
|
|
// Actually a string value.
|
|
ASSERT_EQ(result->Get<double>("BehaviorID"), nullptr);
|
|
|
|
// Does not exist in the associative portion
|
|
ASSERT_EQ(result->Get<std::nullptr_t>("DOES_NOT_EXIST"), nullptr);
|
|
|
|
result->Push(true);
|
|
|
|
// Exists and is correct type
|
|
ASSERT_NE(result->Get<bool>(0), nullptr);
|
|
|
|
// Value exists but is wrong typing
|
|
ASSERT_EQ(result->Get<std::string>(0), nullptr);
|
|
|
|
// Value is out of bounds
|
|
ASSERT_EQ(result->Get<bool>(1), nullptr);
|
|
}
|
|
|
|
/**
|
|
* Below is the AMF that is in the AMFBitStreamTest.bin file that we are reading in
|
|
* from a bitstream to test.
|
|
args: amf3!
|
|
{
|
|
"objectID": "288300744895913279",
|
|
"BehaviorID": "10447",
|
|
"executionState": amf3!
|
|
{
|
|
"strips": amf3!
|
|
[
|
|
amf3!
|
|
{
|
|
"actionIndex": 0.0,
|
|
"id": 0.0,
|
|
},
|
|
],
|
|
"stateID": 0.0,
|
|
},
|
|
"states": amf3!
|
|
[
|
|
amf3!
|
|
{
|
|
"id": 0.0,
|
|
"strips": amf3!
|
|
[
|
|
amf3!
|
|
{
|
|
"actions": amf3!
|
|
[
|
|
amf3!
|
|
{
|
|
"Type": "OnInteract",
|
|
"__callbackID__": "",
|
|
},
|
|
amf3!
|
|
{
|
|
"Distance": 25.0,
|
|
"Type": "FlyUp",
|
|
"__callbackID__": "",
|
|
},
|
|
amf3!
|
|
{
|
|
"Distance": 25.0,
|
|
"Type": "FlyDown",
|
|
"__callbackID__": "",
|
|
},
|
|
],
|
|
"id": 0.0,
|
|
"ui": amf3!
|
|
{
|
|
"x": 103.0,
|
|
"y": 82.0,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
],
|
|
}
|
|
*/
|