From b9dd34d5277e6b12d0df042e4e0feda9d7655237 Mon Sep 17 00:00:00 2001 From: Jan Dittberner Date: Sun, 1 Jun 2014 01:36:50 +0200 Subject: [PATCH] add initial osusers unit tests --- gnuviechadmin/osusers/models.py | 67 ++++++++++++++-------- gnuviechadmin/osusers/tests.py | 3 - gnuviechadmin/osusers/tests/__init__.py | 0 gnuviechadmin/osusers/tests/test_models.py | 54 +++++++++++++++++ 4 files changed, 97 insertions(+), 27 deletions(-) delete mode 100644 gnuviechadmin/osusers/tests.py create mode 100644 gnuviechadmin/osusers/tests/__init__.py create mode 100644 gnuviechadmin/osusers/tests/test_models.py diff --git a/gnuviechadmin/osusers/models.py b/gnuviechadmin/osusers/models.py index 7ae5174..b61dda3 100644 --- a/gnuviechadmin/osusers/models.py +++ b/gnuviechadmin/osusers/models.py @@ -25,6 +25,10 @@ from .tasks import ( ) +CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL = _( + "You can not use a user's primary group.") + + class TaskResult(TimeStampedModel, models.Model): task_uuid = models.CharField(primary_key=True, max_length=64, blank=False) @@ -47,7 +51,7 @@ class TaskResult(TimeStampedModel, models.Model): def update_taskstatus(self): if not self.is_finished: - asyncresult = AsyncResult(self.task_uuid, task_name=self.task_name) + asyncresult = AsyncResult(self.task_uuid) self._set_result_fields(asyncresult) self.save() @@ -83,23 +87,26 @@ class Group(TimeStampedModel, models.Model): def save(self, *args, **kwargs): super(Group, self).save(*args, **kwargs) GroupTaskResult.objects.create_grouptaskresult( - self, create_ldap_group.delay(self.groupname, self.gid, self.descr) + self, + create_ldap_group.delay(self.groupname, self.gid, self.descr), + 'create_ldap_group' ) return self def delete(self, *args, **kwargs): DeleteTaskResult.objects.create_deletetaskresult( 'group', self.groupname, - delete_ldap_group_if_empty.delay(self.groupname) + delete_ldap_group_if_empty.delay(self.groupname), + 'delete_ldap_group' ) super(Group, self).delete(*args, **kwargs) class TaskResultManager(models.Manager): - def create(self, asyncresult): + def create(self, asyncresult, task_name): result = self.model( - task_uuid=asyncresult.task_id, task_name=asyncresult.task_name + task_uuid=asyncresult.task_id, task_name=task_name ) result._set_result_fields(asyncresult) return result @@ -107,9 +114,11 @@ class TaskResultManager(models.Manager): class DeleteTaskResultManager(TaskResultManager): - def create_deletetaskresult(self, modeltype, modelname, asyncresult): + def create_deletetaskresult( + self, modeltype, modelname, asyncresult, task_name + ): taskresult = super(DeleteTaskResultManager, self).create( - asyncresult) + asyncresult, task_name) taskresult.modeltype = modeltype taskresult.modelname = modelname taskresult.save() @@ -126,9 +135,11 @@ class DeleteTaskResult(TaskResult): class GroupTaskResultManager(TaskResultManager): - def create_grouptaskresult(self, group, asyncresult, commit=False): + def create_grouptaskresult( + self, group, asyncresult, task_name, commit=False + ): taskresult = super(GroupTaskResultManager, self).create( - asyncresult) + asyncresult, task_name) taskresult.group = group taskresult.save() return taskresult @@ -176,7 +187,8 @@ class UserManager(models.Manager): group = Group.objects.create(groupname=username, gid=gid) GroupTaskResult.objects.create_grouptaskresult( group, - create_ldap_group.delay(group.groupname, group.gid, group.descr) + create_ldap_group.delay(group.groupname, group.gid, group.descr), + 'create_ldap_group' ) user = self.create(username=username, group=group, uid=uid, homedir=homedir, @@ -215,6 +227,7 @@ class User(TimeStampedModel, models.Model): self.username, self.uid, self.group.gid, self.gecos, self.homedir, self.shell, password ), + 'create_ldap_user', commit=True ) @@ -224,7 +237,8 @@ class User(TimeStampedModel, models.Model): create_ldap_user.delay( self.username, self.uid, self.group.gid, self.gecos, self.homedir, self.shell, password=None - ) + ), + 'create_ldap_user' ) return super(User, self).save(*args, **kwargs) @@ -236,15 +250,18 @@ class User(TimeStampedModel, models.Model): 'usergroup', '{0} in {1}'.format(self.username, group.groupname), remove_ldap_user_from_group.delay( - self.username, group.groupname) + self.username, group.groupname), + 'remove_ldap_user_from_group', ) DeleteTaskResult.objects.create_deletetaskresult( 'user', self.username, - delete_ldap_user.delay(self.username) + delete_ldap_user.delay(self.username), + 'delete_ldap_user' ) DeleteTaskResult.objects.create_deletetaskresult( 'group', self.group.groupname, - delete_ldap_group_if_empty.delay(self.group.groupname) + delete_ldap_group_if_empty.delay(self.group.groupname), + 'delete_ldap_group_if_empty' ) self.group.delete() super(User, self).delete(*args, **kwargs) @@ -252,8 +269,10 @@ class User(TimeStampedModel, models.Model): class UserTaskResultManager(TaskResultManager): - def create_usertaskresult(self, user, asyncresult, commit=False): - taskresult = self.create(asyncresult) + def create_usertaskresult( + self, user, asyncresult, task_name, commit=False + ): + taskresult = self.create(asyncresult, task_name) taskresult.user = user taskresult.save() return taskresult @@ -336,15 +355,14 @@ class AdditionalGroup(TimeStampedModel, models.Model): def clean(self): if self.user.group == self.group: - raise ValidationError(_( - "You can not use a user's primary group.")) + raise ValidationError(CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL) def save(self, *args, **kwargs): - res = add_ldap_user_to_group.delay( - self.user.username, self.group.groupname) - GroupTaskResult.objects.create( - group=self.group, task_uuid=res.id, - task_name=res.task_name + GroupTaskResult.objects.create_grouptaskresult( + self.group, + add_ldap_user_to_group.delay( + self.user.username, self.group.groupname), + 'add_ldap_user_to_group' ) super(AdditionalGroup, self).save(*args, **kwargs) @@ -353,7 +371,8 @@ class AdditionalGroup(TimeStampedModel, models.Model): 'usergroup', str(self), remove_ldap_user_from_group.delay( - self.user.username, self.group.groupname) + self.user.username, self.group.groupname), + 'remove_ldap_user_from_group' ) super(AdditionalGroup, self).delete(*args, **kwargs) diff --git a/gnuviechadmin/osusers/tests.py b/gnuviechadmin/osusers/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/gnuviechadmin/osusers/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/gnuviechadmin/osusers/tests/__init__.py b/gnuviechadmin/osusers/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gnuviechadmin/osusers/tests/test_models.py b/gnuviechadmin/osusers/tests/test_models.py new file mode 100644 index 0000000..da78b92 --- /dev/null +++ b/gnuviechadmin/osusers/tests/test_models.py @@ -0,0 +1,54 @@ +from django.core.exceptions import ValidationError +from django.test import TestCase +from django.test.utils import override_settings + +from osusers.models import ( + CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL, + AdditionalGroup, + Group, + Shadow, + User, +) + + +class AdditionalGroupTest(TestCase): + @override_settings( + CELERY_ALWAYS_EAGER=True, + CELERY_CACHE_BACKEND='memory', + BROKER_BACKEND='memory' + ) + def test_clean_primary_group(self): + group1 = Group.objects.create(groupname='test1', gid=1000) + user = User.objects.create( + username='test', uid=1000, group=group1, + homedir='/home/test', shell='/bin/bash') + testsubj = AdditionalGroup(user=user, group=group1) + with self.assertRaises(ValidationError) as cm: + testsubj.clean() + self.assertEqual( + cm.exception.message, CANNOT_USE_PRIMARY_GROUP_AS_ADDITIONAL) + + @override_settings( + CELERY_ALWAYS_EAGER=True, + CELERY_CACHE_BACKEND='memory', + BROKER_BACKEND='memory' + ) + def test_clean_other_group(self): + group1 = Group(groupname='test1', gid=1000) + group2 = Group(groupname='test2', gid=1001) + user = User(username='test', uid=1000, group=group1, + homedir='/home/test', shell='/bin/bash') + testsubj = AdditionalGroup(user=user, group=group2) + testsubj.clean() + + +class GroupTest(TestCase): + pass + + +class ShadowTest(TestCase): + pass + + +class UserTest(TestCase): + pass