diff --git a/src/kernel/save.test.c b/src/kernel/save.test.c index 7e68079f2..73fcb10a7 100644 --- a/src/kernel/save.test.c +++ b/src/kernel/save.test.c @@ -5,9 +5,12 @@ #include "unit.h" #include "faction.h" #include "version.h" +#include #include #include +#include + #include static void test_readwrite_data(CuTest * tc) @@ -42,6 +45,8 @@ static void test_readwrite_unit(CuTest * tc) sprintf(path, "%s/%s", datapath(), filename); data = gamedata_open(path, "wb"); + CuAssertPtrNotNull(tc, data); + write_unit(data, u); gamedata_close(data); @@ -49,6 +54,7 @@ static void test_readwrite_unit(CuTest * tc) f = test_create_faction(0); renumber_faction(f, fno); data = gamedata_open(path, "rb"); + CuAssertPtrNotNull(tc, data); u = read_unit(data); gamedata_close(data); @@ -66,12 +72,46 @@ static void test_read_password(CuTest *tc) { f = test_create_faction(0); faction_setpassword(f, "secret"); data = gamedata_open(path, "wb"); + CuAssertPtrNotNull(tc, data); _test_write_password(data, f); gamedata_close(data); data = gamedata_open(path, "rb"); + CuAssertPtrNotNull(tc, data); _test_read_password(data, f); gamedata_close(data); CuAssertTrue(tc, checkpasswd(f, "secret")); + CuAssertIntEquals(tc, 0, remove(path)); +} + +static void test_read_password_external(CuTest *tc) { + const char *path = "test.dat", *pwfile = "passwords.txt"; + gamedata *data; + faction *f; + FILE * F; + + remove(pwfile); + f = test_create_faction(0); + faction_setpassword(f, "secret"); + CuAssertPtrNotNull(tc, f->passw); + data = gamedata_open(path, "wb"); + CuAssertPtrNotNull(tc, data); + WRITE_TOK(data->store, (const char *)f->passw); + WRITE_TOK(data->store, (const char *)f->passw); + gamedata_close(data); + data = gamedata_open(path, "rb"); + CuAssertPtrNotNull(tc, data); + data->version = BADCRYPT_VERSION; + _test_read_password(data, f); + CuAssertPtrEquals(tc, 0, f->passw); + F = fopen(pwfile, "wt"); + fprintf(F, "%s:secret\n", itoa36(f->no)); + fclose(F); + _test_read_password(data, f); + CuAssertPtrNotNull(tc, f->passw); + gamedata_close(data); + CuAssertTrue(tc, checkpasswd(f, "secret")); + CuAssertIntEquals(tc, 0, remove(path)); + CuAssertIntEquals(tc, 0, remove(pwfile)); } CuSuite *get_save_suite(void) @@ -80,5 +120,6 @@ CuSuite *get_save_suite(void) SUITE_ADD_TEST(suite, test_readwrite_data); SUITE_ADD_TEST(suite, test_readwrite_unit); SUITE_ADD_TEST(suite, test_read_password); + SUITE_ADD_TEST(suite, test_read_password_external); return suite; }