1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#include "test.h"
#include "systype.h"
#include "generic_agent.h"
#include "item_lib.h"
#include "mon.h"
#include <misc_lib.h> /* xsnprintf */
static void tests_setup(void)
{
xsnprintf(CFWORKDIR, CF_BUFSIZE, "/tmp/mon_processes_test.XXXXXX");
mkdtemp(CFWORKDIR);
char buf[CF_BUFSIZE];
xsnprintf(buf, CF_BUFSIZE, "%s/state", CFWORKDIR);
mkdir(buf, 0755);
}
static void tests_teardown(void)
{
char cmd[CF_BUFSIZE];
xsnprintf(cmd, CF_BUFSIZE, "rm -rf '%s'", CFWORKDIR);
system(cmd);
}
static bool GetSysUsers( int *userListSz, int *numRootProcs, int *numOtherProcs)
{
FILE *fp;
char user[CF_BUFSIZE];
char vbuff[CF_BUFSIZE];
char cbuff[CF_BUFSIZE];
#if defined(__sun)
xsnprintf(cbuff, CF_BUFSIZE, "/bin/ps -eo user > %s/users.txt", CFWORKDIR);
#elif defined(_AIX)
xsnprintf(cbuff, CF_BUFSIZE, "/bin/ps -N -eo user > %s/users.txt", CFWORKDIR);
#elif defined(__linux__)
xsnprintf(cbuff, CF_BUFSIZE, "/bin/ps -eo user > %s/users.txt", CFWORKDIR);
#else
assert_true(1);
return false;
#endif
Item *userList = NULL;
system(cbuff);
xsnprintf(cbuff, CF_BUFSIZE, "%s/users.txt", CFWORKDIR);
if ((fp = fopen(cbuff, "r")) == NULL)
{
return false;
}
while (fgets(vbuff, CF_BUFSIZE, fp) != NULL)
{
sscanf(vbuff, "%s", user);
if (strcmp(user, "USER") == 0)
{
continue;
}
if (!IsItemIn(userList, user))
{
PrependItem(&userList, user, NULL);
(*userListSz)++;
}
if (strcmp(user, "root") == 0)
{
(*numRootProcs)++;
}
else
{
(*numOtherProcs)++;
}
}
fclose(fp);
return true;
}
void test_processes_monitor(void)
{
# if defined(__sun) || defined(__linux__)
return; //redmine 6316
# endif
double cf_this[100] = { 0.0 };
MonProcessesGatherData(cf_this);
MonProcessesGatherData(cf_this);
MonProcessesGatherData(cf_this);
int usr, rusr, ousr;
usr = rusr = ousr = 0;
bool res = GetSysUsers(&usr, &rusr, &ousr);
if (res == false )
{
assert_true(1);
return;
}
usr = 3*usr;
rusr = 3*rusr;
ousr = 3*ousr;
int upper = (int)((double)usr*1.10);
int lower = (int)((double)usr*0.90);
assert_in_range((long long)cf_this[ob_users], lower, upper);
}
int main()
{
strcpy(CFWORKDIR, "data");
#if defined(__sun)
VSYSTEMHARDCLASS = PLATFORM_CONTEXT_SOLARIS;
#elif defined(_AIX)
VSYSTEMHARDCLASS = PLATFORM_CONTEXT_AIX;
#elif defined(__linux__)
VSYSTEMHARDCLASS = PLATFORM_CONTEXT_LINUX;
#endif
PRINT_TEST_BANNER();
tests_setup();
const UnitTest tests[] =
{
unit_test(test_processes_monitor),
};
int ret = run_tests(tests);
tests_teardown();
return ret;
}
|