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

Reply via email to