Legoktm has uploaded a new change for review. https://gerrit.wikimedia.org/r/204992
Change subject: admin: Turn data_admin into a real unit test ...................................................................... admin: Turn data_admin into a real unit test This splits the data_admin script into two, one for sorting (still in data_admin.py) and data_test.py for linting. data_test.py uses the unittest library and is run by nosetests. At the same time, stop using a custom tox enviornment and use a standard one like py27. This will simplify configuration on jenkins side, and make it easier to add other tests in the future. Change-Id: I23ef32b981ca30b3bd1e8e9a9062906a2c5b32d2 --- M modules/admin/data/data_admin.py A modules/admin/data/data_test.py M tox.ini 3 files changed, 59 insertions(+), 44 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/operations/puppet refs/changes/92/204992/1 diff --git a/modules/admin/data/data_admin.py b/modules/admin/data/data_admin.py index 01ea6f4..551e092 100644 --- a/modules/admin/data/data_admin.py +++ b/modules/admin/data/data_admin.py @@ -1,27 +1,11 @@ #!/usr/bin/env python # 2014 Chase Pettet -# beginnings of a linter for data.yaml +# Reads data.yaml and sorts it import sys import yaml -import itertools -from collections import Counter import collections - - -def flatten(lists): - """flattens nested arrays""" - return list(itertools.chain.from_iterable(lists)) - - -def all_assigned_users(admins): - """unique assigned users - :param admins: hash from valid data.yaml - :returns: list - """ - nested_users_list = map(lambda u: u['members'], admins['groups'].values()) - return list(set(flatten(nested_users_list))) def dict_sort(dictionary): @@ -37,30 +21,6 @@ if 'sort' in sys.argv: print yaml.dump({'groups': dict_sort(admins['groups'])}) print yaml.dump({'users': dict_sort(admins['users'])}) - - if 'lint' in sys.argv: - lint_error = False - - all_users = admins['users'].keys() - grouped_users = all_assigned_users(admins) - - # ensure all assigned users exist - non_existent_users = [u for u in grouped_users if u not in all_users] - if non_existent_users: - lint_error = True - print "Users assigned that do not exist: %s" % ( - non_existent_users,) - - # ensure no two groups uses the same gid - gids = filter(None, [ - v.get('gid', None) for k, v in admins['groups'].iteritems()]) - dupes = [k for k, v in Counter(gids).items() if v > 1] - if dupes: - lint_error = True - print "Duplicate group GIDs: %s" % (dupes,) - - if lint_error: - sys.exit(1) if __name__ == '__main__': main() diff --git a/modules/admin/data/data_test.py b/modules/admin/data/data_test.py new file mode 100644 index 0000000..74228d3 --- /dev/null +++ b/modules/admin/data/data_test.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python + +# 2014 Chase Pettet +# Tests to perform basic validation on data.yaml + +from collections import Counter +import itertools +import os +import unittest +import yaml + + +class DataTest(unittest.TestCase): + def flatten(self, lists): + """flattens nested arrays""" + return list(itertools.chain.from_iterable(lists)) + + def all_assigned_users(self, admins): + """unique assigned users + :param admins: hash from valid data.yaml + :returns: list + """ + nested_users_list = map(lambda u: u['members'], admins['groups'].values()) + return list(set(self.flatten(nested_users_list))) + + def testDataDotYaml(self): + + with open(os.path.join(os.path.dirname(__file__), 'data.yaml')) as f: + admins = yaml.safe_load(f) + + all_users = list(admins['users']) + grouped_users = self.all_assigned_users(admins) + + # ensure all assigned users exist + non_existent_users = [u for u in grouped_users if u not in all_users] + self.assertEqual([], non_existent_users, 'Users assigned that do not exist') + + # ensure no two groups uses the same gid + gids = filter(None, [ + v.get('gid', None) for k, v in admins['groups'].iteritems()]) + dupes = [k for k, v in Counter(gids).items() if v > 1] + self.assertEqual([], dupes, 'Duplicate group GIDs') + +if __name__ == '__main__': + unittest.main() diff --git a/tox.ini b/tox.ini index d6981bc..c650f5b 100644 --- a/tox.ini +++ b/tox.ini @@ -2,8 +2,18 @@ minversion = 1.6 skipsdist = True +envlist = py27 +[testenv] +deps = + nose + -rmodules/admin/data/requirements.txt +commands = nosetests modules/admin/data + +# Temporary so we can keep jenkins passing [testenv:data_admin_lint] -deps = -rmodules/admin/data/requirements.txt -changedir = modules/admin/data -commands = python data_admin.py lint +deps = + nose + -rmodules/admin/data/requirements.txt +commands = nosetests modules/admin/data + -- To view, visit https://gerrit.wikimedia.org/r/204992 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I23ef32b981ca30b3bd1e8e9a9062906a2c5b32d2 Gerrit-PatchSet: 1 Gerrit-Project: operations/puppet Gerrit-Branch: production Gerrit-Owner: Legoktm <legoktm.wikipe...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits