def test_add_repo(self):
        """
        Various exit path tests for test_add_repo
        """
        self.assertEqual(git_add_course.GIT_IMPORT_NO_DIR,
                         git_add_course.add_repo(self.TEST_REPO, None))
        try:
            os.mkdir(getattr(settings, 'GIT_REPO_DIR'))
        except OSError:
            pass
        self.assertEqual(git_add_course.GIT_IMPORT_URL_BAD,
                         git_add_course.add_repo('foo', None))

        self.assertEqual(
            git_add_course.GIT_IMPORT_CANNOT_PULL,
            git_add_course.add_repo('file:///foobar.git', None)
        )

        # Test git repo that exists, but is "broken"
        bare_repo = os.path.abspath('{0}/{1}'.format(settings.TEST_ROOT, 'bare.git'))
        os.mkdir(os.path.abspath(bare_repo))
        subprocess.call(['git', '--bare', 'init', ], cwd=bare_repo)

        self.assertEqual(
            git_add_course.GIT_IMPORT_BAD_REPO,
            git_add_course.add_repo('file://{0}'.format(bare_repo), None)
        )
        shutil.rmtree(bare_repo)
Example #2
0
    def import_mongo_course(self, gitloc):
        """
        Imports course using management command and captures logging output
        at debug level for display in template
        """

        msg = u''

        logging.debug(_('Adding course using git repo {0}').format(gitloc))

        # Grab logging output for debugging imports
        output = StringIO.StringIO()
        import_log_handler = logging.StreamHandler(output)
        import_log_handler.setLevel(logging.DEBUG)

        logger_names = ['xmodule.modulestore.xml_importer',
                        'dashboard.management.commands.git_add_course',
                        'xmodule.modulestore.xml', 'xmodule.seq_module', ]
        loggers = []

        for logger_name in logger_names:
            logger = logging.getLogger(logger_name)
            logger.old_level = logger.level
            logger.setLevel(logging.DEBUG)
            logger.addHandler(import_log_handler)
            loggers.append(logger)

        git_add_course.add_repo(gitloc, None)
        ret = output.getvalue()

        # Remove handler hijacks
        for logger in loggers:
            logger.setLevel(logger.old_level)
            logger.removeHandler(import_log_handler)

        msg = u"<h4 style='color:blue'>{0} {1}</h4>".format(
            _('Added course from'), gitloc)
        msg += _("<pre>{0}</pre>").format(escape(ret))
        return msg