Initial commit

This commit is contained in:
2026-04-03 00:22:39 -05:00
commit eca1e8c458
945 changed files with 218160 additions and 0 deletions

View File

@@ -0,0 +1,274 @@
/*
Test-SST_FileSys.cpp
Author: Patrick Baggett <ptbaggett@762studios.com>
Created: 3/29/2012
Purpose:
Tests libsst-os file system functions
License:
This program is free software. It comes without any warranty, to
the extent permitted by applicable law. You can redistribute it
and/or modify it under the terms of the Do What The Fuck You Want
To Public License, Version 2, as published by Sam Hocevar. See
http://sam.zoy.org/wtfpl/COPYING for more details.
*/
#include "ZUnitTest.hpp"
#include <SST/SST_FileSys.h>
#include <stdio.h>
#include <stdlib.h>
static const char* testOpenBad();
static const char* testOpenGood();
static const char* testOpenOnFile();
static const char* testOpenOnFile();
static const char* testOpenEmpty();
static const char* testReadNonEmpty();
static const char* testReadEmpty();
//List of unit tests
ZUnitTest SST_FileSysUnitTests[] =
{
{ "SST_FileSys: OpenDirectory() on non-existent directory", testOpenBad },
{ "SST_FileSys: OpenDirectory() on valid directory with files", testOpenGood },
{ "SST_FileSys: OpenDirectory() on a file", testOpenOnFile },
{ "SST_FileSys: OpenDirectory() on a empty directory", testOpenEmpty },
{ "SST_FileSys: ReadNextDirectoryEntry() on valid directory with files", testReadNonEmpty },
{ "SST_FileSys: ReadNextDirectoryEntry() on empty directory", testReadEmpty }
};
DECLARE_ZTESTBLOCK(SST_FileSys);
/*
These tests assume a working environment that consists of:
./sst_fs/file1.txt (size == 32 bytes)
./sst_fs/file2.txt (size == 0 bytes)
./sst_fs/dir1/
./sst_fs/dir2/
*/
/*************************************************************************/
static const char* testOpenBad()
{
SST_Dir dir = SST_OS_OpenDirectory("./sst_fsxxxxdoesntexist");
if(dir != NULL)
{
SST_OS_CloseDirectory(dir);
return "Returned non-null on non-existent directory";
}
//Should fail due to trailing slash
dir = SST_OS_OpenDirectory("./sst_fs/");
if(dir != NULL)
{
SST_OS_CloseDirectory(dir);
return "Returned non-null on directory that ends with a trailing slash";
}
return ZTEST_SUCCESS;
}
/*************************************************************************/
static const char* testOpenGood()
{
SST_Dir dir = SST_OS_OpenDirectory("./sst_fs");
TASSERT(dir != NULL, "Returned NULL on valid directory");
SST_OS_CloseDirectory(dir);
return ZTEST_SUCCESS;
}
/*************************************************************************/
static const char* testOpenOnFile()
{
SST_Dir dir = SST_OS_OpenDirectory("./sst_fs/file1.txt");
if(dir != NULL)
{
SST_OS_CloseDirectory(dir);
return "Returned non-null when opening a file";
}
return ZTEST_SUCCESS;
}
/*************************************************************************/
static const char* testOpenEmpty()
{
SST_Dir dir = SST_OS_OpenDirectory("./sst_fs/dir1");
TASSERT(dir != NULL, "Returned null when opening empty directory");
SST_OS_CloseDirectory(dir);
return ZTEST_SUCCESS;
}
/*************************************************************************/
static const char* testReadNonEmpty()
{
SST_Dir dir = SST_OS_OpenDirectory("./sst_fs");
SST_FileInfo info;
size_t nrFoundCorrectly = 0;
#define NR_VALID 4
static char errorbuf[1024];
const char* validFiles[NR_VALID] =
{
"file1.txt",
"file2.txt",
"dir1",
"dir2"
};
const bool validFileIsDir[NR_VALID] =
{
false, /* file1.txt is not a directory */
false, /* file2.txt is not a directory */
true, /* dir1 is a directory */
true /* dir2 is a directory */
};
const uint64_t validFileSize[NR_VALID] =
{
32, /* file1.txt == 32 bytes */
0, /* file2.txt = 0 bytes */
0, /* not examined */
0 /* not examined */
};
TASSERT(dir != NULL, "Returned NULL on valid directory");
int OK;
do
{
OK = SST_OS_ReadNextDirectoryEntry(dir, &info);
if(OK)
{
//OK, ignore version control stuff
if(strcmp(info.name, ".svn") == 0)
continue;
//Check for "." -- should not exist
if(strcmp(info.name, ".") == 0)
{
SST_OS_CloseDirectory(dir);
return "Found \".\" entry, but these should be remove by API";
}
//Check for ".." -- should not exist
if(strcmp(info.name, "..") == 0)
{
SST_OS_CloseDirectory(dir);
return "Found \"..\" entry, but these should be remove by API";
}
//Check if we've already found all the files required -- we shouldn't find any more
if(nrFoundCorrectly == NR_VALID)
{
SST_OS_CloseDirectory(dir);
sprintf(errorbuf, "Already found all required files (%d of them) but found another file %s (ensure test filesystem is OK, then retest)", NR_VALID, info.name);
return errorbuf;
}
//Try to find a filename match with validFiles[]
size_t i;
for(i=0; i<NR_VALID; i++)
{
//Does it match?
if(strcmp(info.name, validFiles[i]) == 0)
{
bool isDir = (info.isDir != 0);
if(isDir == validFileIsDir[i])
{
//If this is a file, then check its size
if(!isDir)
{
if(validFileSize[i] == info.size)
{
nrFoundCorrectly++;
break;
}
else
{
sprintf(errorbuf, "The directory entry for %s says it is %u bytes, but it should be %u",
info.name,
(unsigned int)info.size,
(unsigned int)validFileSize[i]);
SST_OS_CloseDirectory(dir);
return errorbuf;
}
}
else
{
nrFoundCorrectly++;
break;
}
}
else
{
sprintf(errorbuf, "The directory entry for %s says it is a %s, but it should be a %s",
info.name,
(isDir? "directory" : "file"),
(validFileIsDir[i]? "directory" : "file"));
SST_OS_CloseDirectory(dir);
return errorbuf;
}
}
}
//Check if no filenames matched
if(i == NR_VALID)
{
sprintf(errorbuf, "Found invalid file %s (ensure test filesystem is OK, then retest)", info.name);
SST_OS_CloseDirectory(dir);
return errorbuf;
}
} //if OK
} while(OK);
//Ensure all necessary files were found correctly
if(nrFoundCorrectly != NR_VALID)
{
SST_OS_CloseDirectory(dir);
sprintf(errorbuf, "Only %d/%d entries were found in this directory", nrFoundCorrectly, NR_VALID);
return errorbuf;
}
#undef NR_VALID
SST_OS_CloseDirectory(dir);
return ZTEST_SUCCESS;
}
static const char* testReadEmpty()
{
return ZTEST_SUCCESS;
}