1#######################################################
2#
3# Redmine #4791: body perms mode
4#
5#######################################################
6
7body common control
8{
9      inputs => { "../../default.cf.sub" };
10      bundlesequence  => { default("$(this.promise_filename)") };
11      version => "1.0";
12}
13
14#######################################################
15
16bundle agent test
17{
18  vars:
19    freebsd|solaris::
20      "modes" slist => { "1", "333", "100", "200", "777", "o=x", "ugo=wx", "u=x", "u=w", "ugo=rwx" };
21    !freebsd.!solaris::
22      "modes" slist => { "1", "333", "100", "200", "777", "1111", "1010", "13400", "22222", "o=x", "ugo=wx", "u=x", "u=w", "ugo=rwx" };
23
24  files:
25      "$(G.testdir)/$(modes)"
26      create => "true",
27      perms => test_mode($(modes));
28}
29
30body perms test_mode(m)
31{
32      mode => "$(m)";
33}
34
35bundle agent check
36{
37  vars:
38      "modes" slist => { @(test.modes) };
39    windows::
40      "win_r" string => "100444";
41      "win_w" string => "100666";
42      "expected" data => parsejson('
43{
44  "1": "$(win_r)",
45  "333": "$(win_w)",
46  "100": "$(win_r)",
47  "200": "$(win_w)",
48  "777": "$(win_w)",
49  "1111": "$(win_r)",
50  "1010": "$(win_r)",
51  "13400": "$(win_r)",
52  "22222": "$(win_r)",
53  "o=x": "$(win_r)",
54  "ugo=wx": "$(win_w)",
55  "u=x": "$(win_r)",
56  "u=w": "$(win_w)",
57  "ugo=rwx": "$(win_w)",
58}');
59
60    freebsd|solaris::
61      "expected" data => parsejson('
62{
63  "1": "100001",
64  "333": "100333",
65  "100": "100100",
66  "200": "100200",
67  "777": "100777",
68  "o=x": "100001",
69  "ugo=wx": "100333",
70  "u=x": "100100",
71  "u=w": "100200",
72  "ugo=rwx": "100777",
73}');
74
75    !freebsd.!solaris.!windows::
76      "expected" data => parsejson('
77{
78  "1": "100001",
79  "333": "100333",
80  "100": "100100",
81  "200": "100200",
82  "777": "100777",
83  "1111": "101111",
84  "1010": "101010",
85  "13400": "103400",
86  "22222": "102222",
87  "o=x": "100001",
88  "ugo=wx": "100333",
89  "u=x": "100100",
90  "u=w": "100200",
91  "ugo=rwx": "100777",
92}');
93
94    any::
95      "actual[$(modes)]" string => filestat("$(G.testdir)/$(modes)", "modeoct");
96      "canonified[$(modes)]" string => canonify("$(modes)");
97
98  classes:
99      "ok_$(canonified[$(modes)])" expression => strcmp("$(expected[$(modes)])", "$(actual[$(modes)])");
100
101      freebsd|solaris::
102      "ok" and => { "ok_1", "ok_333", "ok_100", "ok_200", "ok_777", classify("ok_o=x"), classify("ok_ugo=wx"), classify("ok_u=x"), classify("ok_u=w"), classify("ok_ugo=rwx") };
103
104      !freebsd.!solaris::
105      "ok" and => { "ok_1", "ok_333", "ok_100", "ok_200", "ok_777", "ok_1111", "ok_1010", "ok_13400", "ok_22222", classify("ok_o=x"), classify("ok_ugo=wx"), classify("ok_u=x"), classify("ok_u=w"), classify("ok_ugo=rwx") };
106
107  reports:
108    DEBUG::
109      "Permission $(modes) worked, got $(expected[$(modes)])" if => "ok_$(canonified[$(modes)])";
110      "Permission $(modes) failed, expected $(expected[$(modes)]) != actual $(actual[$(modes)])" if => "!ok_$(canonified[$(modes)])";
111    ok::
112      "$(this.promise_filename) Pass";
113    !ok::
114      "$(this.promise_filename) FAIL";
115}
116
117### PROJECT_ID: core
118### CATEGORY_ID: 27
119