blob: 492d7a3279376ed080ecae379fdd65f1f2ea610d [file] [log] [blame]
/*
* Copyright (c) International Business Machines Corp., 2004
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* FILE NAME : dm_test.h
*
* PURPOSE : Define macros and constants common to all DMAPI test cases
*/
#include <stdlib.h>
#if HAVE_SYS_JFSDMAPI_H
#include <sys/jfsdmapi.h>
#endif
#include "dm_vars.h"
/* The following constants are implementation-independent */
#define ABORT_ERRNO 12
#define DUMMY_STRING "0123456789"
#define DUMMY_STRING2 "9876543210"
#define DUMMY_STRLEN (sizeof(DUMMY_STRING)-1)
#define ATTR_NAME "DMAttr01"
#define ATTR_VALUE "This is a DM attribute's value"
#define ATTR_VALUELEN (sizeof(ATTR_VALUE)-1)
#define DUMMY_TIME 0xCAFEFEED
#define DUMMY_UID 0xDEAD
#define DUMMY_GID 0xBEEF
#define DUMMY_MODE 0xBAD
#define MODE_MASK 0x0FFF
#define CURRENT_DIR "."
#define PARENT_DIR ".."
#define MSG_DATA "This is the message data for a DM user event"
#define MSG_DATALEN sizeof(MSG_DATA)
#define DWALIGN(n) (((n)+(sizeof(int)-1)) & ~(sizeof(int)-1))
/* The following constants are more than likely implementation-dependent */
#define INVALID_ADDR 0xDEADBEEF
#define FILE_HANDLELEN 24
#define EVENT_DELIVERY_DELAY sleep(1)
#define EVENT_DELIVERY_DELAY_LOOP { \
do { \
eventReceived = DM_EVENT_INVALID; \
EVENT_DELIVERY_DELAY; \
} while (eventReceived != DM_EVENT_INVALID); \
}
#define TIMESTAMP_DELAY { \
DMLOG_PRINT(DMLVL_DEBUG, "Sleeping to guarantee timestamp change...\n"); \
sleep(3); \
}
#define PAGE_SIZE 4096
#define PAGEALIGN(n) (((n)+(PAGE_SIZE-1)) & ~(PAGE_SIZE-1))
#define O_DIRECTORY 0200000
/* The following constants are implementation-dependent */
#define DMAPI_ATTR_PREFIX "user.dmi."
#define PMR_ATTRNAME "system.dmi.persistent.regions"
#define MAXFILESIZE ((__s64)1 << 52)
#define ROOT_INODE 2
#define BLK_SIZE 4096
#define BLKALIGN(n) (((n)+(BLK_SIZE-1)) & ~(BLK_SIZE-1))
#define UNALIGNED_BLK_OFF 1357 /* Odd number less than BLK_SIZE */
/* The following constants are file/directory/link names */
#define DUMMY_FILE "dummy.txt"
#define DUMMY_FILE2 "dummy2.txt"
#define DUMMY_LINK "dummy.lnk"
#define DUMMY_SUBDIR "dummy.dir"
#define DUMMY_SUBDIR2 "dummy2.dir"
#define DUMMY_SUBDIR_FILE "dummy.dir/dummy.txt"
#define DUMMY_SUBDIR_LINK "dummy.dir/dummy.lnk"
#define DUMMY_SUBDIR_SUBDIR "dummy.dir/dummy.dir"
#define DUMMY_SUBDIR2_FILE "dummy2.dir/dummy.txt"
#define DUMMY_SUBDIR2_LINK "dummy2.dir/dummy.lnk"
#define DUMMY_SUBDIR2_SUBDIR "dummy2.dir/dummy.dir"
#define DUMMY_TMP "dummy.tmp"
#define DUMMY_FILE_RO_MODE (S_IRUSR | S_IRGRP | S_IROTH)
#define DUMMY_FILE_RW_MODE (DUMMY_FILE_RO_MODE | S_IWUSR)
#define DUMMY_DIR_RO_MODE (DUMMY_FILE_RO_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
#define DUMMY_DIR_RW_MODE (DUMMY_DIR_RO_MODE | S_IWUSR)
/* The following constants and macros pertain to DM logging */
#define DMLVL_ERR 1
#define DMLVL_WARN 2
#define DMLVL_DEBUG 3
#define DMLVL_INFO 4
#define DMSTAT_PASS 1
#define DMSTAT_FAIL 2
#define DMSTAT_SKIP 3
#define DMLOG_START() dm_StartLogging()
#define DMLOG_STOP() dm_StopLogging()
#define DMLOG_PRINT dm_LogPrintf
#define DMVAR_EXEC(v) dm_ExecuteVariation(v)
#define DMVAR_PASS() dm_PassVariation()
#define DMVAR_FAIL() dm_FailVariation()
#define DMVAR_SKIP() dm_SkipVariation()
#define DMOPT_PARSE(c,v) dm_ParseCommandLineOptions(c, v)
#define DMOPT_GET(o) dm_GetCommandLineOption(o)
#define DM_ERROR dm_error
#define DM_EXIT() exit(-1)
#define DMVAR_ENDPASSEXP(n,e,a) dm_EndVariation_SuccessExpected(n, e, a)
#define DMVAR_ENDFAILEXP(n,e,a,f) dm_EndVariation_FailureExpected(n, e, a, f);
#define DMVAR_CHKPASSEXP(e1,a1,e2,a2) dm_CheckVariation_SuccessExpected(e1, a1, e2, a2)
#define DMVAR_CHKFAILEXP(e1,a1,e,e2,a2) dm_CheckVariation_FailureExpected(e1, a1, e, e2, a2)
#define DMVAR_END(s) { if ((s) == DMSTAT_PASS) DMVAR_PASS(); else DMVAR_FAIL(); }
/* DM logging global functions */
void dm_ParseCommandLineOptions(int argc, char **argv);
char *dm_GetCommandLineOption(char *option);
void dm_StartLogging(void);
void dm_StopLogging(void);
void dm_Error(char *format, ...);
void dm_LogPrintf(u_int level, char *format, ...);
int dm_ExecuteVariation(int var);
void dm_PassVariation(void);
void dm_FailVariation(void);
void dm_SkipVariation(void);
void dm_EndVariation_SuccessExpected(char *funcname, int expectedRC, int actualRC);
void dm_EndVariation_FailureExpected(char *funcname, int expectedRC, int actualRC, int expectedErrno);
#if HAVE_SYS_JFSDMAPI_H
int dm_CheckVariation_SuccessExpected(int expectedRC, int actualRC, dm_eventtype_t expectedEvent, dm_eventtype_t actualEvent);
int dm_CheckVariation_FailureExpected(int expectedRC, int actualRC, int expectedErrno, dm_eventtype_t expectedEvent, dm_eventtype_t actualEvent);
void dm_LogHandle(char *hdl, int len);
/* Persistent managed regions global data */
#ifdef MULTIPLE_REGIONS
#define PMR_NUM_REGIONS 5
#else
#define PMR_NUM_REGIONS 1
#endif
extern dm_region_t dm_PMR_regbuf[];
/* Implementation-dependent data structures */
typedef struct configResult {
char *name;
dm_size_t result;
} configResult_t;
typedef struct eventValidity {
dm_boolean_t bGlobalHandle;
dm_boolean_t bFSHandle;
dm_boolean_t bDirHandle;
dm_boolean_t bFileHandle;
char * name;
} eventValidity_t;
/* Implementation-dependent global function */
int dmimpl_mount(char **mountPt, char **deviceNm);
/* Implementation-dependent global data */
#define CONFIG_MAX 20
extern configResult_t dmimpl_expectedResults[];
extern eventValidity_t dmimpl_validEvents[];
extern dm_eventset_t dmimpl_eventset;
#endif