1(*
2Module: Test_Cups
3  Provides unit tests and examples for the <Cups> lens.
4*)
5
6module Test_Cups =
7
8(* Variable: conf *)
9let conf = "# Sample configuration file for the CUPS scheduler.
10LogLevel warn
11
12# Deactivate CUPS' internal logrotating, as we provide a better one, especially
13# LogLevel debug2 gets usable now
14MaxLogSize 0
15
16# Administrator user group...
17SystemGroup lpadmin
18
19
20# Only listen for connections from the local machine.
21Listen localhost:631
22Listen /var/run/cups/cups.sock
23
24# Show shared printers on the local network.
25BrowseOrder allow,deny
26BrowseAllow all
27BrowseLocalProtocols CUPS dnssd
28BrowseAddress @LOCAL
29
30# Default authentication type, when authentication is required...
31DefaultAuthType Basic
32
33# Web interface setting...
34WebInterface Yes
35
36# Restrict access to the server...
37<Location />
38  Order allow,deny
39</Location>
40
41# Restrict access to the admin pages...
42<Location /admin>
43  Order allow,deny
44</Location>
45
46# Restrict access to configuration files...
47<Location /admin/conf>
48  AuthType Default
49  Require user @SYSTEM
50  Order allow,deny
51</Location>
52
53# Set the default printer/job policies...
54<Policy default>
55  # Job/subscription privacy...
56  JobPrivateAccess default
57  JobPrivateValues default
58  SubscriptionPrivateAccess default
59  SubscriptionPrivateValues default
60
61  # Job-related operations must be done by the owner or an administrator...
62  <Limit Create-Job Print-Job Print-URI Validate-Job>
63    Order deny,allow
64  </Limit>
65
66  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
67    Require user @OWNER @SYSTEM
68    Order deny,allow
69  </Limit>
70
71  # All administration operations require an administrator to authenticate...
72  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default CUPS-Get-Devices>
73    AuthType Default
74    Require user @SYSTEM
75    Order deny,allow
76  </Limit>
77
78  # All printer operations require a printer operator to authenticate...
79  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
80    AuthType Default
81    Require user @SYSTEM
82    Order deny,allow
83  </Limit>
84
85  # Only the owner or an administrator can cancel or authenticate a job...
86  <Limit Cancel-Job CUPS-Authenticate-Job>
87    Require user @OWNER @SYSTEM
88    Order deny,allow
89  </Limit>
90
91  <Limit All>
92    Order deny,allow
93  </Limit>
94</Policy>
95
96# Set the authenticated printer/job policies...
97<Policy authenticated>
98  # Job/subscription privacy...
99  JobPrivateAccess default
100  JobPrivateValues default
101  SubscriptionPrivateAccess default
102  SubscriptionPrivateValues default
103
104  # Job-related operations must be done by the owner or an administrator...
105  <Limit Create-Job Print-Job Print-URI Validate-Job>
106    AuthType Default
107    Order deny,allow
108  </Limit>
109
110  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job Cancel-My-Jobs Close-Job CUPS-Move-Job CUPS-Get-Document>
111    AuthType Default
112    Require user @OWNER @SYSTEM
113    Order deny,allow
114  </Limit>
115
116  # All administration operations require an administrator to authenticate...
117  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
118    AuthType Default
119    Require user @SYSTEM
120    Order deny,allow
121  </Limit>
122
123  # All printer operations require a printer operator to authenticate...
124  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>
125    AuthType Default
126    Require user @SYSTEM
127    Order deny,allow
128  </Limit>
129
130  # Only the owner or an administrator can cancel or authenticate a job...
131  <Limit Cancel-Job CUPS-Authenticate-Job>
132    AuthType Default
133    Require user @OWNER @SYSTEM
134    Order deny,allow
135  </Limit>
136
137  <Limit All>
138    Order deny,allow
139  </Limit>
140</Policy>
141"
142
143(* Test: Simplevars.lns *)
144test Cups.lns get conf =
145  { "#comment" = "Sample configuration file for the CUPS scheduler." }
146  { "directive" = "LogLevel"
147    { "arg" = "warn" }
148  }
149  {  }
150  { "#comment" = "Deactivate CUPS' internal logrotating, as we provide a better one, especially" }
151  { "#comment" = "LogLevel debug2 gets usable now" }
152  { "directive" = "MaxLogSize"
153    { "arg" = "0" }
154  }
155  {  }
156  { "#comment" = "Administrator user group..." }
157  { "directive" = "SystemGroup"
158    { "arg" = "lpadmin" }
159  }
160  {  }
161  {  }
162  { "#comment" = "Only listen for connections from the local machine." }
163  { "directive" = "Listen"
164    { "arg" = "localhost:631" }
165  }
166  { "directive" = "Listen"
167    { "arg" = "/var/run/cups/cups.sock" }
168  }
169  {  }
170  { "#comment" = "Show shared printers on the local network." }
171  { "directive" = "BrowseOrder"
172    { "arg" = "allow,deny" }
173  }
174  { "directive" = "BrowseAllow"
175    { "arg" = "all" }
176  }
177  { "directive" = "BrowseLocalProtocols"
178    { "arg" = "CUPS" }
179    { "arg" = "dnssd" }
180  }
181  { "directive" = "BrowseAddress"
182    { "arg" = "@LOCAL" }
183  }
184  {  }
185  { "#comment" = "Default authentication type, when authentication is required..." }
186  { "directive" = "DefaultAuthType"
187    { "arg" = "Basic" }
188  }
189  {  }
190  { "#comment" = "Web interface setting..." }
191  { "directive" = "WebInterface"
192    { "arg" = "Yes" }
193  }
194  {  }
195  { "#comment" = "Restrict access to the server..." }
196  { "Location"
197    { "arg" = "/" }
198    { "directive" = "Order"
199      { "arg" = "allow,deny" }
200    }
201  }
202  { "#comment" = "Restrict access to the admin pages..." }
203  { "Location"
204    { "arg" = "/admin" }
205    { "directive" = "Order"
206      { "arg" = "allow,deny" }
207    }
208  }
209  { "#comment" = "Restrict access to configuration files..." }
210  { "Location"
211    { "arg" = "/admin/conf" }
212    { "directive" = "AuthType"
213      { "arg" = "Default" }
214    }
215    { "directive" = "Require"
216      { "arg" = "user" }
217      { "arg" = "@SYSTEM" }
218    }
219    { "directive" = "Order"
220      { "arg" = "allow,deny" }
221    }
222  }
223  { "#comment" = "Set the default printer/job policies..." }
224  { "Policy"
225    { "arg" = "default" }
226    { "#comment" = "Job/subscription privacy..." }
227    { "directive" = "JobPrivateAccess"
228      { "arg" = "default" }
229    }
230    { "directive" = "JobPrivateValues"
231      { "arg" = "default" }
232    }
233    { "directive" = "SubscriptionPrivateAccess"
234      { "arg" = "default" }
235    }
236    { "directive" = "SubscriptionPrivateValues"
237      { "arg" = "default" }
238    }
239    {  }
240    { "#comment" = "Job-related operations must be done by the owner or an administrator..." }
241    { "Limit"
242      { "arg" = "Create-Job" }
243      { "arg" = "Print-Job" }
244      { "arg" = "Print-URI" }
245      { "arg" = "Validate-Job" }
246      { "directive" = "Order"
247        { "arg" = "deny,allow" }
248      }
249    }
250    { "Limit"
251      { "arg" = "Send-Document" }
252      { "arg" = "Send-URI" }
253      { "arg" = "Hold-Job" }
254      { "arg" = "Release-Job" }
255      { "arg" = "Restart-Job" }
256      { "arg" = "Purge-Jobs" }
257      { "arg" = "Set-Job-Attributes" }
258      { "arg" = "Create-Job-Subscription" }
259      { "arg" = "Renew-Subscription" }
260      { "arg" = "Cancel-Subscription" }
261      { "arg" = "Get-Notifications" }
262      { "arg" = "Reprocess-Job" }
263      { "arg" = "Cancel-Current-Job" }
264      { "arg" = "Suspend-Current-Job" }
265      { "arg" = "Resume-Job" }
266      { "arg" = "Cancel-My-Jobs" }
267      { "arg" = "Close-Job" }
268      { "arg" = "CUPS-Move-Job" }
269      { "arg" = "CUPS-Get-Document" }
270      { "directive" = "Require"
271        { "arg" = "user" }
272        { "arg" = "@OWNER" }
273        { "arg" = "@SYSTEM" }
274      }
275      { "directive" = "Order"
276        { "arg" = "deny,allow" }
277      }
278    }
279    { "#comment" = "All administration operations require an administrator to authenticate..." }
280    { "Limit"
281      { "arg" = "CUPS-Add-Modify-Printer" }
282      { "arg" = "CUPS-Delete-Printer" }
283      { "arg" = "CUPS-Add-Modify-Class" }
284      { "arg" = "CUPS-Delete-Class" }
285      { "arg" = "CUPS-Set-Default" }
286      { "arg" = "CUPS-Get-Devices" }
287      { "directive" = "AuthType"
288        { "arg" = "Default" }
289      }
290      { "directive" = "Require"
291        { "arg" = "user" }
292        { "arg" = "@SYSTEM" }
293      }
294      { "directive" = "Order"
295        { "arg" = "deny,allow" }
296      }
297    }
298    { "#comment" = "All printer operations require a printer operator to authenticate..." }
299    { "Limit"
300      { "arg" = "Pause-Printer" }
301      { "arg" = "Resume-Printer" }
302      { "arg" = "Enable-Printer" }
303      { "arg" = "Disable-Printer" }
304      { "arg" = "Pause-Printer-After-Current-Job" }
305      { "arg" = "Hold-New-Jobs" }
306      { "arg" = "Release-Held-New-Jobs" }
307      { "arg" = "Deactivate-Printer" }
308      { "arg" = "Activate-Printer" }
309      { "arg" = "Restart-Printer" }
310      { "arg" = "Shutdown-Printer" }
311      { "arg" = "Startup-Printer" }
312      { "arg" = "Promote-Job" }
313      { "arg" = "Schedule-Job-After" }
314      { "arg" = "Cancel-Jobs" }
315      { "arg" = "CUPS-Accept-Jobs" }
316      { "arg" = "CUPS-Reject-Jobs" }
317      { "directive" = "AuthType"
318        { "arg" = "Default" }
319      }
320      { "directive" = "Require"
321        { "arg" = "user" }
322        { "arg" = "@SYSTEM" }
323      }
324      { "directive" = "Order"
325        { "arg" = "deny,allow" }
326      }
327    }
328    { "#comment" = "Only the owner or an administrator can cancel or authenticate a job..." }
329    { "Limit"
330      { "arg" = "Cancel-Job" }
331      { "arg" = "CUPS-Authenticate-Job" }
332      { "directive" = "Require"
333        { "arg" = "user" }
334        { "arg" = "@OWNER" }
335        { "arg" = "@SYSTEM" }
336      }
337      { "directive" = "Order"
338        { "arg" = "deny,allow" }
339      }
340    }
341    { "Limit"
342      { "arg" = "All" }
343      { "directive" = "Order"
344        { "arg" = "deny,allow" }
345      }
346    }
347  }
348  { "#comment" = "Set the authenticated printer/job policies..." }
349  { "Policy"
350    { "arg" = "authenticated" }
351    { "#comment" = "Job/subscription privacy..." }
352    { "directive" = "JobPrivateAccess"
353      { "arg" = "default" }
354    }
355    { "directive" = "JobPrivateValues"
356      { "arg" = "default" }
357    }
358    { "directive" = "SubscriptionPrivateAccess"
359      { "arg" = "default" }
360    }
361    { "directive" = "SubscriptionPrivateValues"
362      { "arg" = "default" }
363    }
364    {  }
365    { "#comment" = "Job-related operations must be done by the owner or an administrator..." }
366    { "Limit"
367      { "arg" = "Create-Job" }
368      { "arg" = "Print-Job" }
369      { "arg" = "Print-URI" }
370      { "arg" = "Validate-Job" }
371      { "directive" = "AuthType"
372        { "arg" = "Default" }
373      }
374      { "directive" = "Order"
375        { "arg" = "deny,allow" }
376      }
377    }
378    { "Limit"
379      { "arg" = "Send-Document" }
380      { "arg" = "Send-URI" }
381      { "arg" = "Hold-Job" }
382      { "arg" = "Release-Job" }
383      { "arg" = "Restart-Job" }
384      { "arg" = "Purge-Jobs" }
385      { "arg" = "Set-Job-Attributes" }
386      { "arg" = "Create-Job-Subscription" }
387      { "arg" = "Renew-Subscription" }
388      { "arg" = "Cancel-Subscription" }
389      { "arg" = "Get-Notifications" }
390      { "arg" = "Reprocess-Job" }
391      { "arg" = "Cancel-Current-Job" }
392      { "arg" = "Suspend-Current-Job" }
393      { "arg" = "Resume-Job" }
394      { "arg" = "Cancel-My-Jobs" }
395      { "arg" = "Close-Job" }
396      { "arg" = "CUPS-Move-Job" }
397      { "arg" = "CUPS-Get-Document" }
398      { "directive" = "AuthType"
399        { "arg" = "Default" }
400      }
401      { "directive" = "Require"
402        { "arg" = "user" }
403        { "arg" = "@OWNER" }
404        { "arg" = "@SYSTEM" }
405      }
406      { "directive" = "Order"
407        { "arg" = "deny,allow" }
408      }
409    }
410    { "#comment" = "All administration operations require an administrator to authenticate..." }
411    { "Limit"
412      { "arg" = "CUPS-Add-Modify-Printer" }
413      { "arg" = "CUPS-Delete-Printer" }
414      { "arg" = "CUPS-Add-Modify-Class" }
415      { "arg" = "CUPS-Delete-Class" }
416      { "arg" = "CUPS-Set-Default" }
417      { "directive" = "AuthType"
418        { "arg" = "Default" }
419      }
420      { "directive" = "Require"
421        { "arg" = "user" }
422        { "arg" = "@SYSTEM" }
423      }
424      { "directive" = "Order"
425        { "arg" = "deny,allow" }
426      }
427    }
428    { "#comment" = "All printer operations require a printer operator to authenticate..." }
429    { "Limit"
430      { "arg" = "Pause-Printer" }
431      { "arg" = "Resume-Printer" }
432      { "arg" = "Enable-Printer" }
433      { "arg" = "Disable-Printer" }
434      { "arg" = "Pause-Printer-After-Current-Job" }
435      { "arg" = "Hold-New-Jobs" }
436      { "arg" = "Release-Held-New-Jobs" }
437      { "arg" = "Deactivate-Printer" }
438      { "arg" = "Activate-Printer" }
439      { "arg" = "Restart-Printer" }
440      { "arg" = "Shutdown-Printer" }
441      { "arg" = "Startup-Printer" }
442      { "arg" = "Promote-Job" }
443      { "arg" = "Schedule-Job-After" }
444      { "arg" = "Cancel-Jobs" }
445      { "arg" = "CUPS-Accept-Jobs" }
446      { "arg" = "CUPS-Reject-Jobs" }
447      { "directive" = "AuthType"
448        { "arg" = "Default" }
449      }
450      { "directive" = "Require"
451        { "arg" = "user" }
452        { "arg" = "@SYSTEM" }
453      }
454      { "directive" = "Order"
455        { "arg" = "deny,allow" }
456      }
457    }
458    { "#comment" = "Only the owner or an administrator can cancel or authenticate a job..." }
459    { "Limit"
460      { "arg" = "Cancel-Job" }
461      { "arg" = "CUPS-Authenticate-Job" }
462      { "directive" = "AuthType"
463        { "arg" = "Default" }
464      }
465      { "directive" = "Require"
466        { "arg" = "user" }
467        { "arg" = "@OWNER" }
468        { "arg" = "@SYSTEM" }
469      }
470      { "directive" = "Order"
471        { "arg" = "deny,allow" }
472      }
473    }
474    { "Limit"
475      { "arg" = "All" }
476      { "directive" = "Order"
477        { "arg" = "deny,allow" }
478      }
479    }
480  }
481
482