summaryrefslogtreecommitdiffstats
path: root/tests/DumpRenderTree2/assets/run-apache2.py
blob: d7590ee48f68e7114f5235f758ad6ffe9186f7c4 (plain)
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
87
88
89
90
91
92
93
#!/usr/bin/python

"""Start, stop, or restart apache2 server.

  Apache2 must be installed with mod_php!

  Usage:
    run-apache2.py start|stop|restart
"""

import sys
import os
import subprocess
import logging

def main():
  if len(sys.argv) < 2:
    run_cmd = ""
  else:
    run_cmd = sys.argv[1]

  #Setup logging class
  logging.basicConfig(level=logging.INFO, format='%(message)s')

  if not run_cmd in ("start", "stop", "restart"):
    logging.info("illegal argument: " + run_cmd)
    logging.info("Usage: python run-apache2.py start|stop|restart")
    return

  #Create /tmp/WebKit if it doesn't exist. This is needed for various files used by apache2
  tmp_WebKit = os.path.join("/tmp", "WebKit")
  if not os.path.exists(tmp_WebKit):
    os.mkdir(tmp_WebKit)

  #Get the path to android tree root based on the script location.
  #Basically we go 5 levels up
  parent = os.pardir
  script_location = os.path.abspath(os.path.dirname(sys.argv[0]))
  android_tree_root = os.path.join(script_location, parent, parent, parent, parent, parent)
  android_tree_root = os.path.normpath(android_tree_root)

  #Prepare the command to set ${APACHE_RUN_USER} and ${APACHE_RUN_GROUP}
  envvars_path = os.path.join("/etc", "apache2", "envvars")
  export_envvars_cmd = "source " + envvars_path

  error_log_path = os.path.join(tmp_WebKit, "apache2-error.log")

  #Prepare the command to (re)start/stop the server with specified settings
  apache2_restart_cmd = "apache2 -k " + run_cmd
  directives  = " -c \"ServerRoot " + android_tree_root + "\""
  directives += " -c \"DocumentRoot " + os.path.join("external", "webkit") + "\""

  #This directive is commented out in apache2-debian-httpd.conf for some reason
  #However, it is useful to browse through tests in the browser, so it's added here.
  #One thing to note is that because of problems with mod_dir and port numbers, mod_dir
  #is turned off. That means that there _must_ be a trailing slash at the end of URL
  #for auto indexes to work correctly.
  directives += " -c \"LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so\""

  directives += " -c \"ErrorLog " + error_log_path +"\""
  directives += " -c \"SSLCertificateFile " + os.path.join ("external", "webkit", "LayoutTests",
    "http", "conf", "webkit-httpd.pem") + "\""
  directives += " -c \"User ${APACHE_RUN_USER}\""
  directives += " -c \"Group ${APACHE_RUN_GROUP}\""
  directives += " -C \"TypesConfig " + os.path.join("/etc", "mime.types") + "\""
  conf_file_cmd = " -f " + os.path.join(android_tree_root, "external", "webkit", "LayoutTests",
    "http", "conf", "apache2-debian-httpd.conf")

  #Try to execute the commands
  logging.info("Will " + run_cmd + " apache2 server.")
  cmd = export_envvars_cmd + " && " + apache2_restart_cmd + directives + conf_file_cmd
  p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  (out, err) = p.communicate()

  #Output the stdout from the command to console
  logging.info(out)

  #Report any errors
  if p.returncode != 0:
    logging.info("!! ERRORS:")

    if err.find(envvars_path) != -1:
      logging.info(err)
    elif err.find('command not found') != -1:
      logging.info("apache2 is probably not installed")
    else:
      logging.info(err)
      logging.info("Try looking in " + error_log_path + " for details")
  else:
    logging.info("OK")

if __name__ == "__main__":
  main();