class RedirectorTest(unittest.TestCase): def setUp(self): self._redirector = Redirector( CompiledFileSystem.Factory(ObjectStoreCreator.ForTest()), file_system) def testExternalRedirection(self): self.assertEqual('http://something.absolute.com/', self._redirector.Redirect(HOST, 'index.html')) self.assertEqual( 'http://lmgtfy.com', self._redirector.Redirect(HOST, 'extensions/manifest/more-info')) def testAbsoluteRedirection(self): self.assertEqual('/apps/about_apps.html', self._redirector.Redirect(HOST, 'apps/index.html')) self.assertEqual('/index.html', self._redirector.Redirect(HOST, '')) self.assertEqual('/index.html', self._redirector.Redirect(HOST, 'home')) def testRelativeRedirection(self): self.assertEqual( '/extensions/manifest.html', self._redirector.Redirect(HOST, 'extensions/manifest/')) self.assertEqual( '/extensions/manifest.html', self._redirector.Redirect(HOST, 'extensions/manifest')) self.assertEqual('/index.html', self._redirector.Redirect(HOST, 'apps/')) def testNotFound(self): self.assertEqual(None, self._redirector.Redirect(HOST, 'not/a/real/path')) self.assertEqual( None, self._redirector.Redirect(HOST, 'public/apps/okay.html')) def testOldHosts(self): self.assertEqual( 'https://developer.chrome.com/', self._redirector.Redirect('http://code.google.com', '')) self.assertEqual( 'https://developer.chrome.com/', self._redirector.Redirect('https://code.google.com', '')) def testCron(self): self._redirector.Cron().Get() expected_paths = set([ 'redirects.json', 'apps/redirects.json', 'extensions/redirects.json', 'extensions/manifest/redirects.json' ]) for path in expected_paths: self.assertEqual( Parse(file_system.ReadSingle(path).Get()), # Access the cache's object store to see what files were hit during # the cron run. Returns strings parsed as JSON. # TODO(jshumway): Make a non hack version of this check. self._redirector._cache._file_object_store.Get( path).Get()._cache_data)
class RedirectorTest(unittest.TestCase): def setUp(self): self._redirector = Redirector( CompiledFileSystem.Factory(ObjectStoreCreator.ForTest()), file_system) def testExternalRedirection(self): self.assertEqual( 'http://something.absolute.com/', self._redirector.Redirect(HOST, 'index.html')) self.assertEqual( 'http://lmgtfy.com', self._redirector.Redirect(HOST, 'extensions/manifest/more-info')) def testAbsoluteRedirection(self): self.assertEqual( '/index.html', self._redirector.Redirect(HOST, '')) self.assertEqual( '/bar.html', self._redirector.Redirect(HOST, 'apps/foo.html')) def testRelativeRedirection(self): self.assertEqual( 'apps/about_apps.html', self._redirector.Redirect(HOST, 'apps/index.html')) self.assertEqual( 'extensions/manifest.html', self._redirector.Redirect(HOST, 'extensions/manifest/')) self.assertEqual( 'extensions/manifest.html', self._redirector.Redirect(HOST, 'extensions/manifest')) self.assertEqual( 'index.html', self._redirector.Redirect(HOST, 'apps/')) self.assertEqual( 'index.html', self._redirector.Redirect(HOST, 'home')) def testNotFound(self): self.assertEqual( None, self._redirector.Redirect(HOST, 'not/a/real/path')) self.assertEqual( None, self._redirector.Redirect(HOST, 'public/apps/okay.html')) def testOldHosts(self): self.assertEqual( 'https://developer.chrome.com/', self._redirector.Redirect('http://code.google.com', '')) self.assertEqual( 'https://developer.chrome.com/', self._redirector.Redirect('https://code.google.com', '')) def testCron(self): self._redirector.Cron().Get() expected_paths = set([ 'redirects.json', 'apps/redirects.json', 'extensions/redirects.json', 'extensions/manifest/redirects.json' ]) for path in expected_paths: self.assertEqual( Parse(file_system.ReadSingle(path).Get()), # Access the cache's object store to see what files were hit during # the cron run. Returns strings parsed as JSON. # TODO(jshumway): Make a non hack version of this check. self._redirector._cache._file_object_store.Get( path).Get()._cache_data) def testDirectoryRedirection(self): # Simple redirect. self.assertEqual( 'extensions/manifest.html', self._redirector.Redirect(HOST, 'extensions/dev/manifest')) # Multiple hops with one file. self.assertEqual( 'extensions/r4/manifest.html', self._redirector.Redirect(HOST, 'extensions/r1/manifest')) # Multiple hops w/ multiple redirection files. self.assertEqual( 'extensions/r6/directory/manifest.html', self._redirector.Redirect(HOST, 'extensions/r5/manifest')) # Redirection from root directory redirector. self.assertEqual( 'apps/about_apps.html', self._redirector.Redirect(HOST, 'foo/index.html')) # Short to long. self.assertEqual( 'extensions/short/index.html', self._redirector.Redirect(HOST, 'extensions/a/very/long/dir/chain/index')) # Long to short. self.assertEqual( 'extensions/another/long/chain/index.html', self._redirector.Redirect(HOST, 'extensions/_short/index')) # Directory redirection without a redirects.json in final directory. self.assertEqual( 'extensions/noredirects2/file', self._redirector.Redirect(HOST, 'extensions/noredirects1/file')) # Directory redirection with redirects.json without rule for the filename. self.assertEqual( 'extensions/nofile2/file', self._redirector.Redirect(HOST, 'extensions/nofile1/file')) # Relative directory path. self.assertEqual( 'index.html', self._redirector.Redirect(HOST, 'relative_directory/home')) # Shallower directory redirects have priority. self.assertEqual( 'priority/GOOD/index', self._redirector.Redirect(HOST, 'priority/directory/index')) # Don't infinitely redirect. self.assertEqual('infinite_redirect/loop/index', self._redirector.Redirect(HOST, 'infinite_redirect/index')) # If a parent directory is redirected, redirect children properly. self.assertEqual('parent_redirect/b/c/index', self._redirector.Redirect(HOST, 'parent_redirect/a/c/index'))