blob: 93bb8d15ffb1495d70ac107699a0761398d80634 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2014 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.
import unittest
from owners_data_source import ParseOwnersFile, OwnersDataSource
from server_instance import ServerInstance
from servlet import Request
from test_file_system import TestFileSystem
_TEST_FS = {
'chrome': {
'browser': {
'apps': {
'platform_apps': {
'OWNERS': '\n'.join([
'# Apps owners.',
'apps@owner.tld'
]),
'api': {
'an_app_api': {
'an_app_api.cc': ''
}
}
}
},
'extensions': {
'OWNERS': '\n'.join([
'# Core owners.',
'satsuki@revocs.tld'
]),
'api': {
'some_api': {
'OWNERS': '\n'.join([
'matoi@owner.tld'
]),
'some_api.cc': ''
},
'another_api': {
'another_api.cc': '',
'another_api.h': ''
},
'moar_apis': {
'OWNERS': '\n'.join([
'# For editing moar_apis.',
'satsuki@revocs.tld'
])
}
}
}
}
},
'extensions': {
'browser': {
'api': {
'a_different_api': {
'OWNERS': '\n'.join([
'# Hallo!',
'nonon@owner.tld',
'matoi@owner.tld'
])
}
}
}
}
}
class OwnersDataSourceTest(unittest.TestCase):
def setUp(self):
server_instance = ServerInstance.ForTest(
file_system=TestFileSystem(_TEST_FS))
# Don't randomize the owners to avoid testing issues.
self._owners_ds = OwnersDataSource(server_instance,
Request.ForTest('/'),
randomize=False)
def testParseOwnersFile(self):
owners_content = '\n'.join([
'satsuki@revocs.tld',
'mankanshoku@owner.tld',
'',
'matoi@owner.tld'
])
owners, notes = ParseOwnersFile(owners_content, randomize=False)
# The order of the owners list should reflect the order of the owners file.
self.assertEqual(owners, [
{
'email': 'satsuki@revocs.tld',
'username': 'satsuki'
},
{
'email': 'mankanshoku@owner.tld',
'username': 'mankanshoku'
},
{
'email': 'matoi@owner.tld',
'username': 'matoi',
'last': True
}
])
self.assertEqual(notes, '')
owners_content_with_comments = '\n'.join([
'# This is a comment concerning this file',
'# that should not be ignored.',
'matoi@owner.tld',
'mankanshoku@owner.tld',
'',
'# Only bug satsuki if matoi or mankanshoku are unavailable.',
'satsuki@revocs.tld'
])
owners, notes = ParseOwnersFile(owners_content_with_comments,
randomize=False)
self.assertEqual(owners, [
{
'email': 'matoi@owner.tld',
'username': 'matoi'
},
{
'email': 'mankanshoku@owner.tld',
'username': 'mankanshoku'
},
{
'email': 'satsuki@revocs.tld',
'username': 'satsuki',
'last': True
}
])
self.assertEqual(notes, '\n'.join([
'This is a comment concerning this file',
'that should not be ignored.',
'Only bug satsuki if matoi or mankanshoku are unavailable.'
]))
def testCollectOwners(self):
# NOTE: Order matters. The list should be sorted by 'apiName'.
self.assertEqual(self._owners_ds.get('apis'), [{
'apiName': 'Core Extensions/Apps Owners',
'owners': [
{
'email': 'satsuki@revocs.tld',
'username': 'satsuki',
'last': True
}
],
'notes': 'Core owners.',
'id': 'core'
},
{
'apiName': 'a_different_api',
'owners': [
{
'email': 'nonon@owner.tld',
'username': 'nonon'
},
{
'email': 'matoi@owner.tld',
'username': 'matoi',
'last': True
}
],
'notes': 'Hallo!',
'id': 'a_different_api'
},
{
'apiName': 'an_app_api',
'owners': [],
'notes': 'Use one of the Core Extensions/Apps Owners.',
'id': 'an_app_api',
},
{
'apiName': 'another_api',
'owners': [],
'notes': 'Use one of the Core Extensions/Apps Owners.',
'id': 'another_api'
},
{
'apiName': 'moar_apis',
'owners': [
{
'email': 'satsuki@revocs.tld',
'username': 'satsuki',
'last': True
}
],
'notes': 'For editing moar_apis.',
'id': 'moar_apis'
},
{
'apiName': 'some_api',
'owners': [
{
'email': 'matoi@owner.tld',
'username': 'matoi',
'last': True
}
],
'notes': '',
'id': 'some_api'
}])
if __name__ == '__main__':
unittest.main()