• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   Copyright (c) International Business Machines  Corp., 2004
3  *
4  *   This program is free software;  you can redistribute it and/or modify
5  *   it under the terms of the GNU General Public License as published by
6  *   the Free Software Foundation; either version 2 of the License, or
7  *   (at your option) any later version.
8  *
9  *   This program is distributed in the hope that it will be useful,
10  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
12  *   the GNU General Public License for more details.
13  *
14  *   You should have received a copy of the GNU General Public License
15  *   along with this program;  if not, write to the Free Software
16  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 
19 /*
20  * FILE NAME	: dm_test.h
21  *
22  * PURPOSE	: Define macros and constants common to all DMAPI test cases
23  */
24 
25 #include <stdlib.h>
26 #if HAVE_SYS_JFSDMAPI_H
27 #include <sys/jfsdmapi.h>
28 #endif
29 #include "dm_vars.h"
30 
31 /* The following constants are implementation-independent */
32 #define ABORT_ERRNO 12
33 #define DUMMY_STRING "0123456789"
34 #define DUMMY_STRING2 "9876543210"
35 #define DUMMY_STRLEN (sizeof(DUMMY_STRING)-1)
36 #define ATTR_NAME "DMAttr01"
37 #define ATTR_VALUE "This is a DM attribute's value"
38 #define ATTR_VALUELEN (sizeof(ATTR_VALUE)-1)
39 #define DUMMY_TIME 0xCAFEFEED
40 #define DUMMY_UID 0xDEAD
41 #define DUMMY_GID 0xBEEF
42 #define DUMMY_MODE 0xBAD
43 #define MODE_MASK 0x0FFF
44 #define CURRENT_DIR "."
45 #define PARENT_DIR ".."
46 #define MSG_DATA "This is the message data for a DM user event"
47 #define MSG_DATALEN sizeof(MSG_DATA)
48 #define DWALIGN(n) (((n)+(sizeof(int)-1)) & ~(sizeof(int)-1))
49 
50 /* The following constants are more than likely implementation-dependent */
51 #define INVALID_ADDR 0xDEADBEEF
52 #define FILE_HANDLELEN 24
53 #define EVENT_DELIVERY_DELAY sleep(1)
54 #define EVENT_DELIVERY_DELAY_LOOP { \
55 	do { \
56 		eventReceived = DM_EVENT_INVALID; \
57 		EVENT_DELIVERY_DELAY; \
58 	} while (eventReceived != DM_EVENT_INVALID); \
59 }
60 #define TIMESTAMP_DELAY { \
61 	DMLOG_PRINT(DMLVL_DEBUG, "Sleeping to guarantee timestamp change...\n"); \
62 	sleep(3); \
63 }
64 #define PAGE_SIZE 4096
65 #define PAGEALIGN(n) (((n)+(PAGE_SIZE-1)) & ~(PAGE_SIZE-1))
66 #define O_DIRECTORY 0200000
67 
68 /* The following constants are implementation-dependent */
69 #define DMAPI_ATTR_PREFIX "user.dmi."
70 #define PMR_ATTRNAME "system.dmi.persistent.regions"
71 #define MAXFILESIZE ((__s64)1 << 52)
72 #define ROOT_INODE 2
73 #define BLK_SIZE 4096
74 #define BLKALIGN(n) (((n)+(BLK_SIZE-1)) & ~(BLK_SIZE-1))
75 #define UNALIGNED_BLK_OFF 1357 /* Odd number less than BLK_SIZE */
76 
77 /* The following constants are file/directory/link names */
78 #define DUMMY_FILE "dummy.txt"
79 #define DUMMY_FILE2 "dummy2.txt"
80 #define DUMMY_LINK "dummy.lnk"
81 #define DUMMY_SUBDIR "dummy.dir"
82 #define DUMMY_SUBDIR2 "dummy2.dir"
83 #define DUMMY_SUBDIR_FILE "dummy.dir/dummy.txt"
84 #define DUMMY_SUBDIR_LINK "dummy.dir/dummy.lnk"
85 #define DUMMY_SUBDIR_SUBDIR "dummy.dir/dummy.dir"
86 #define DUMMY_SUBDIR2_FILE "dummy2.dir/dummy.txt"
87 #define DUMMY_SUBDIR2_LINK "dummy2.dir/dummy.lnk"
88 #define DUMMY_SUBDIR2_SUBDIR "dummy2.dir/dummy.dir"
89 #define DUMMY_TMP "dummy.tmp"
90 #define DUMMY_FILE_RO_MODE 	(S_IRUSR | S_IRGRP | S_IROTH)
91 #define DUMMY_FILE_RW_MODE 	(DUMMY_FILE_RO_MODE | S_IWUSR)
92 #define DUMMY_DIR_RO_MODE 	(DUMMY_FILE_RO_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
93 #define DUMMY_DIR_RW_MODE	(DUMMY_DIR_RO_MODE | S_IWUSR)
94 
95 /* The following constants and macros pertain to DM logging */
96 #define DMLVL_ERR	1
97 #define DMLVL_WARN	2
98 #define DMLVL_DEBUG	3
99 #define DMLVL_INFO	4
100 
101 #define DMSTAT_PASS	1
102 #define DMSTAT_FAIL	2
103 #define DMSTAT_SKIP	3
104 
105 #define DMLOG_START()	dm_StartLogging()
106 #define DMLOG_STOP()	dm_StopLogging()
107 #define DMLOG_PRINT	dm_LogPrintf
108 #define DMVAR_EXEC(v)	dm_ExecuteVariation(v)
109 #define DMVAR_PASS()	dm_PassVariation()
110 #define DMVAR_FAIL()	dm_FailVariation()
111 #define DMVAR_SKIP()	dm_SkipVariation()
112 #define DMOPT_PARSE(c,v)	dm_ParseCommandLineOptions(c, v)
113 #define DMOPT_GET(o)	dm_GetCommandLineOption(o)
114 #define DM_ERROR	dm_error
115 #define DM_EXIT()	exit(-1)
116 #define DMVAR_ENDPASSEXP(n,e,a)	dm_EndVariation_SuccessExpected(n, e, a)
117 #define DMVAR_ENDFAILEXP(n,e,a,f) dm_EndVariation_FailureExpected(n, e, a, f);
118 #define DMVAR_CHKPASSEXP(e1,a1,e2,a2) dm_CheckVariation_SuccessExpected(e1, a1, e2, a2)
119 #define DMVAR_CHKFAILEXP(e1,a1,e,e2,a2) dm_CheckVariation_FailureExpected(e1, a1, e, e2, a2)
120 #define DMVAR_END(s)	{ if ((s) == DMSTAT_PASS) DMVAR_PASS(); else DMVAR_FAIL(); }
121 
122 /* DM logging global functions */
123 void dm_ParseCommandLineOptions(int argc, char **argv);
124 char *dm_GetCommandLineOption(char *option);
125 void dm_StartLogging(void);
126 void dm_StopLogging(void);
127 void dm_Error(char *format, ...);
128 void dm_LogPrintf(u_int level, char *format, ...);
129 int dm_ExecuteVariation(int var);
130 void dm_PassVariation(void);
131 void dm_FailVariation(void);
132 void dm_SkipVariation(void);
133 void dm_EndVariation_SuccessExpected(char *funcname, int expectedRC, int actualRC);
134 void dm_EndVariation_FailureExpected(char *funcname, int expectedRC, int actualRC, int expectedErrno);
135 #if HAVE_SYS_JFSDMAPI_H
136 int dm_CheckVariation_SuccessExpected(int expectedRC, int actualRC, dm_eventtype_t expectedEvent, dm_eventtype_t actualEvent);
137 int dm_CheckVariation_FailureExpected(int expectedRC, int actualRC, int expectedErrno, dm_eventtype_t expectedEvent, dm_eventtype_t actualEvent);
138 void dm_LogHandle(char *hdl, int len);
139 
140 /* Persistent managed regions global data */
141 
142 #ifdef MULTIPLE_REGIONS
143 #define PMR_NUM_REGIONS 5
144 #else
145 #define PMR_NUM_REGIONS 1
146 #endif
147 extern dm_region_t dm_PMR_regbuf[];
148 
149 /* Implementation-dependent data structures */
150 typedef struct configResult {
151 	char		*name;
152 	dm_size_t	result;
153 } configResult_t;
154 
155 typedef struct eventValidity {
156 	dm_boolean_t bGlobalHandle;
157 	dm_boolean_t bFSHandle;
158 	dm_boolean_t bDirHandle;
159 	dm_boolean_t bFileHandle;
160 	char *       name;
161 } eventValidity_t;
162 
163 /* Implementation-dependent global function */
164 int dmimpl_mount(char **mountPt, char **deviceNm);
165 
166 /* Implementation-dependent global data */
167 #define CONFIG_MAX 20
168 extern configResult_t dmimpl_expectedResults[];
169 extern eventValidity_t dmimpl_validEvents[];
170 extern dm_eventset_t dmimpl_eventset;
171 #endif
172