1 /* ----> DO NOT REMOVE THE FOLLOWING NOTICE <---- 2 * 3 * Copyright (c) 2014-2015 Datalight, Inc. 4 * All Rights Reserved Worldwide. 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; use version 2 of the License. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but "AS-IS," WITHOUT ANY WARRANTY; without even the implied warranty 12 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 /* Businesses and individuals that for commercial or other reasons cannot 21 * comply with the terms of the GPLv2 license may obtain a commercial license 22 * before incorporating Reliance Edge into proprietary software for 23 * distribution in any form. Visit http://www.datalight.com/reliance-edge for 24 * more information. 25 */ 26 27 /** @file 28 * @brief Prototypes for Reliance Edge test entry points. 29 */ 30 #ifndef REDTESTS_H 31 #define REDTESTS_H 32 33 #include <redtypes.h> 34 #include "redtestutils.h" 35 #include "redver.h" 36 37 /* This macro is only defined by the error injection project. 38 */ 39 #ifdef REDCONF_ERROR_INJECTION 40 #include <rederrinject.h> 41 #endif 42 43 #define FSSTRESS_SUPPORTED \ 44 ( ( ( RED_KIT == RED_KIT_GPL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 45 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_PATH_SEPARATOR == '/' ) \ 46 && ( REDCONF_API_POSIX == 1 ) && ( REDCONF_API_POSIX_UNLINK == 1 ) && ( REDCONF_API_POSIX_MKDIR == 1 ) \ 47 && ( REDCONF_API_POSIX_RMDIR == 1 ) && ( REDCONF_API_POSIX_RENAME == 1 ) && ( REDCONF_API_POSIX_LINK == 1 ) \ 48 && ( REDCONF_API_POSIX_FTRUNCATE == 1 ) && ( REDCONF_API_POSIX_READDIR == 1 ) ) 49 50 #define FSE_STRESS_TEST_SUPPORTED \ 51 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 52 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_API_FSE == 1 ) \ 53 && ( REDCONF_API_FSE_FORMAT == 1 ) && ( REDCONF_API_FSE_TRANSMASKSET == 1 ) && ( REDCONF_API_FSE_TRANSMASKGET == 1 ) \ 54 && ( REDCONF_API_FSE_TRUNCATE == 1 ) ) 55 56 #define POSIX_API_TEST_SUPPORTED \ 57 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 58 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_API_POSIX == 1 ) \ 59 && ( REDCONF_API_POSIX_FORMAT == 1 ) && ( REDCONF_API_POSIX_UNLINK == 1 ) ) 60 61 #define FSE_API_TEST_SUPPORTED \ 62 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 63 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_API_FSE == 1 ) \ 64 && ( REDCONF_API_FSE_FORMAT == 1 ) ) 65 66 #define STOCH_POSIX_TEST_SUPPORTED \ 67 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 68 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_API_POSIX == 1 ) \ 69 && ( REDCONF_API_POSIX_FORMAT == 1 ) && ( REDCONF_API_POSIX_READDIR == 1 ) \ 70 && ( REDCONF_API_POSIX_MKDIR == 1 ) && ( REDCONF_API_POSIX_RMDIR == 1 ) && ( REDCONF_API_POSIX_UNLINK == 1 ) \ 71 && ( REDCONF_API_POSIX_RENAME == 1 ) ) 72 73 #define FSIOTEST_SUPPORTED \ 74 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 75 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_API_POSIX == 1 ) ) 76 77 #define BDEVTEST_SUPPORTED \ 78 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 79 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) ) 80 81 #define DISKFULL_TEST_SUPPORTED \ 82 ( ( ( RED_KIT == RED_KIT_COMMERCIAL ) || ( RED_KIT == RED_KIT_SANDBOX ) ) \ 83 && ( REDCONF_OUTPUT == 1 ) && ( REDCONF_READ_ONLY == 0 ) && ( REDCONF_API_POSIX == 1 ) \ 84 && ( REDCONF_API_POSIX_FORMAT == 1 ) && ( REDCONF_API_POSIX_FTRUNCATE == 1 ) ) 85 86 87 typedef enum 88 { 89 PARAMSTATUS_OK, /* Parameters were good; continue. */ 90 PARAMSTATUS_BAD, /* Parameters were bad; stop. */ 91 PARAMSTATUS_HELP /* Help request; not an error, but stop. */ 92 } PARAMSTATUS; 93 94 95 #if FSSTRESS_SUPPORTED 96 typedef struct 97 { 98 bool fNoCleanup; /**< --no-cleanup */ 99 uint32_t ulLoops; /**< --loops */ 100 uint32_t ulNops; /**< --nops */ 101 bool fNamePad; /**< --namepad */ 102 uint32_t ulSeed; /**< --seed */ 103 bool fVerbose; /**< --verbose */ 104 } FSSTRESSPARAM; 105 106 PARAMSTATUS FsstressParseParams( int argc, 107 char * argv[], 108 FSSTRESSPARAM * pParam, 109 uint8_t * pbVolNum, 110 const char ** ppszDevice ); 111 void FsstressDefaultParams( FSSTRESSPARAM * pParam ); 112 int FsstressStart( const FSSTRESSPARAM * pParam ); 113 #endif /* if FSSTRESS_SUPPORTED */ 114 115 #if STOCH_POSIX_TEST_SUPPORTED 116 typedef struct 117 { 118 const char * pszVolume; /**< Volume path prefix. */ 119 uint32_t ulIterations; /**< --iterations */ 120 uint32_t ulFileListMax; /**< --files */ 121 uint32_t ulDirListMax; /**< --dirs */ 122 uint32_t ulOpenFileListMax; /**< --open-files */ 123 uint32_t ulOpenDirListMax; /**< --open-dirs */ 124 uint32_t ulRandomSeed; /**< --seed */ 125 } STOCHPOSIXPARAM; 126 127 PARAMSTATUS RedStochPosixParseParams( int argc, 128 char * argv[], 129 STOCHPOSIXPARAM * pParam, 130 uint8_t * pbVolNum, 131 const char ** ppszDevice ); 132 void RedStochPosixDefaultParams( STOCHPOSIXPARAM * pParam ); 133 int RedStochPosixStart( const STOCHPOSIXPARAM * pParam ); 134 #endif /* if STOCH_POSIX_TEST_SUPPORTED */ 135 136 #if FSE_STRESS_TEST_SUPPORTED 137 typedef struct 138 { 139 uint8_t bVolNum; /**< Volume number. */ 140 uint32_t ulFileCount; /**< --files */ 141 uint32_t ulMaxFileSize; /**< --max */ 142 uint32_t ulMaxOpSize; /**< --buffer-size */ 143 uint32_t ulNops; /**< --nops */ 144 uint32_t ulLoops; /**< --loops */ 145 uint32_t ulSampleRate; /**< --sample-rate */ 146 uint64_t ullSeed; /**< --seed */ 147 } FSESTRESSPARAM; 148 149 PARAMSTATUS FseStressParseParams( int argc, 150 char * argv[], 151 FSESTRESSPARAM * pParam, 152 uint8_t * pbVolNum, 153 const char ** ppszDevice ); 154 void FseStressDefaultParams( FSESTRESSPARAM * pParam ); 155 int FseStressStart( const FSESTRESSPARAM * pParam ); 156 #endif /* if FSE_STRESS_TEST_SUPPORTED */ 157 158 #if POSIX_API_TEST_SUPPORTED 159 typedef struct 160 { 161 const char * pszVolume; /**< Volume path prefix. */ 162 bool fQuick; /**< --quick */ 163 bool fQuitOnFailure; /**< --quit-on-failure */ 164 bool fDebugErrors; /**< --debug */ 165 } POSIXTESTPARAM; 166 167 PARAMSTATUS RedPosixTestParseParams( int argc, 168 char * argv[], 169 POSIXTESTPARAM * pParam, 170 uint8_t * pbVolNum, 171 const char ** ppszDevice ); 172 void RedPosixTestDefaultParams( POSIXTESTPARAM * pParam ); 173 int RedPosixTestStart( const POSIXTESTPARAM * pParam ); 174 #endif /* if POSIX_API_TEST_SUPPORTED */ 175 176 177 #if POSIX_API_TEST_SUPPORTED 178 typedef struct 179 { 180 const char * pszVolume; /**< Volume path prefix. */ 181 bool fQuick; /**< --quick */ 182 bool fVerbose; /**< --verbose */ 183 bool fQuitOnFailure; /**< --quit-on-failure */ 184 bool fDebugErrors; /**< --debug */ 185 } OSAPITESTPARAM; 186 187 PARAMSTATUS RedOsApiTestParseParams( int argc, 188 char * argv[], 189 OSAPITESTPARAM * pParam, 190 const char ** ppszDevice ); 191 void RedOsApiTestDefaultParams( OSAPITESTPARAM * pParam ); 192 int RedOsApiTestStart( const OSAPITESTPARAM * pParam ); 193 #endif /* if POSIX_API_TEST_SUPPORTED */ 194 195 196 #if FSE_API_TEST_SUPPORTED 197 typedef struct 198 { 199 uint8_t bVolNum; /**< Volume number. */ 200 bool fQuitOnFailure; /**< --quit-on-failure */ 201 bool fDebugErrors; /**< --debug */ 202 } FSETESTPARAM; 203 204 PARAMSTATUS RedFseTestParseParams( int argc, 205 char * argv[], 206 FSETESTPARAM * pParam, 207 uint8_t * pbVolNum, 208 const char ** ppszDevice ); 209 void RedFseTestDefaultParams( FSETESTPARAM * pParam ); 210 int RedFseTestStart( const FSETESTPARAM * pParam ); 211 #endif /* if FSE_API_TEST_SUPPORTED */ 212 213 #if FSIOTEST_SUPPORTED 214 typedef enum 215 { 216 TESTFS_RELEDGE, /* Datalight Reliance Edge */ 217 TESTFS_FATFS, /* ChaN's FatFs */ 218 TESTFS_FATSL /* FreeRTOS+FAT SL */ 219 } TESTFS; 220 221 typedef struct 222 { 223 TESTFS testfs; /**< --fs */ 224 const char * pszVolume; /**< Volume path prefix. */ 225 bool fSeqRead; /**< --seq=r */ 226 bool fSeqWrite; /**< --seq=w */ 227 bool fSeqRewrite; /**< --seq=e */ 228 bool fRandomRead; /**< --rand=r */ 229 bool fRandomWrite; /**< --rand=w */ 230 bool fMixedWrite; /**< --mixed */ 231 bool fScanTest; /**< --scan */ 232 uint32_t ulFSBlockSize; /**< --block-size */ 233 uint32_t ulMaxFileSize; /**< --max */ 234 uint32_t ulRandomReadPasses; /**< --rand-pass=r:w (r part) */ 235 uint32_t ulRandomWritePasses; /**< --rand-pass=r:w (w part) */ 236 uint32_t ulMixedWritePasses; /**< --mixed-pass */ 237 int32_t iFlushOnWriteRatio; /**< --rand-fow */ 238 uint32_t ulBufferMin; /**< --start */ 239 uint32_t ulBufferSize; /**< --buffer-size */ 240 bool fWriteVerify; /**< --verify */ 241 uint32_t ulSampleRate; /**< --sample-rate */ 242 uint32_t ulScanCount; /**< --scan-files */ 243 uint64_t ullSeed; /**< --seed */ 244 } FSIOTESTPARAM; 245 246 PARAMSTATUS FSIOTestParseParams( int argc, 247 char * argv[], 248 FSIOTESTPARAM * pParam, 249 uint8_t * pbVolNum, 250 const char ** ppszDevice ); 251 void FSIOTestDefaultParams( FSIOTESTPARAM * pParam ); 252 int FSIOTestStart( const FSIOTESTPARAM * pParam ); 253 #endif /* if FSIOTEST_SUPPORTED */ 254 255 #if BDEVTEST_SUPPORTED 256 typedef struct 257 { 258 uint8_t bDrvNum; /**< Volume number (for sector size/count). */ 259 bool fSeqWrite; /**< --seq:w */ 260 bool fSeqRead; /**< --seq:r */ 261 bool fRandWrite; /**< --rand:w */ 262 bool fRandRead; /**< --rand:r */ 263 uint32_t ulSampleSecs; /**< --sample-rate */ 264 uint32_t ulPasses; /**< --passes */ 265 uint32_t ulMinIOSectors; /**< --count=min[:max] (min part) */ 266 uint32_t ulMaxIOSectors; /**< --count=min[:max] (max part) */ 267 uint32_t ulMaxSizeKB; /**< --max */ 268 uint32_t ulTestSeconds; /**< --time */ 269 bool fVerify; /**< --verify */ 270 bool fAsyncWrites; /**< --async */ 271 uint64_t ullSeed; /**< --seed */ 272 } BDEVTESTPARAM; 273 274 PARAMSTATUS BDevTestParseParams( int argc, 275 char * argv[], 276 BDEVTESTPARAM * pParam, 277 uint8_t * pbVolNum, 278 const char ** ppszDevice ); 279 void BDevTestDefaultParams( BDEVTESTPARAM * pParam ); 280 int BDevTestStart( const BDEVTESTPARAM * pParam ); 281 #endif /* if BDEVTEST_SUPPORTED */ 282 283 #if DISKFULL_TEST_SUPPORTED 284 typedef struct 285 { 286 const char * pszVolume; /**< Volume path prefix. */ 287 bool fQuitOnFailure; /**< --quit-on-failure */ 288 bool fDebugErrors; /**< --debug */ 289 } DISKFULLTESTPARAM; 290 291 PARAMSTATUS DiskFullTestParseParams( int argc, 292 char * argv[], 293 DISKFULLTESTPARAM * pParam, 294 uint8_t * pbVolNum, 295 const char ** ppszDevice ); 296 void DiskFullTestDefaultParams( DISKFULLTESTPARAM * pParam ); 297 int DiskFullTestStart( const DISKFULLTESTPARAM * pParam ); 298 #endif /* if DISKFULL_TEST_SUPPORTED */ 299 300 301 #endif /* ifndef REDTESTS_H */ 302