Blame tests/test_pagure_lib_gitolite_config.py

Pierre-Yves Chibon 274e60
# -*- coding: utf-8 -*-
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
"""
Pierre-Yves Chibon 274e60
 (c) 2017 - Copyright Red Hat Inc
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
 Authors:
Pierre-Yves Chibon 274e60
   Pierre-Yves Chibon <pingou@pingoured.fr></pingou@pingoured.fr>
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
"""
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
__requires__ = ['SQLAlchemy >= 0.8']
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
import pkg_resources
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
import datetime
Pierre-Yves Chibon 274e60
import os
Pierre-Yves Chibon 274e60
import shutil
Pierre-Yves Chibon 274e60
import sys
Pierre-Yves Chibon 274e60
import tempfile
Pierre-Yves Chibon 274e60
import time
Pierre-Yves Chibon 274e60
import unittest
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
import pygit2
Pierre-Yves Chibon 274e60
from mock import patch, MagicMock
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
sys.path.insert(0, os.path.join(os.path.dirname(
Pierre-Yves Chibon 274e60
    os.path.abspath(__file__)), '..'))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
import pagure
Pierre-Yves Chibon 274e60
import pagure.lib.git
Pierre-Yves Chibon 274e60
import tests
Pierre-Yves Chibon 274e60
from pagure.lib.repo import PagureRepo
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
CORE_CONFIG = """repo test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/test
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/test
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo test2
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/test2
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/test2
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/test2
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo somenamespace/test3
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/somenamespace/test3
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/somenamespace/test3
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/somenamespace/test3
Pierre-Yves Chibon 274e60
  RW+ = pingou"""
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
class PagureLibGitoliteConfigtests(tests.Modeltests):
Pierre-Yves Chibon 274e60
    """ Tests for pagure.lib.git """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def setUp(self):
Pierre-Yves Chibon 274e60
        """ Set up the environnment, ran before every tests. """
Pierre-Yves Chibon 274e60
        super(PagureLibGitoliteConfigtests, self).setUp()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        pagure.lib.git.SESSION = self.session
Pierre-Yves Chibon 274e60
        tests.create_projects(self.session)
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        self.outputconf = os.path.join(self.path, 'test_gitolite.conf')
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        self.preconf = os.path.join(self.path, 'header_gitolite')
Pierre-Yves Chibon 274e60
        with open(self.preconf, 'w') as stream:
Pierre-Yves Chibon 274e60
            stream.write('# this is a header that is manually added\n')
Pierre-Yves Chibon 274e60
            stream.write('\n')
Pierre-Yves Chibon 274e60
            stream.write('@group1 = foo bar baz\n')
Pierre-Yves Chibon 274e60
            stream.write('@group2 = threebean puiterwijk kevin pingou\n')
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        self.postconf = os.path.join(self.path, 'footer_gitolite')
Pierre-Yves Chibon 274e60
        with open(self.postconf, 'w') as stream:
Pierre-Yves Chibon 274e60
            stream.write('# end of generated configuration\n')
Pierre-Yves Chibon 274e60
            stream.write('# \รณ/\n')
Pierre-Yves Chibon 274e60
            stream.write('# end of footer\n')
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def tearDown(self):
Pierre-Yves Chibon 274e60
        """ Tearn down the environnment, ran before every tests. """
Pierre-Yves Chibon 274e60
        super(PagureLibGitoliteConfigtests, self).tearDown()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        if os.path.exists(self.outputconf):
Pierre-Yves Chibon 274e60
            os.unlink(self.outputconf)
Pierre-Yves Chibon 274e60
        self.assertFalse(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def test_write_gitolite_pre_post_projectNone(self):
Pierre-Yves Chibon 274e60
        """ Test the write_gitolite_acls function of pagure.lib.git with
Pierre-Yves Chibon 274e60
        a postconf set """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        helper = pagure.lib.git_auth.get_git_auth_helper('gitolite3')
Pierre-Yves Chibon 274e60
        helper.write_gitolite_acls(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            self.outputconf,
Pierre-Yves Chibon 274e60
            project=None,
Pierre-Yves Chibon 274e60
            preconf=self.preconf,
Pierre-Yves Chibon 274e60
            postconf=self.postconf
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf) as stream:
Pierre-Yves Chibon 274e60
            data = stream.read()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        exp = """# this is a header that is manually added
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
@group1 = foo bar baz
Pierre-Yves Chibon 274e60
@group2 = threebean puiterwijk kevin pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
%s
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
# end of generated configuration
Pierre-Yves Chibon 274e60
# \รณ/
Pierre-Yves Chibon 274e60
# end of footer
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
""" % CORE_CONFIG
Pierre-Yves Chibon 274e60
        #print data
Pierre-Yves Chibon 274e60
        self.assertEqual(data, exp)
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def test_write_gitolite_pre_post_projectNone(self):
Pierre-Yves Chibon 274e60
        """ Test the write_gitolite_acls function of pagure.lib.git with
Pierre-Yves Chibon 274e60
        a postconf set """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf, 'w') as stream:
Pierre-Yves Chibon 274e60
            pass
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        helper = pagure.lib.git_auth.get_git_auth_helper('gitolite3')
Pierre-Yves Chibon 274e60
        helper.write_gitolite_acls(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            self.outputconf,
Pierre-Yves Chibon 274e60
            project=None,
Pierre-Yves Chibon 274e60
            preconf=self.preconf,
Pierre-Yves Chibon 274e60
            postconf=self.postconf
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf) as stream:
Pierre-Yves Chibon 274e60
            data = stream.read()
