diff --git a/CMakeLists.txt b/CMakeLists.txt index a876c7fb..21e49c3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,36 +123,23 @@ endif() enable_testing() -file(GLOB TestCases ${CMAKE_SOURCE_DIR}/tests/*.test.txt) +file(GLOB LogTestCases ${CMAKE_SOURCE_DIR}/tests/*.test.txt) -foreach(TestCase IN ITEMS ${TestCases}) +foreach(LogTestCase IN ITEMS ${LogTestCases}) add_test( - NAME ${TestCase} + NAME ${LogTestCase} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_BINARY_DIR}/newserv replay-log ${TestCase} --config=${CMAKE_SOURCE_DIR}/tests/config.json --require-basic-credentials) + COMMAND ${CMAKE_BINARY_DIR}/newserv replay-log ${LogTestCase} --config=${CMAKE_SOURCE_DIR}/tests/config.json --require-basic-credentials) endforeach() -add_test( - NAME "compression-prs" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_SOURCE_DIR}/tests/test-compression.sh prs ${CMAKE_BINARY_DIR}/newserv) -add_test( - NAME "compression-bc0" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_SOURCE_DIR}/tests/test-compression.sh bc0 ${CMAKE_BINARY_DIR}/newserv) +file(GLOB ScriptTestCases ${CMAKE_SOURCE_DIR}/tests/*.test.sh) -add_test( - NAME "decode-vms" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_SOURCE_DIR}/tests/test-decode-vms.sh ${CMAKE_BINARY_DIR}/newserv) -add_test( - NAME "decode-gci" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_SOURCE_DIR}/tests/test-decode-gci.sh ${CMAKE_BINARY_DIR}/newserv) -add_test( - NAME "decode-pc" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - COMMAND ${CMAKE_SOURCE_DIR}/tests/test-decode-pc.sh ${CMAKE_BINARY_DIR}/newserv) +foreach(ScriptTestCase IN ITEMS ${ScriptTestCases}) + add_test( + NAME ${ScriptTestCase} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + COMMAND ${ScriptTestCase} ${CMAKE_BINARY_DIR}/newserv) +endforeach() # Installation configuration diff --git a/notes/decrypt-gci-tests.txt b/notes/decrypt-gci-tests.txt deleted file mode 100644 index 16d47fe1..00000000 --- a/notes/decrypt-gci-tests.txt +++ /dev/null @@ -1,4 +0,0 @@ -./newserv decrypt-gci-save --sys=8P-GPSE-PSO3_SYSTEM.gci 8P-GPSE-PSO3_CHARACTER.gci -./newserv decrypt-gci-save --sys=8P-GPSE-PSO3_SYSTEM.gci 8P-GPSE-PSO3_GUILDCARD.gci -./newserv decrypt-gci-save --sys=8P-GPOE-PSO_SYSTEM.gci 8P-GPOE-PSO_CHARACTER.gci -./newserv decrypt-gci-save --sys=8P-GPOE-PSO_SYSTEM.gci 8P-GPOE-PSO_GUILDCARD.gci diff --git a/src/Main.cc b/src/Main.cc index 39c3d5db..cc8bb677 100644 --- a/src/Main.cc +++ b/src/Main.cc @@ -1004,8 +1004,7 @@ int main(int argc, char** argv) { *reinterpret_cast(data.data() + data_start_offset) = decrypted; } else { const auto& s = r.get(); - auto encrypted = encrypt_fixed_size_data_section_t( - s, round1_seed); + auto encrypted = encrypt_fixed_size_data_section_t(s, round1_seed); if (data_start_offset + encrypted.size() > data.size()) { throw runtime_error("encrypted result exceeds file size"); } diff --git a/tests/compression-bc0.test.sh b/tests/compression-bc0.test.sh new file mode 100755 index 00000000..3b8a8686 --- /dev/null +++ b/tests/compression-bc0.test.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +set -e +./tests/compression.sh bc0 "$1" diff --git a/tests/compression-prs.test.sh b/tests/compression-prs.test.sh new file mode 100755 index 00000000..987b3127 --- /dev/null +++ b/tests/compression-prs.test.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +set -e +./tests/compression.sh prs "$1" diff --git a/tests/test-compression.sh b/tests/compression.sh similarity index 100% rename from tests/test-compression.sh rename to tests/compression.sh diff --git a/tests/decode-gci-quest.test.sh b/tests/decode-gci-quest.test.sh new file mode 100755 index 00000000..5fe93177 --- /dev/null +++ b/tests/decode-gci-quest.test.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +set -e + +EXECUTABLE="$1" +if [ "$EXECUTABLE" == "" ]; then + EXECUTABLE="./newserv" +fi + +DIR="tests/saves-gci-quest" + +echo "... decode $DIR/quest-ep3.gci" +$EXECUTABLE decode-gci $DIR/quest-ep3.gci +diff $DIR/quest-ep3.dec $DIR/quest-ep3.gci.dec +echo "... decode $DIR/quest-unencrypted.gci" +$EXECUTABLE decode-gci $DIR/quest-unencrypted.gci +diff $DIR/quest-unencrypted.dec $DIR/quest-unencrypted.gci.dec +echo "... decode $DIR/quest-with-key.gci" +$EXECUTABLE decode-gci $DIR/quest-with-key.gci +diff $DIR/quest-with-key.dec $DIR/quest-with-key.gci.dec +echo "... decode $DIR/quest-without-key.gci" +$EXECUTABLE decode-gci $DIR/quest-without-key.gci --seed=1705B11E +diff $DIR/quest-without-key.dec $DIR/quest-without-key.gci.dec + +echo "... clean up" +rm -f $DIR/*.gci.dec $DIR/*.gcid.hex diff --git a/tests/decode-vms-quest.test.sh b/tests/decode-vms-quest.test.sh new file mode 100755 index 00000000..c5325fcc --- /dev/null +++ b/tests/decode-vms-quest.test.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +EXECUTABLE="$1" +if [ "$EXECUTABLE" == "" ]; then + EXECUTABLE="./newserv" +fi + +DIR=tests/saves-vms-quest + +echo "... decode $DIR/lionel-v1.vms" +$EXECUTABLE decode-vms $DIR/lionel-v1.vms +diff $DIR/lionel-v1.dec $DIR/lionel-v1.vms.dec +echo "... decode $DIR/lionel-v2.vms" +$EXECUTABLE decode-vms $DIR/lionel-v2.vms --seed=D0231610 +diff $DIR/lionel-v2.dec $DIR/lionel-v2.vms.dec + +echo "... clean up" +rm $DIR/*.vms.dec diff --git a/tests/decrypt-gci-save.test.sh b/tests/decrypt-gci-save.test.sh new file mode 100755 index 00000000..b64a8470 --- /dev/null +++ b/tests/decrypt-gci-save.test.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +set -e + +EXECUTABLE="$1" +if [ "$EXECUTABLE" == "" ]; then + EXECUTABLE="./newserv" +fi + +DIR="tests/saves-gci" + +echo "... decrypt Ep1&2 charfile" +$EXECUTABLE decrypt-gci-save $DIR/8P-GPOJ-PSO_CHARACTER.gci --sys=$DIR/8P-GPOJ-PSO_SYSTEM.gci +diff $DIR/8P-GPOJ-PSO_CHARACTER-expected.gcid $DIR/8P-GPOJ-PSO_CHARACTER.gcid +echo "... decrypt Ep1&2 guildfile" +$EXECUTABLE decrypt-gci-save $DIR/8P-GPOJ-PSO_GUILDCARD.gci --sys=$DIR/8P-GPOJ-PSO_SYSTEM.gci +diff $DIR/8P-GPOJ-PSO_GUILDCARD-expected.gcid $DIR/8P-GPOJ-PSO_GUILDCARD.gcid + +echo "... decrypt Ep3 charfile" +$EXECUTABLE decrypt-gci-save $DIR/8P-GPSJ-PSO3_CHARACTER.gci --sys=$DIR/8P-GPSJ-PSO3_SYSTEM.gci +diff $DIR/8P-GPSJ-PSO3_CHARACTER-expected.gcid $DIR/8P-GPSJ-PSO3_CHARACTER.gcid +echo "... decrypt Ep3 guildfile" +$EXECUTABLE decrypt-gci-save $DIR/8P-GPSJ-PSO3_GUILDCARD.gci --sys=$DIR/8P-GPSJ-PSO3_SYSTEM.gci +diff $DIR/8P-GPSJ-PSO3_GUILDCARD-expected.gcid $DIR/8P-GPSJ-PSO3_GUILDCARD.gcid + +echo "... clean up" +rm -f $DIR/8P-GPOJ-PSO_CHARACTER.gcid $DIR/8P-GPOJ-PSO_GUILDCARD.gcid $DIR/8P-GPSJ-PSO_CHARACTER.gcid $DIR/8P-GPSJ-PSO_GUILDCARD.gcid diff --git a/tests/decrypt-pc-save.test.sh b/tests/decrypt-pc-save.test.sh new file mode 100755 index 00000000..d8712181 --- /dev/null +++ b/tests/decrypt-pc-save.test.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e + +EXECUTABLE="$1" +if [ "$EXECUTABLE" == "" ]; then + EXECUTABLE="./newserv" +fi + +DIR="tests/saves-pc" + +echo "... decrypt $DIR/pc_gud.bin" +$EXECUTABLE decrypt-pc-save $DIR/pc_gud.bin --seed=1705B11E +diff $DIR/pc_gud.dec $DIR/pc_gud.bin.dec +echo "... decrypt $DIR/pc_sys.bin" +$EXECUTABLE decrypt-pc-save $DIR/pc_sys.bin --seed=1705B11E +diff $DIR/pc_sys.dec $DIR/pc_sys.bin.dec + +echo "... clean up" +rm $DIR/pc_*.bin.dec diff --git a/tests/saves/quest-ep3.dec b/tests/saves-gci-quest/quest-ep3.dec similarity index 100% rename from tests/saves/quest-ep3.dec rename to tests/saves-gci-quest/quest-ep3.dec diff --git a/tests/saves/quest-ep3.gci b/tests/saves-gci-quest/quest-ep3.gci similarity index 100% rename from tests/saves/quest-ep3.gci rename to tests/saves-gci-quest/quest-ep3.gci diff --git a/tests/saves/quest-unencrypted.dec b/tests/saves-gci-quest/quest-unencrypted.dec similarity index 100% rename from tests/saves/quest-unencrypted.dec rename to tests/saves-gci-quest/quest-unencrypted.dec diff --git a/tests/saves/quest-unencrypted.gci b/tests/saves-gci-quest/quest-unencrypted.gci similarity index 100% rename from tests/saves/quest-unencrypted.gci rename to tests/saves-gci-quest/quest-unencrypted.gci diff --git a/tests/saves/quest-with-key.dec b/tests/saves-gci-quest/quest-with-key.dec similarity index 100% rename from tests/saves/quest-with-key.dec rename to tests/saves-gci-quest/quest-with-key.dec diff --git a/tests/saves/quest-with-key.gci b/tests/saves-gci-quest/quest-with-key.gci similarity index 100% rename from tests/saves/quest-with-key.gci rename to tests/saves-gci-quest/quest-with-key.gci diff --git a/tests/saves/quest-without-key.dec b/tests/saves-gci-quest/quest-without-key.dec similarity index 100% rename from tests/saves/quest-without-key.dec rename to tests/saves-gci-quest/quest-without-key.dec diff --git a/tests/saves/quest-without-key.gci b/tests/saves-gci-quest/quest-without-key.gci similarity index 100% rename from tests/saves/quest-without-key.gci rename to tests/saves-gci-quest/quest-without-key.gci diff --git a/tests/saves/save-charfile.gcid b/tests/saves-gci-quest/save-charfile.gcid similarity index 100% rename from tests/saves/save-charfile.gcid rename to tests/saves-gci-quest/save-charfile.gcid diff --git a/tests/saves/save-system.gci b/tests/saves-gci-quest/save-system.gci similarity index 100% rename from tests/saves/save-system.gci rename to tests/saves-gci-quest/save-system.gci diff --git a/tests/saves-gci/8P-GPOJ-PSO_CHARACTER-expected.gcid b/tests/saves-gci/8P-GPOJ-PSO_CHARACTER-expected.gcid new file mode 100755 index 00000000..3ccbc84e Binary files /dev/null and b/tests/saves-gci/8P-GPOJ-PSO_CHARACTER-expected.gcid differ diff --git a/tests/saves-gci/8P-GPOJ-PSO_CHARACTER.gci b/tests/saves-gci/8P-GPOJ-PSO_CHARACTER.gci new file mode 100644 index 00000000..3c3bae8b Binary files /dev/null and b/tests/saves-gci/8P-GPOJ-PSO_CHARACTER.gci differ diff --git a/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD-expected.gcid b/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD-expected.gcid new file mode 100755 index 00000000..f88cdbef Binary files /dev/null and b/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD-expected.gcid differ diff --git a/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD.gci b/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD.gci new file mode 100644 index 00000000..c44a1e7d Binary files /dev/null and b/tests/saves-gci/8P-GPOJ-PSO_GUILDCARD.gci differ diff --git a/tests/saves-gci/8P-GPOJ-PSO_SYSTEM.gci b/tests/saves-gci/8P-GPOJ-PSO_SYSTEM.gci new file mode 100644 index 00000000..d89b2fe6 Binary files /dev/null and b/tests/saves-gci/8P-GPOJ-PSO_SYSTEM.gci differ diff --git a/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER-expected.gcid b/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER-expected.gcid new file mode 100755 index 00000000..41a3a22f Binary files /dev/null and b/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER-expected.gcid differ diff --git a/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER.gci b/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER.gci new file mode 100644 index 00000000..dbd4db1b Binary files /dev/null and b/tests/saves-gci/8P-GPSJ-PSO3_CHARACTER.gci differ diff --git a/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD-expected.gcid b/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD-expected.gcid new file mode 100755 index 00000000..199a90d3 Binary files /dev/null and b/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD-expected.gcid differ diff --git a/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD.gci b/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD.gci new file mode 100644 index 00000000..70b92d05 Binary files /dev/null and b/tests/saves-gci/8P-GPSJ-PSO3_GUILDCARD.gci differ diff --git a/tests/saves-gci/8P-GPSJ-PSO3_SYSTEM.gci b/tests/saves-gci/8P-GPSJ-PSO3_SYSTEM.gci new file mode 100644 index 00000000..10e466cf Binary files /dev/null and b/tests/saves-gci/8P-GPSJ-PSO3_SYSTEM.gci differ diff --git a/tests/saves/pc_gud.bin b/tests/saves-pc/pc_gud.bin similarity index 100% rename from tests/saves/pc_gud.bin rename to tests/saves-pc/pc_gud.bin diff --git a/tests/saves/pc_gud.dec b/tests/saves-pc/pc_gud.dec similarity index 100% rename from tests/saves/pc_gud.dec rename to tests/saves-pc/pc_gud.dec diff --git a/tests/saves/pc_sys.bin b/tests/saves-pc/pc_sys.bin similarity index 100% rename from tests/saves/pc_sys.bin rename to tests/saves-pc/pc_sys.bin diff --git a/tests/saves/pc_sys.dec b/tests/saves-pc/pc_sys.dec similarity index 100% rename from tests/saves/pc_sys.dec rename to tests/saves-pc/pc_sys.dec diff --git a/tests/saves/lionel-v1.dec b/tests/saves-vms-quest/lionel-v1.dec similarity index 100% rename from tests/saves/lionel-v1.dec rename to tests/saves-vms-quest/lionel-v1.dec diff --git a/tests/saves/lionel-v1.vms b/tests/saves-vms-quest/lionel-v1.vms similarity index 100% rename from tests/saves/lionel-v1.vms rename to tests/saves-vms-quest/lionel-v1.vms diff --git a/tests/saves/lionel-v2.dec b/tests/saves-vms-quest/lionel-v2.dec similarity index 100% rename from tests/saves/lionel-v2.dec rename to tests/saves-vms-quest/lionel-v2.dec diff --git a/tests/saves/lionel-v2.vms b/tests/saves-vms-quest/lionel-v2.vms similarity index 100% rename from tests/saves/lionel-v2.vms rename to tests/saves-vms-quest/lionel-v2.vms diff --git a/tests/test-decode-gci.sh b/tests/test-decode-gci.sh deleted file mode 100755 index a01666b5..00000000 --- a/tests/test-decode-gci.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh - -set -e - -EXECUTABLE="$1" -if [ "$EXECUTABLE" == "" ]; then - EXECUTABLE="./newserv" -fi - -echo "... decode saves/quest-ep3.gci" -$EXECUTABLE decode-gci tests/saves/quest-ep3.gci -diff tests/saves/quest-ep3.dec tests/saves/quest-ep3.gci.dec -echo "... decode saves/quest-unencrypted.gci" -$EXECUTABLE decode-gci tests/saves/quest-unencrypted.gci -diff tests/saves/quest-unencrypted.dec tests/saves/quest-unencrypted.gci.dec -echo "... decode saves/quest-with-key.gci" -$EXECUTABLE decode-gci tests/saves/quest-with-key.gci -diff tests/saves/quest-with-key.dec tests/saves/quest-with-key.gci.dec -echo "... decode saves/quest-without-key.gci" -$EXECUTABLE decode-gci tests/saves/quest-without-key.gci --seed=1705B11E -diff tests/saves/quest-without-key.dec tests/saves/quest-without-key.gci.dec - -echo "... re-encrypt saves/save-charfile.gci" -$EXECUTABLE encrypt-gci-save --sys=tests/saves/save-system.gci tests/saves/save-charfile.gcid tests/saves/save-charfile.gci -$EXECUTABLE decrypt-gci-save --sys=tests/saves/save-system.gci tests/saves/save-charfile.gci tests/saves/save-charfile-redec.gcid -hexdump -vC tests/saves/save-charfile.gcid > tests/saves/save-charfile.gcid.hex -hexdump -vC tests/saves/save-charfile-redec.gcid > tests/saves/save-charfile-redec.gcid.hex -# There should be differences on two lines: the checksum and the round2 seed -NUM_DIFF_LINES=$(diff -y --suppress-common-lines tests/saves/save-charfile.gcid.hex tests/saves/save-charfile-redec.gcid.hex | wc -l) -if [[ $NUM_DIFF_LINES -ne 2 ]]; then - diff -U3 tests/saves/save-charfile.gcid.hex tests/saves/save-charfile-redec.gcid.hex - exit 1 -fi - -echo "... clean up" -rm tests/saves/*.gci.dec tests/saves/save-charfile.gci tests/saves/save-charfile-redec.gcid tests/saves/*.gcid.hex diff --git a/tests/test-decode-pc.sh b/tests/test-decode-pc.sh deleted file mode 100755 index 58da3617..00000000 --- a/tests/test-decode-pc.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -set -e - -EXECUTABLE="$1" -if [ "$EXECUTABLE" == "" ]; then - EXECUTABLE="./newserv" -fi - -echo "... decrypt saves/pc_gud.bin" -$EXECUTABLE decrypt-pc-save tests/saves/pc_gud.bin --seed=1705B11E -diff tests/saves/pc_gud.dec tests/saves/pc_gud.bin.dec -echo "... decrypt saves/pc_sys.bin" -$EXECUTABLE decrypt-pc-save tests/saves/pc_sys.bin --seed=1705B11E -diff tests/saves/pc_sys.dec tests/saves/pc_sys.bin.dec - -echo "... clean up" -rm tests/saves/pc_*.bin.dec diff --git a/tests/test-decode-vms.sh b/tests/test-decode-vms.sh deleted file mode 100755 index 27c9394e..00000000 --- a/tests/test-decode-vms.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -set -e - -EXECUTABLE="$1" -if [ "$EXECUTABLE" == "" ]; then - EXECUTABLE="./newserv" -fi - -echo "... decode saves/lionel-v1.vms" -$EXECUTABLE decode-vms tests/saves/lionel-v1.vms -diff tests/saves/lionel-v1.dec tests/saves/lionel-v1.vms.dec -echo "... decode saves/lionel-v2.vms" -$EXECUTABLE decode-vms tests/saves/lionel-v2.vms --seed=D0231610 -diff tests/saves/lionel-v2.dec tests/saves/lionel-v2.vms.dec - -echo "... clean up" -rm tests/saves/*.vms.dec