11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#!/usr/bin/env python 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved. 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file. 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport unittest 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom owners_data_source import ParseOwnersFile, OwnersDataSource 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom server_instance import ServerInstance 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom servlet import Request 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom test_file_system import TestFileSystem 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci_TEST_FS = { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'chrome': { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'browser': { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'extensions': { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'OWNERS': '\n'.join([ 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# Core owners.', 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'satsuki@revocs.tld' 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]), 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'api': { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'some_api': { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'OWNERS': '\n'.join([ 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'matoi@owner.tld' 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]), 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'some_api.cc': '' 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'another_api': { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'another_api.cc': '', 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'another_api.h': '' 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'moar_apis': { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'OWNERS': '\n'.join([ 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# For editing moar_apis.', 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'satsuki@revocs.tld' 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'extensions': { 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'browser': { 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'api': { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'a_different_api': { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'OWNERS': '\n'.join([ 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# Hallo!', 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'nonon@owner.tld', 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'matoi@owner.tld' 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass OwnersDataSourceTest(unittest.TestCase): 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def setUp(self): 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci server_instance = ServerInstance.ForTest( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci file_system=TestFileSystem(_TEST_FS)) 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci # Don't randomize the owners to avoid testing issues. 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._owners_ds = OwnersDataSource(server_instance, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Request.ForTest('/'), 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci randomize=False) 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testParseOwnersFile(self): 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci owners_content = '\n'.join([ 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'satsuki@revocs.tld', 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'mankanshoku@owner.tld', 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '', 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'matoi@owner.tld' 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci owners, notes = ParseOwnersFile(owners_content, randomize=False) 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci # The order of the owners list should reflect the order of the owners file. 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(owners, [ 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'satsuki@revocs.tld', 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'satsuki' 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'mankanshoku@owner.tld', 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'mankanshoku' 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'matoi@owner.tld', 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'matoi', 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(notes, '') 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci owners_content_with_comments = '\n'.join([ 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# This is a comment concerning this file', 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# that should not be ignored.', 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'matoi@owner.tld', 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'mankanshoku@owner.tld', 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '', 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci '# Only bug satsuki if matoi or mankanshoku are unavailable.', 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'satsuki@revocs.tld' 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci owners, notes = ParseOwnersFile(owners_content_with_comments, 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci randomize=False) 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(owners, [ 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'matoi@owner.tld', 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'matoi' 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'mankanshoku@owner.tld', 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'mankanshoku' 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'satsuki@revocs.tld', 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'satsuki', 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ]) 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(notes, '\n'.join([ 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'This is a comment concerning this file', 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'that should not be ignored.', 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'Only bug satsuki if matoi or mankanshoku are unavailable.' 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ])) 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def testCollectOwners(self): 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci # NOTE: Order matters. The list should be sorted by 'apiName'. 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self.assertEqual(self._owners_ds.get('apis'), [{ 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'apiName': 'Core Extensions/Apps Owners', 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'owners': [ 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'satsuki@revocs.tld', 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'satsuki', 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ], 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'notes': 'Core owners.', 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'id': 'core' 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'apiName': 'a_different_api', 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'owners': [ 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'nonon@owner.tld', 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'nonon' 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'matoi@owner.tld', 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'matoi', 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ], 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'notes': 'Hallo!', 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'id': 'a_different_api' 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'apiName': 'another_api', 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'owners': [], 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'notes': 'Use one of the Core Extensions/Apps Owners.', 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'id': 'another_api' 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'apiName': 'moar_apis', 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'owners': [ 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'satsuki@revocs.tld', 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'satsuki', 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ], 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'notes': 'For editing moar_apis.', 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'id': 'moar_apis' 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'apiName': 'some_api', 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'owners': [ 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'email': 'matoi@owner.tld', 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'username': 'matoi', 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'last': True 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ], 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'notes': '', 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'id': 'some_api' 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }]) 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciif __name__ == '__main__': 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci unittest.main() 190