1 #!/usr/bin/env python 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 4 # found in the LICENSE file. 5 6 import unittest 7 8 from github_file_system_provider import GithubFileSystemProvider 9 from instance_servlet import InstanceServlet 10 from servlet import Request 11 from fail_on_access_file_system import FailOnAccessFileSystem 12 from test_branch_utility import TestBranchUtility 13 from test_util import DisableLogging 14 15 # NOTE(kalman): The ObjectStore created by the InstanceServlet is backed onto 16 # our fake AppEngine memcache/datastore, so the tests aren't isolated. 17 class _TestDelegate(InstanceServlet.Delegate): 18 def __init__(self, file_system_type): 19 self._file_system_type = file_system_type 20 21 def CreateBranchUtility(self, object_store_creator): 22 return TestBranchUtility.CreateWithCannedData() 23 24 def CreateGithubFileSystemProvider(self, object_store_creator): 25 return GithubFileSystemProvider.ForEmpty() 26 27 class InstanceServletTest(unittest.TestCase): 28 '''Tests that if the file systems underlying the docserver's data fail, 29 the instance servlet still returns 404s or 301s with a best-effort. 30 It should never return a 500 (i.e. crash). 31 ''' 32 33 @DisableLogging('warning') 34 def testHostFileSystemNotAccessed(self): 35 delegate = _TestDelegate(FailOnAccessFileSystem) 36 constructor = InstanceServlet.GetConstructor(delegate_for_test=delegate) 37 def test_path(path, status=404): 38 response = constructor(Request.ForTest(path)).Get() 39 self.assertEqual(status, response.status) 40 test_path('extensions/storage.html') 41 test_path('apps/storage.html') 42 test_path('extensions/examples/foo.zip') 43 test_path('extensions/examples/foo.html') 44 test_path('static/foo.css') 45 test_path('beta/extensions/storage.html', status=301) 46 test_path('beta/apps/storage.html', status=301) 47 test_path('beta/extensions/examples/foo.zip', status=301) 48 test_path('beta/extensions/examples/foo.html', status=301) 49 test_path('beta/static/foo.css', status=301) 50 51 if __name__ == '__main__': 52 unittest.main() 53