Exemple #1
0
 def test_job_run_without_keepdays(self):
     """
     Test execution of job run.
     """
     # Mock the call to _remove_older to make verification.
     p = RemoveOlder(cherrypy.engine, self.app)
     p._remove_older = MagicMock()
     # Call the job.
     p.job_run()
     # Check if _remove_older was called
     p._remove_older.assert_not_called()
Exemple #2
0
 def test_remove_older(self):
     """
     Run remove older on testcases repository.
     """
     self._remove_older(self.REPO, '1')
     self.assertStatus(200)
     # Get current user
     user = self.app.userdb.get_user(self.USERNAME)
     repo = user.get_repo(self.REPO)
     # Run the job.
     p = RemoveOlder(cherrypy.engine, self.app)
     p._remove_older(user, repo, 30)
     # Check number of history.
     r = librdiff.RdiffRepo(user.user_root, repo.name)
     self.assertEqual(2, len(r.get_history_entries()))
Exemple #3
0
 def test_job_run_with_keepdays(self):
     """
     Test execution of job run.
     """
     # Mock the call to _remove_older to make verification.
     p = RemoveOlder(cherrypy.engine, self.app)
     p._remove_older = MagicMock()
     # Set a keepdays
     user = self.app.userdb.get_user(self.USERNAME)
     repo = user.get_repo(self.REPO)
     repo.keepdays = 30
     # Call the job.
     p.job_run()
     # Check if _remove_older was called
     p._remove_older.assert_called_once_with(user, repo, 30)
Exemple #4
0
 def test_remove_older(self):
     """
     Run remove older on testcases repository.
     """
     self._remove_older('admin', 'testcases', '1')
     self.assertStatus(200)
     # Get current user
     user = self.app.store.get_user(self.USERNAME)
     repo = user.get_repo(self.REPO)
     repo.keepdays = 30
     # Run the job.
     p = RemoveOlder(cherrypy.engine, self.app)
     p._remove_older(repo)
     # Check number of history.
     repo = user.get_repo(self.REPO)
     self.assertEqual(2, len(repo.get_history_entries()))
Exemple #5
0
 def test_remove_older_with_unicode(self):
     """
     Test if exception is raised when calling _remove_oler with a keepdays
     as unicode value.
     """
     # Get current user
     user = self.app.userdb.get_user(self.USERNAME)
     repo = user.get_repo(self.REPO)
     # Run the job.
     with self.assertRaises(AssertionError):
         RemoveOlder(cherrypy.engine, self.app)._remove_older(user, repo, '30')
Exemple #6
0
def start():
    """Start rdiffweb deamon."""
    # Parse command line options
    args = {}
    opts = getopt.getopt(sys.argv[1:], 'vdrf:', [
        'debug',
        'log-file=',
        'log-access-file=',
        'config=',
    ])[0]
    for option, value in opts:
        if option in ['-d', '--debug']:
            args['debug'] = True
        elif option in ['--log-file']:
            args['log_file'] = value
        elif option in ['--log-access-file']:
            args['log_access_file'] = value
        elif option in ['-f', '--config']:
            args['config'] = value

    # Open config file before opening the apps.
    configfile = args.get('config', '/etc/rdiffweb/rdw.conf')
    cfg = read_config(configfile)
    log_file = args.get('log_file', None) or cfg.get('logfile', False)
    log_access_file = args.get('log_access_file', None) or cfg.get(
        'logaccessfile', None)
    if args.get('debug', False):
        environment = 'development'
        log_level = "DEBUG"
    else:
        environment = cfg.get('environment', 'production')
        log_level = cfg.get('loglevel', 'INFO')

    # Configure logging
    setup_logging(log_file=log_file,
                  log_access_file=log_access_file,
                  level=log_level)

    # Create App.
    app = rdw_app.RdiffwebApp(cfg)

    # Get configuration
    serverHost = nativestr(cfg.get("serverhost", "127.0.0.1"))
    serverPort = int(cfg.get("serverport", "8080"))
    # Get SSL configuration (if any)
    sslCertificate = cfg.get("sslcertificate")
    sslPrivateKey = cfg.get("sslprivatekey")

    global_config = cherrypy._cpconfig.environments.get(environment, {})
    global_config.update({
        'server.socket_host': serverHost,
        'server.socket_port': serverPort,
        'server.log_file': log_file,
        'server.ssl_certificate': sslCertificate,
        'server.ssl_private_key': sslPrivateKey,
        # Set maximum POST size to 2MiB, for security.
        'server.max_request_body_size': 2097152,
        'server.environment': environment,
    })

    cherrypy.config.update(global_config)

    # Add a custom signal handler
    cherrypy.engine.signal_handler.handlers['SIGUSR2'] = debug_dump_mem
    cherrypy.engine.signal_handler.handlers['SIGABRT'] = debug_dump_thread

    # Start deamons
    RemoveOlder(cherrypy.engine, app).subscribe()
    NotificationPlugin(cherrypy.engine, app).subscribe()

    # Start web server
    cherrypy.quickstart(app)

    # Log startup
    logger.info("STOP")