diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/StormTest.cpp | 115 |
1 files changed, 57 insertions, 58 deletions
diff --git a/test/StormTest.cpp b/test/StormTest.cpp index 70d6db0..131b1d5 100644 --- a/test/StormTest.cpp +++ b/test/StormTest.cpp @@ -1875,7 +1875,7 @@ static int AddFileToMpq( const char * szFileData, DWORD dwFlags = 0, DWORD dwCompression = 0, - bool bMustSucceed = false) + int nExpectedError = ERROR_SUCCESS) { HANDLE hFile = NULL; DWORD dwFileSize = (DWORD)strlen(szFileData); @@ -1891,21 +1891,22 @@ static int AddFileToMpq( dwCompression = MPQ_COMPRESSION_ZLIB; // Create the file within the MPQ - if(!SFileCreateFile(hMpq, szFileName, 0, dwFileSize, 0, dwFlags, &hFile)) + if(SFileCreateFile(hMpq, szFileName, 0, dwFileSize, 0, dwFlags, &hFile)) { - // If success is not expected, it is actually a good thing - if(bMustSucceed == true) - return pLogger->PrintError("Failed to create MPQ file %s", szFileName); - - return GetLastError(); + // Write the file + if(!SFileWriteFile(hFile, szFileData, dwFileSize, dwCompression)) + nError = pLogger->PrintError("Failed to write data to the MPQ"); + SFileCloseFile(hFile); + } + else + { + nError = GetLastError(); } - // Write the file - if(!SFileWriteFile(hFile, szFileData, dwFileSize, dwCompression)) - nError = pLogger->PrintError("Failed to write data to the MPQ"); - - SFileCloseFile(hFile); - return nError; + // Check the expected error code + if(nError != nExpectedError) + return pLogger->PrintError("Unexpected result from SFileCreateFile(%s)", szFileName); + return ERROR_SUCCESS; } static int AddLocalFileToMpq( @@ -1957,35 +1958,35 @@ static int AddLocalFileToMpq( return ERROR_SUCCESS; } -static int RenameMpqFile(TLogHelper * pLogger, HANDLE hMpq, const char * szOldFileName, const char * szNewFileName, bool bMustSucceed) +static int RenameMpqFile(TLogHelper * pLogger, HANDLE hMpq, const char * szOldFileName, const char * szNewFileName, int nExpectedError) { + int nError = ERROR_SUCCESS; + // Notify the user pLogger->PrintProgress("Renaming %s to %s ...", szOldFileName, szNewFileName); // Perform the deletion if(!SFileRenameFile(hMpq, szOldFileName, szNewFileName)) - { - if(bMustSucceed == true) - return pLogger->PrintErrorVa("Failed to rename %s to %s", szOldFileName, szNewFileName); - return GetLastError(); - } + nError = GetLastError(); + if(nError != nExpectedError) + return pLogger->PrintErrorVa("Unexpected result from SFileRenameFile(%s -> %s)", szOldFileName, szNewFileName); return ERROR_SUCCESS; } -static int RemoveMpqFile(TLogHelper * pLogger, HANDLE hMpq, const char * szFileName, bool bMustSucceed) +static int RemoveMpqFile(TLogHelper * pLogger, HANDLE hMpq, const char * szFileName, int nExpectedError) { + int nError = ERROR_SUCCESS; + // Notify the user pLogger->PrintProgress("Removing file %s ...", szFileName); // Perform the deletion if(!SFileRemoveFile(hMpq, szFileName, 0)) - { - if(bMustSucceed == true) - return pLogger->PrintError("Failed to remove the file %s from the archive", szFileName); - return GetLastError(); - } + nError = GetLastError(); + if(nError != nExpectedError) + return pLogger->PrintError("Unexpected result from SFileRemoveFile(%s)", szFileName); return ERROR_SUCCESS; } @@ -2449,7 +2450,7 @@ static int TestOpenArchive_ReadOnly(const char * szPlainName, bool bReadOnly) HANDLE hMpq = NULL; char szFullPathName[MAX_PATH]; DWORD dwFlags = bReadOnly ? MPQ_OPEN_READ_ONLY : 0;; - bool bMustSucceed; + int nExpectedError; int nError; // Copy the fiel so we wont screw up something @@ -2463,28 +2464,22 @@ static int TestOpenArchive_ReadOnly(const char * szPlainName, bool bReadOnly) // Now try to add a file. This must fail if the MPQ is read only if(nError == ERROR_SUCCESS) { - bMustSucceed = (bReadOnly == false); - nError = AddFileToMpq(&Logger, hMpq, "AddedFile.txt", "This is an added file.", MPQ_FILE_COMPRESS | MPQ_FILE_ENCRYPTED, 0, bMustSucceed); - if(nError != ERROR_SUCCESS && bMustSucceed == false) - nError = ERROR_SUCCESS; + nExpectedError = (bReadOnly) ? ERROR_ACCESS_DENIED : ERROR_SUCCESS; + nError = AddFileToMpq(&Logger, hMpq, "AddedFile.txt", "This is an added file.", MPQ_FILE_COMPRESS | MPQ_FILE_ENCRYPTED, 0, nExpectedError); } // Now try to rename a file in the MPQ. This must only succeed if the MPQ is not read only if(nError == ERROR_SUCCESS) { - bMustSucceed = (bReadOnly == false); - nError = RenameMpqFile(&Logger, hMpq, "spawn.mpq", "spawn-renamed.mpq", bMustSucceed); - if(nError != ERROR_SUCCESS && bMustSucceed == false) - nError = ERROR_SUCCESS; + nExpectedError = (bReadOnly) ? ERROR_ACCESS_DENIED : ERROR_SUCCESS; + nError = RenameMpqFile(&Logger, hMpq, "spawn.mpq", "spawn-renamed.mpq", nExpectedError); } // Now try to delete a file in the MPQ. This must only succeed if the MPQ is not read only if(nError == ERROR_SUCCESS) { - bMustSucceed = (bReadOnly == false); - nError = RemoveMpqFile(&Logger, hMpq, "spawn-renamed.mpq", bMustSucceed); - if(nError != ERROR_SUCCESS && bMustSucceed == false) - nError = ERROR_SUCCESS; + nExpectedError = (bReadOnly) ? ERROR_ACCESS_DENIED : ERROR_SUCCESS; + nError = RemoveMpqFile(&Logger, hMpq, "spawn-renamed.mpq", nExpectedError); } // Close the archive @@ -2693,7 +2688,7 @@ static int TestOpenArchive_ModifySigned(const char * szPlainName, const char * s { // Verify any of the present signatures Logger.PrintProgress("Modifying signed archive ..."); - nError = AddFileToMpq(&Logger, hMpq, "AddedFile01.txt", "This is a file added to signed MPQ", 0, 0, true); + nError = AddFileToMpq(&Logger, hMpq, "AddedFile01.txt", "This is a file added to signed MPQ", 0, 0, ERROR_SUCCESS); } // Verify the signature again @@ -2970,24 +2965,29 @@ static int ForEachFile_OpenArchive(const char * szFullPath) // Adding a file to MPQ that had no (listfile) and no (attributes). // We expect that neither of these will be present after the archive is closed -static int TestAddFile_FullArchive(const char * szSourceMpq) +static int TestAddFile_FullArchive(const char * szFullMpq1, const char * szFullMpq2) { - TLogHelper Logger("FullMpqTest", szSourceMpq); + TLogHelper Logger("FullMpqTest", szFullMpq1); const char * szFileName = "AddedFile001.txt"; const char * szFileData = "0123456789ABCDEF"; HANDLE hMpq = NULL; int nError = ERROR_SUCCESS; // Copy the archive so we won't fuck up the original one - nError = OpenExistingArchiveWithCopy(&Logger, szSourceMpq, szSourceMpq, &hMpq); + nError = OpenExistingArchiveWithCopy(&Logger, szFullMpq1, szFullMpq1, &hMpq); + if(nError == ERROR_SUCCESS) + { + // Attempt to add a file + nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, MPQ_FILE_IMPLODE, MPQ_COMPRESSION_PKWARE, ERROR_DISK_FULL); + SFileCloseArchive(hMpq); + } - // Add a file + // Copy the archive so we won't fuck up the original one + nError = OpenExistingArchiveWithCopy(&Logger, szFullMpq2, szFullMpq2, &hMpq); if(nError == ERROR_SUCCESS) { // Now add a file - nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, MPQ_FILE_IMPLODE, MPQ_COMPRESSION_PKWARE); - nError = (nError == ERROR_DISK_FULL) ? ERROR_SUCCESS : ERROR_FILE_CORRUPT; - + nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, MPQ_FILE_IMPLODE, MPQ_COMPRESSION_PKWARE, ERROR_DISK_FULL); SFileCloseArchive(hMpq); } @@ -3294,7 +3294,7 @@ static int TestCreateArchive_FillArchive(const char * szPlainName, DWORD dwCreat // Now the MPQ should be full. It must not be possible to add another file if(nError == ERROR_SUCCESS) { - nError = AddFileToMpq(&Logger, hMpq, "ShouldNotBeHere.txt", szFileData, MPQ_FILE_COMPRESS, MPQ_COMPRESSION_ZLIB, false); + nError = AddFileToMpq(&Logger, hMpq, "ShouldNotBeHere.txt", szFileData, MPQ_FILE_COMPRESS, MPQ_COMPRESSION_ZLIB, ERROR_DISK_FULL); assert(nError != ERROR_SUCCESS); nError = ERROR_SUCCESS; } @@ -3313,7 +3313,7 @@ static int TestCreateArchive_FillArchive(const char * szPlainName, DWORD dwCreat { CheckIfFileIsPresent(&Logger, hMpq, LISTFILE_NAME, (dwCreateFlags & MPQ_CREATE_LISTFILE) ? true : false); CheckIfFileIsPresent(&Logger, hMpq, ATTRIBUTES_NAME, (dwCreateFlags & MPQ_CREATE_ATTRIBUTES) ? true : false); - nError = AddFileToMpq(&Logger, hMpq, "ShouldNotBeHere.txt", szFileData, MPQ_FILE_COMPRESS, MPQ_COMPRESSION_ZLIB, false); + nError = AddFileToMpq(&Logger, hMpq, "ShouldNotBeHere.txt", szFileData, MPQ_FILE_COMPRESS, MPQ_COMPRESSION_ZLIB, ERROR_DISK_FULL); assert(nError != ERROR_SUCCESS); nError = ERROR_SUCCESS; } @@ -3323,20 +3323,20 @@ static int TestCreateArchive_FillArchive(const char * szPlainName, DWORD dwCreat { CheckIfFileIsPresent(&Logger, hMpq, LISTFILE_NAME, (dwCreateFlags & MPQ_CREATE_LISTFILE) ? true : false); CheckIfFileIsPresent(&Logger, hMpq, ATTRIBUTES_NAME, (dwCreateFlags & MPQ_CREATE_ATTRIBUTES) ? true : false); - nError = RemoveMpqFile(&Logger, hMpq, szFileName, true); + nError = RemoveMpqFile(&Logger, hMpq, szFileName, ERROR_SUCCESS); } // Now add the file again. This time, it should be possible OK if(nError == ERROR_SUCCESS) { - nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, dwFlags, dwCompression, true); + nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, dwFlags, dwCompression, ERROR_SUCCESS); assert(nError == ERROR_SUCCESS); } // Now add the file again. This time, it should be fail if(nError == ERROR_SUCCESS) { - nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, dwFlags, dwCompression, false); + nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, dwFlags, dwCompression, ERROR_DISK_FULL); assert(nError != ERROR_SUCCESS); nError = ERROR_SUCCESS; } @@ -3403,7 +3403,7 @@ static int TestCreateArchive_IncMaxFileCount(const char * szPlainName) SFileSetMaxFileCount(hMpq, dwMaxFileCount); // Attempt to create the file again - nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, 0, 0, true); + nError = AddFileToMpq(&Logger, hMpq, szFileName, szFileData, 0, 0, ERROR_SUCCESS); } // Compact the archive and close it @@ -3496,7 +3496,7 @@ static int TestCreateArchive_FileFlagTest(const char * szPlainName) if(nError == ERROR_SUCCESS) { Logger.PrintProgress("Removing file %s ...", szMiddleFile); - nError = RemoveMpqFile(&Logger, hMpq, szMiddleFile, true); + nError = RemoveMpqFile(&Logger, hMpq, szMiddleFile, ERROR_SUCCESS); dwFileCount--; } @@ -3688,7 +3688,7 @@ static int TestCreateArchive_ListFilePos(const char * szPlainName) for(i = 0; i < dwMaxFileCount; i++) { sprintf(szArchivedName, szFileMask, i); - nError = AddFileToMpq(&Logger, hMpq, szArchivedName, "This is a text data.", 0, 0, true); + nError = AddFileToMpq(&Logger, hMpq, szArchivedName, "This is a text data.", 0, 0, ERROR_SUCCESS); if(nError != ERROR_SUCCESS) break; @@ -3702,7 +3702,7 @@ static int TestCreateArchive_ListFilePos(const char * szPlainName) for(i = 0; i < (dwMaxFileCount / 2); i++) { sprintf(szArchivedName, szFileMask, i); - nError = RemoveMpqFile(&Logger, hMpq, szArchivedName, true); + nError = RemoveMpqFile(&Logger, hMpq, szArchivedName, ERROR_SUCCESS); if(nError != ERROR_SUCCESS) break; } @@ -3738,7 +3738,7 @@ static int TestCreateArchive_ListFilePos(const char * szPlainName) // Add new file to the archive. It should be added to position 0 // (since position 0 should be free) - nError = AddFileToMpq(&Logger, hMpq, szReaddedFile, "This is a re-added file.", 0, 0, true); + nError = AddFileToMpq(&Logger, hMpq, szReaddedFile, "This is a re-added file.", 0, 0, ERROR_SUCCESS); if(nError == ERROR_SUCCESS) { pFileData = LoadMpqFile(&Logger, hMpq, szReaddedFile); @@ -4175,9 +4175,8 @@ int main(int argc, char * argv[]) // if(nError == ERROR_SUCCESS) // nError = TestOpenArchive_CompactingTest("MPQ_2014_v1_CompactTest.w3x", "ListFile_Blizzard.txt"); */ - // Test adding a file to MPQ that is already full if(nError == ERROR_SUCCESS) - nError = TestAddFile_FullArchive("MPQ_2014_v1_out.w3x"); + nError = TestAddFile_FullArchive("MPQ_2014_v1_out1.w3x", "MPQ_2014_v1_out2.w3x"); // Test modifying file with no (listfile) and no (attributes) if(nError == ERROR_SUCCESS) |