Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Side by Side Diff: chrome/common/extensions/docs/server2/integration_test.py

Issue 14856006: Docserver: achieve online vs offline (cron vs instance) behaviour at the object (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved. 2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 from __future__ import print_function
7
8 # Run build_server so that files needed by tests are copied to the local 6 # Run build_server so that files needed by tests are copied to the local
9 # third_party directory. 7 # third_party directory.
10 import build_server 8 import build_server
11 build_server.main() 9 build_server.main()
12 10
13 import logging 11 import logging
14 import optparse 12 import optparse
15 import os 13 import os
16 import sys 14 import sys
17 import time 15 import time
18 import unittest 16 import unittest
19 17
20 from cron_servlet import CronServlet 18 from cron_servlet import CronServlet
21 from local_renderer import LocalRenderer 19 from local_renderer import LocalRenderer
22 from render_servlet import AlwaysOnline 20 from test_util import EnableLogging, DisableLogging
23 from test_util import DisableLogging
24 21
25 # Arguments set up if __main__ specifies them. 22 # Arguments set up if __main__ specifies them.
26 _BASE_PATH = os.path.join( 23 _BASE_PATH = os.path.join(
27 os.path.abspath(os.path.dirname(__file__)), os.pardir, os.pardir) 24 os.path.abspath(os.path.dirname(__file__)), os.pardir, os.pardir)
28 _EXPLICIT_TEST_FILES = None 25 _EXPLICIT_TEST_FILES = None
29 26
30 def _GetPublicFiles(): 27 def _GetPublicFiles():
31 '''Gets all public files mapped to their contents. 28 '''Gets all public files mapped to their contents.
32 ''' 29 '''
33 public_path = os.path.join(_BASE_PATH, 'docs', 'templates', 'public', '') 30 public_path = os.path.join(_BASE_PATH, 'docs', 'templates', 'public', '')
34 public_files = {} 31 public_files = {}
35 for path, dirs, files in os.walk(public_path, topdown=True): 32 for path, dirs, files in os.walk(public_path, topdown=True):
36 dirs[:] = [d for d in dirs if d != '.svn'] 33 dirs[:] = [d for d in dirs if d != '.svn']
37 relative_path = path[len(public_path):] 34 relative_path = path[len(public_path):]
38 for filename in files: 35 for filename in files:
39 with open(os.path.join(path, filename), 'r') as f: 36 with open(os.path.join(path, filename), 'r') as f:
40 public_files[os.path.join(relative_path, filename)] = f.read() 37 public_files[os.path.join(relative_path, filename)] = f.read()
41 return public_files 38 return public_files
42 39
43 class IntegrationTest(unittest.TestCase): 40 class IntegrationTest(unittest.TestCase):
44 def setUp(self): 41 def setUp(self):
45 self._renderer = LocalRenderer(_BASE_PATH) 42 self._renderer = LocalRenderer(_BASE_PATH)
46 43
44 @EnableLogging('info')
47 def testCronAndPublicFiles(self): 45 def testCronAndPublicFiles(self):
48 '''Runs cron then requests every public file. Cron needs to be run first 46 '''Runs cron then requests every public file. Cron needs to be run first
49 because the public file requests are offline. 47 because the public file requests are offline.
50 ''' 48 '''
51 if _EXPLICIT_TEST_FILES is not None: 49 if _EXPLICIT_TEST_FILES is not None:
52 return 50 return
53 51
54 print('Running cron...') 52 print('Running cron...')
55 start_time = time.time() 53 start_time = time.time()
56 try: 54 try:
57 logging_info = logging.info
58 logging.info = print
59 response = self._renderer.Render('/stable', servlet=CronServlet) 55 response = self._renderer.Render('/stable', servlet=CronServlet)
60 self.assertEqual(200, response.status) 56 self.assertEqual(200, response.status)
61 self.assertEqual('Success', response.content.ToString()) 57 self.assertEqual('Success', response.content.ToString())
62 finally: 58 finally:
63 logging.info = logging_info
64 print('Took %s seconds' % (time.time() - start_time)) 59 print('Took %s seconds' % (time.time() - start_time))
65 60
66 public_files = _GetPublicFiles() 61 public_files = _GetPublicFiles()
67 62
68 print('Rendering %s public files...' % len(public_files.keys())) 63 print('Rendering %s public files...' % len(public_files.keys()))
69 start_time = time.time() 64 start_time = time.time()
70 try: 65 try:
71 for path, content in _GetPublicFiles().iteritems(): 66 for path, content in _GetPublicFiles().iteritems():
72 def check_result(response): 67 def check_result(response):
73 self.assertEqual(200, response.status, 68 self.assertEqual(200, response.status,
74 'Got %s when rendering %s' % (response.status, path)) 69 'Got %s when rendering %s' % (response.status, path))
75 # This is reaaaaally rough since usually these will be tiny templates 70 # This is reaaaaally rough since usually these will be tiny templates
76 # that render large files. At least it'll catch zero-length responses. 71 # that render large files. At least it'll catch zero-length responses.
77 self.assertTrue(len(response.content) >= len(content), 72 self.assertTrue(len(response.content) >= len(content),
78 'Content was "%s" when rendering %s' % (response.content, path)) 73 'Content was "%s" when rendering %s' % (response.content, path))
79 check_result(self._renderer.Render(path)) 74 check_result(self._renderer.Render(path, offline=True))
80 # Samples are internationalized, test some locales. 75 # Samples are internationalized, test some locales.
81 if path.endswith('/samples.html'): 76 if path.endswith('/samples.html'):
82 for lang in ['en-US', 'es', 'ar']: 77 for lang in ['en-US', 'es', 'ar']:
83 check_result(self._renderer.Render( 78 check_result(self._renderer.Render(
84 path, headers={'Accept-Language': '%s;q=0.8' % lang})) 79 path,
80 headers={'Accept-Language': '%s;q=0.8' % lang},
81 offline=True))
85 finally: 82 finally:
86 print('Took %s seconds' % (time.time() - start_time)) 83 print('Took %s seconds' % (time.time() - start_time))
87 84
88 @AlwaysOnline
89 def testExplicitFiles(self): 85 def testExplicitFiles(self):
90 '''Tests just the files in _EXPLICIT_TEST_FILES. 86 '''Tests just the files in _EXPLICIT_TEST_FILES.
91 ''' 87 '''
92 if _EXPLICIT_TEST_FILES is None: 88 if _EXPLICIT_TEST_FILES is None:
93 return 89 return
94 for filename in _EXPLICIT_TEST_FILES: 90 for filename in _EXPLICIT_TEST_FILES:
95 print('Rendering %s...' % filename) 91 print('Rendering %s...' % filename)
96 start_time = time.time() 92 start_time = time.time()
97 try: 93 try:
98 response = self._renderer.Render(filename) 94 response = self._renderer.Render(filename)
99 self.assertEqual(200, response.status) 95 self.assertEqual(200, response.status)
100 self.assertTrue(response.content != '') 96 self.assertTrue(response.content != '')
101 finally: 97 finally:
102 print('Took %s seconds' % (time.time() - start_time)) 98 print('Took %s seconds' % (time.time() - start_time))
103 99
104 @DisableLogging('warning') 100 @DisableLogging('warning')
105 @AlwaysOnline
106 def testFileNotFound(self): 101 def testFileNotFound(self):
107 response = self._renderer.Render('/extensions/notfound.html') 102 response = self._renderer.Render('/extensions/notfound.html')
108 self.assertEqual(404, response.status) 103 self.assertEqual(404, response.status)
109 104
110 if __name__ == '__main__': 105 if __name__ == '__main__':
111 parser = optparse.OptionParser() 106 parser = optparse.OptionParser()
112 parser.add_option('-p', '--path', default=None) 107 parser.add_option('-p', '--path', default=None)
113 parser.add_option('-a', '--all', action='store_true', default=False) 108 parser.add_option('-a', '--all', action='store_true', default=False)
114 (opts, args) = parser.parse_args() 109 (opts, args) = parser.parse_args()
115 if not opts.all: 110 if not opts.all:
116 _EXPLICIT_TEST_FILES = args 111 _EXPLICIT_TEST_FILES = args
117 if opts.path is not None: 112 if opts.path is not None:
118 _BASE_PATH = opts.path 113 _BASE_PATH = opts.path
119 # Kill sys.argv because we have our own flags. 114 # Kill sys.argv because we have our own flags.
120 sys.argv = [sys.argv[0]] 115 sys.argv = [sys.argv[0]]
121 unittest.main() 116 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698