1##############################################################
2#
3# Test reworked in CFE-3644 to be more dynamic
4#
5##############################################################
6
7body common control
8{
9  bundlesequence => { "test", "check" };
10}
11
12bundle agent test
13{
14  meta:
15    any::
16      "decription" -> { "CFE-3569" }
17        string => "Test for expected values of variable sys.os_version_major";
18
19  vars:
20    # Platforms to test
21    any::
22      "platforms"
23        slist => { "debian", "ubuntu", "redhat", "rhel", "centos", "fedora",
24                   "aix", "hpux", "suse", "opensuse", "sles", "solaris",
25                   "sunos", "windows", "freebsd", "macos" };
26
27
28    # Regex matching current platforms OS-class with version numbers
29    !solaris&!sunos::
30      "class_regex"
31        string => format("^(%s)_[0-9]+$", join("|", "platforms"));
32    solaris|sunos::
33      "class_regex"
34        string => format("^(%s)_[0-9]+_[0-9]+$", join("|", "platforms"));
35
36    # Regex to extract major version number from OS-class
37    # Edge cases:
38    #  - On Solaris/SunOS major version comes second
39    #    E.g. Solaris 11 has class "solaris_5_11"
40    any::
41      "extract_regex"
42        string => ifelse("solaris|sunos", "^[a-z]+_[0-9]+_([0-9]+$)",
43                                          "^[a-z]+_([0-9]+)$");
44
45    # Find OS-class with version numbers using regex
46    any::
47      "os_class"
48        string => nth(classesmatching("$(class_regex)"), "0");
49
50    # Get extracted major version number
51    any::
52      "expected"
53        string => nth("version_number", "1");
54
55  classes:
56    any::
57      "regextract_success"
58        expression => regextract("$(extract_regex)", "$(os_class)", "version_number");
59}
60
61bundle agent check
62{
63  vars:
64    any::
65      "defined_classes"
66        slist => classesmatching(".*");
67
68  classes:
69    any::
70      "passed"
71        expression => strcmp("$(test.expected)", "$(sys.os_version_major)");
72
73  reports:
74    DEBUG::
75      "Version number extracted from class: $(test.os_class)";
76      "Defined classes: $(defined_classes)";
77      "$(this.promise_filename) Expected: $(test.expected)";
78      "$(this.promise_filename) Found: $(sys.os_version_major)";
79    passed::
80      "$(this.promise_filename) Pass";
81    !passed::
82      "$(this.promise_filename) FAIL";
83}
84