Pierre-Yves Chibon 274e60
        self.assertEqual(data, '')
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def test_write_gitolite_pre_post_project_1(self):
Pierre-Yves Chibon 274e60
        """ Test the write_gitolite_acls function of pagure.lib.git with
Pierre-Yves Chibon 274e60
        a postconf set """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf, 'w') as stream:
Pierre-Yves Chibon 274e60
            pass
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        helper = pagure.lib.git_auth.get_git_auth_helper('gitolite3')
Pierre-Yves Chibon 274e60
        helper.write_gitolite_acls(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            self.outputconf,
Pierre-Yves Chibon 274e60
            project=-1,
Pierre-Yves Chibon 274e60
            preconf=self.preconf,
Pierre-Yves Chibon 274e60
            postconf=self.postconf
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf) as stream:
Pierre-Yves Chibon 274e60
            data = stream.read()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        exp = """# this is a header that is manually added
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
@group1 = foo bar baz
Pierre-Yves Chibon 274e60
@group2 = threebean puiterwijk kevin pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
%s
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
# end of generated configuration
Pierre-Yves Chibon 274e60
# \รณ/
Pierre-Yves Chibon 274e60
# end of footer
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
""" % CORE_CONFIG
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        #print data
Pierre-Yves Chibon 274e60
        self.assertEqual(data, exp)
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def test_write_gitolite_pre_post_project_test(self):
Pierre-Yves Chibon 274e60
        """ Test the write_gitolite_acls function of pagure.lib.git with
Pierre-Yves Chibon 274e60
        a postconf set """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf, 'w') as stream:
Pierre-Yves Chibon 274e60
            pass
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        helper = pagure.lib.git_auth.get_git_auth_helper('gitolite3')
Pierre-Yves Chibon 274e60
        helper.write_gitolite_acls(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            self.outputconf,
Pierre-Yves Chibon 274e60
            project=project,
Pierre-Yves Chibon 274e60
            preconf=self.preconf,
Pierre-Yves Chibon 274e60
            postconf=self.postconf
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf) as stream:
Pierre-Yves Chibon 274e60
            data = stream.read()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        exp = """# this is a header that is manually added
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
@group1 = foo bar baz
Pierre-Yves Chibon 274e60
@group2 = threebean puiterwijk kevin pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/test
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/test
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
# end of generated configuration
Pierre-Yves Chibon 274e60
# \รณ/
Pierre-Yves Chibon 274e60
# end of footer
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
"""
Pierre-Yves Chibon 274e60
        #print data
Pierre-Yves Chibon 274e60
        self.assertEqual(data, exp)
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
    def test_write_gitolite_pre_post_project_test_full_file(self):
Pierre-Yves Chibon 274e60
        """ Test the write_gitolite_acls function of pagure.lib.git with
Pierre-Yves Chibon 274e60
        a postconf set """
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        # Re-generate the gitolite config for all the projects
Pierre-Yves Chibon 274e60
        self.test_write_gitolite_pre_post_project_1()
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon 274e60
        project.user_id = 2
Pierre-Yves Chibon 274e60
        self.session.add(project)
Pierre-Yves Chibon 274e60
        self.session.commit()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon 274e60
        msg = pagure.lib.add_user_to_project(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            project=project,
Pierre-Yves Chibon 274e60
            new_user='pingou',
Pierre-Yves Chibon 274e60
            user='foo',
Pierre-Yves Chibon 274e60
            access='commit'
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertEqual(msg, 'User added')
Pierre-Yves Chibon 274e60
        self.session.commit()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        project = pagure.lib._get_project(self.session, 'test')
Pierre-Yves Chibon 274e60
        helper = pagure.lib.git_auth.get_git_auth_helper('gitolite3')
Pierre-Yves Chibon 274e60
        helper.write_gitolite_acls(
Pierre-Yves Chibon 274e60
            self.session,
Pierre-Yves Chibon 274e60
            self.outputconf,
Pierre-Yves Chibon 274e60
            project=project,
Pierre-Yves Chibon 274e60
            preconf=self.preconf,
Pierre-Yves Chibon 274e60
            postconf=self.postconf
Pierre-Yves Chibon 274e60
        )
Pierre-Yves Chibon 274e60
        self.assertTrue(os.path.exists(self.outputconf))
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        with open(self.outputconf) as stream:
Pierre-Yves Chibon 274e60
            data = stream.read()
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
        exp = """# this is a header that is manually added
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
@group1 = foo bar baz
Pierre-Yves Chibon 274e60
@group2 = threebean puiterwijk kevin pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo test2
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/test2
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/test2
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/test2
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo somenamespace/test3
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/somenamespace/test3
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/somenamespace/test3
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/somenamespace/test3
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = foo
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo docs/test
Pierre-Yves Chibon 274e60
  R   = @all
Pierre-Yves Chibon 274e60
  RW+ = foo
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo tickets/test
Pierre-Yves Chibon 274e60
  RW+ = foo
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
repo requests/test
Pierre-Yves Chibon 274e60
  RW+ = foo
Pierre-Yves Chibon 274e60
  RW+ = pingou
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
# end of generated configuration
Pierre-Yves Chibon 274e60
# \รณ/
Pierre-Yves Chibon 274e60
# end of footer
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
"""
Pierre-Yves Chibon 274e60
        #print data
Pierre-Yves Chibon 274e60
        self.assertEqual(data, exp)
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
Pierre-Yves Chibon 274e60
if __name__ == '__main__':
Pierre-Yves Chibon 274e60
    unittest.main(verbosity=2)