Example #1
0
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'))