module Test_httpd =
(* directives testing *)
let d1 = "ServerRoot \"/etc/apache2\"\n"
test Httpd.directive get d1 =
{ "directive" = "ServerRoot"
{ "arg" = "\"/etc/apache2\"" }
}
(* simple quotes *)
let d1s = "ServerRoot '/etc/apache2'\n"
test Httpd.directive get d1s =
{ "directive" = "ServerRoot"
{ "arg" = "'/etc/apache2'" }
}
let d2 = "ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/\n"
test Httpd.directive get d2 =
{ "directive" = "ScriptAlias"
{ "arg" = "/cgi-bin/" }
{ "arg" = "/usr/lib/cgi-bin/" }
}
let d3 = "LockFile /var/lock/apache2/accept.lock\n"
test Httpd.directive get d3 =
{ "directive" = "LockFile"
{ "arg" = "/var/lock/apache2/accept.lock" }
}
let c1 = "
"
let c1_put =
"
"
test Httpd.lns get c1 = { }{ "IfModule" }
test Httpd.lns put c1 after set "/IfModule/arg[1]" "foo";
set "/IfModule/arg[2]" "bar" = c1_put
let c2 = "
LockFile /var/lock/apache2/accept.lock
"
test Httpd.lns get c2 =
{ }
{ "IfModule"
{ "arg" = "!mpm_winnt.c" }
{ "IfModule"
{ "arg" = "!mpm_netware.c" }
{ "directive" = "LockFile"
{ "arg" = "/var/lock/apache2/accept.lock" }
}
}
}
(* arguments must be the first child of the section *)
test Httpd.lns put c2 after rm "/IfModule/arg";
insb "arg" "/IfModule/*[1]";
set "/IfModule/arg" "foo" =
"
LockFile /var/lock/apache2/accept.lock
"
let c3 = "
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestsPerChild 0
"
test Httpd.lns get c3 =
{ }
{ "IfModule"
{ "arg" = "mpm_event_module" }
{ "directive" = "StartServers"
{ "arg" = "2" }
}
{ "directive" = "MaxClients"
{ "arg" = "150" }
}
{ "directive" = "MinSpareThreads"
{ "arg" = "25" }
}
{ "directive" = "MaxSpareThreads"
{ "arg" = "75" }
}
{ "directive" = "ThreadLimit"
{ "arg" = "64" }
}
{ "directive" = "ThreadsPerChild"
{ "arg" = "25" }
}
{ "directive" = "MaxRequestsPerChild"
{ "arg" = "0" }
}
}
let c4 = "
Order allow,deny
Deny from all
Satisfy all
"
test Httpd.lns get c4 =
{ }
{ "Files"
{ "arg" = "~" }
{ "arg" = "\"^\.ht\"" }
{ "directive" = "Order"
{ "arg" = "allow,deny" }
}
{ "directive" = "Deny"
{ "arg" = "from" }
{ "arg" = "all" }
}
{ "directive" = "Satisfy"
{ "arg" = "all" }
}
}
let c5 = "LogFormat \"%{User-agent}i\" agent\n"
test Httpd.lns get c5 =
{ "directive" = "LogFormat"
{ "arg" = "\"%{User-agent}i\"" }
{ "arg" = "agent" }
}
let c7 = "LogFormat \"%v:%p %h %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"\" vhost_combined\n"
test Httpd.lns get c7 =
{ "directive" = "LogFormat"
{ "arg" = "\"%v:%p %h %l %u %t \\"%r\\" %>s %O \\"%{Referer}i\\" \\"%{User-Agent}i\\"\"" }
{ "arg" = "vhost_combined" }
}
let c8 = "IndexIgnore .??* *~ *# RCS CVS *,v *,t \n"
test Httpd.directive get c8 =
{ "directive" = "IndexIgnore"
{ "arg" = ".??*" }
{ "arg" = "*~" }
{ "arg" = "*#" }
{ "arg" = "RCS" }
{ "arg" = "CVS" }
{ "arg" = "*,v" }
{ "arg" = "*,t" }
}
(* FIXME: not yet supported:
* The backslash "\" may be used as the last character on a line to indicate
* that the directive continues onto the next line. There must be no other
* characters or white space between the backslash and the end of the line.
*)
let multiline = "Options Indexes \
FollowSymLinks MultiViews
"
test Httpd.directive get multiline =
{ "directive" = "Options"
{ "arg" = "Indexes" }
{ "arg" = "FollowSymLinks" }
{ "arg" = "MultiViews" }
}
let conf2 = "
ServerAdmin webmaster@localhost
DocumentRoot /var/www
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
SSLRequireSSL
Alias /doc/ \"/usr/share/doc/\"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
"
test Httpd.lns get conf2 =
{ "VirtualHost"
{ "arg" = "*:80" }
{ "directive" = "ServerAdmin"
{ "arg" = "webmaster@localhost" }
}
{ }
{ "directive" = "DocumentRoot"
{ "arg" = "/var/www" }
}
{ "Directory"
{ "arg" = "/" }
{ "directive" = "Options"
{ "arg" = "FollowSymLinks" }
}
{ "directive" = "AllowOverride"
{ "arg" = "None" }
}
}
{ "Directory"
{ "arg" = "/var/www/" }
{ "directive" = "Options"
{ "arg" = "Indexes" }
{ "arg" = "FollowSymLinks" }
{ "arg" = "MultiViews" }
}
{ "directive" = "AllowOverride"
{ "arg" = "None" }
}
{ "directive" = "Order"
{ "arg" = "allow,deny" }
}
{ "directive" = "allow"
{ "arg" = "from" }
{ "arg" = "all" }
}
}
{ }
{ "directive" = "ScriptAlias"
{ "arg" = "/cgi-bin/" }
{ "arg" = "/usr/lib/cgi-bin/" }
}
{ "Directory"
{ "arg" = "\"/usr/lib/cgi-bin\"" }
{ "directive" = "AllowOverride"
{ "arg" = "None" }
}
{ "directive" = "Options"
{ "arg" = "+ExecCGI" }
{ "arg" = "-MultiViews" }
{ "arg" = "+SymLinksIfOwnerMatch" }
}
{ "directive" = "Order"
{ "arg" = "allow,deny" }
}
{ "directive" = "Allow"
{ "arg" = "from" }
{ "arg" = "all" }
}
}
{ }
{ "directive" = "ErrorLog"
{ "arg" = "/var/log/apache2/error.log" }
}
{ }
{ "#comment" = "Possible values include: debug, info, notice, warn, error, crit," }
{ "#comment" = "alert, emerg." }
{ "directive" = "LogLevel"
{ "arg" = "warn" }
}
{ }
{ "directive" = "CustomLog"
{ "arg" = "/var/log/apache2/access.log" }
{ "arg" = "combined" }
}
{ }
{ "directive" = "SSLRequireSSL" }
{ }
{ "directive" = "Alias"
{ "arg" = "/doc/" }
{ "arg" = "\"/usr/share/doc/\"" }
}
{ "Directory"
{ "arg" = "\"/usr/share/doc/\"" }
{ "directive" = "Options"
{ "arg" = "Indexes" }
{ "arg" = "MultiViews" }
{ "arg" = "FollowSymLinks" }
}
{ "directive" = "AllowOverride"
{ "arg" = "None" }
}
{ "directive" = "Order"
{ "arg" = "deny,allow" }
}
{ "directive" = "Deny"
{ "arg" = "from" }
{ "arg" = "all" }
}
{ "directive" = "Allow"
{ "arg" = "from" }
{ "arg" = "127.0.0.0/255.0.0.0" }
{ "arg" = "::1/128" }
}
}
{ }
}