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