blob: c19afc65a9f207369e41cd62964949d8791a7a2a [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Unit tests for verification/project_base.py."""
import logging
import os
import re
import sys
import unittest
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(ROOT_DIR, '..'))
import find_depot_tools # pylint: disable=W0611
import breakpad
# From tests/
import mocks
from verification import project_base
class ProjectBaseTest(mocks.TestCase):
def test_skip(self):
self._check(project_base.base.IGNORED, '', False)
def test_base(self):
self.pending.base_url = 'http://example.com/'
self._check(project_base.base.SUCCEEDED, '', False)
def test_relpath(self):
self.pending.base_url = 'http://example.com/foo/bar'
self._check(project_base.base.SUCCEEDED, 'foo/bar', False)
def test_base_dupe(self):
self.pending.base_url = 'http://example2.com/foo'
self._check(project_base.base.SUCCEEDED, 'foo', True)
def _check(self, state, relpath, expected_stack):
stack = []
self.mock(breakpad, 'SendStack', lambda *args: stack.append(args))
base = re.escape('http://example.com/')
base2 = re.escape('http://example2.com/')
ver = project_base.ProjectBaseUrlVerifier(
[
r'^%s$' % base,
r'^%s(.+)$' % base,
r'^%s(.+)$' % base2,
r'^%s(.+)$' % base2,
])
ver.verify(self.pending)
ver.update_status([self.pending])
name = project_base.ProjectBaseUrlVerifier.name
self.assertEqual([name], self.pending.verifications.keys())
self.assertEqual(None, self.pending.verifications[name].error_message)
self.assertEqual(self.pending.verifications[name].get_state(), state)
self.assertEqual(relpath, self.pending.relpath)
if expected_stack:
self.assertEqual(1, len(stack))
self.assertEqual(2, len(stack[0]))
self.assertEqual(
('pending.base_url triggered multiple matches',), stack[0][0].args)
self.assertEqual('', stack[0][1])
else:
self.assertEqual([], stack)
if __name__ == '__main__':
logging.basicConfig(level=logging.ERROR)
unittest.main()