File: mon_cpu_test.c

package info (click to toggle)
cfengine3 3.6.2-4
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 20,256 kB
  • ctags: 9,613
  • sloc: ansic: 116,129; sh: 12,366; yacc: 1,088; makefile: 1,006; lex: 391; perl: 197; xml: 21; sed: 4
file content (86 lines) | stat: -rw-r--r-- 1,808 bytes parent folder | download | duplicates (3)
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
#include "test.h"

#include "generic_agent.h"
#include "mon.h"

static double GetCpuStat()
{
    double q, dq = -1.0;
    long total_time = 1;
    FILE *fp;
    long userticks = 0, niceticks = 0, systemticks = 0,
         idle = 0, iowait = 0, irq = 0, softirq = 0;
    char cpuname[CF_MAXVARSIZE], buf[CF_BUFSIZE];


    if ((fp = fopen("/proc/stat", "r")) == NULL)
    {
        return -1.0;
    }

    while (!feof(fp))
    {
        if (fgets(buf, sizeof(buf), fp) == NULL)
        {
            break;
        }

        if (sscanf(buf, "%s%ld%ld%ld%ld%ld%ld%ld", cpuname, &userticks,
                   &niceticks, &systemticks, &idle, &iowait, &irq,
                   &softirq) != 8)
        {
            continue;
        }

        total_time = (userticks + niceticks + systemticks + idle);

        q = 100.0 * (double) (total_time - idle);

        if (strcmp(cpuname, "cpu") == 0)
        {
            dq = q / (double) total_time;
            if ((dq > 100) || (dq < 0))
            {
                dq = 50;
            }
        }
    }

    fclose(fp);
    return dq;
}

void test_cpu_monitor(void)
{
    double cf_this[100];
    double dq1 = GetCpuStat();
    if (dq1 == -1.0)
    {
        assert_true(1);
        return;
    }
    MonCPUGatherData(cf_this);
    double dq2 = GetCpuStat();
    if (dq2 == -1.0)
    {
        assert_true(1);
        return;
    }
    double min = (double) (dq2<dq1?dq2:dq1);
    double max = (double) (dq2<dq1?dq1:dq2); 
    double lower = (min - (fabs(dq2 - dq1)) * 0.90);
    double upper = (max + (fabs(dq2 - dq1)) * 1.10);

    assert_true(cf_this[ob_cpuall]>=lower && cf_this[ob_cpuall]<=upper);
}

int main()
{
    PRINT_TEST_BANNER();
    const UnitTest tests[] =
    {
        unit_test(test_cpu_monitor),
    };

    return run_tests(tests);
}