Exemplo n.º 1
0
 def setUp(self):
     self.setUpTestReactor()
     self.changeHook = change_hook.ChangeHookResource(
         dialects={'gitea': {
             "onlyIncludePushCommit": True
         }},
         master=fakeMasterForHooks(self))
Exemplo n.º 2
0
    def setUpRequest(self, args, options=True, activate=True):
        self.request = FakeRequest(args=args)
        self.request.uri = "/change_hook/poller"
        self.request.method = "GET"
        www = self.request.site.master.www
        self.master = master = self.request.site.master = fakemaster.make_master(
            testcase=self, wantData=True)
        master.www = www
        yield self.master.startService()
        self.changeHook = change_hook.ChangeHookResource(
            dialects={'poller': options}, master=master)
        master.change_svc = ChangeManager()
        yield master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass("example", 21)
        yield self.changesrc.setServiceParent(master.change_svc)

        self.otherpoller = self.Subclass("otherpoller", 22)
        yield self.otherpoller.setServiceParent(master.change_svc)

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName(u"notapoller")
        yield anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0.1)
Exemplo n.º 3
0
    def setUpRequest(self, args, options=True, activate=True):
        self.changeHook = change_hook.ChangeHookResource(dialects={'poller': options}, master=mock.Mock())

        self.request = FakeRequest(args=args)
        self.request.uri = "/change_hook/poller"
        self.request.method = "GET"

        master = self.request.site.master
        master.change_svc = ChangeManager()
        master.change_svc.setServiceParent(master)
        self.changesrc = self.Subclass("example", 21)
        self.changesrc.setServiceParent(master.change_svc)
        if activate:
            self.changesrc.activate()

        self.otherpoller = self.Subclass("otherpoller", 22)
        self.otherpoller.setServiceParent(master.change_svc)
        if activate:
            self.otherpoller.activate()

        anotherchangesrc = base.ChangeSource(name='notapoller')
        anotherchangesrc.setName("notapoller")
        anotherchangesrc.setServiceParent(master.change_svc)

        yield self.request.test_render(self.changeHook)
        yield util.asyncSleep(0)
Exemplo n.º 4
0
 def setUp(self):
     self.setUpTestReactor()
     self.changeHook = change_hook.ChangeHookResource(
         dialects={'gitea': {
             "secret": "test"
         }},
         master=fakeMasterForHooks(self))
Exemplo n.º 5
0
 def setUp(self):
     self.setUpTestReactor()
     self.changeHook = change_hook.ChangeHookResource(
         dialects={'gitea': {
             'class': self.GiteaTestHandler
         }},
         master=fakeMasterForHooks(self))
Exemplo n.º 6
0
    def setupSite(self, new_config):
        self.reconfigurableResources = []

        # we're going to need at least the base plugin (buildbot-www)
        if 'base' not in self.apps:
            raise RuntimeError("could not find buildbot-www; is it installed?")

        root = self.apps.get('base').resource
        self.configPlugins(root, new_config)
        # /
        root.putChild(b'', wwwconfig.IndexResource(
            self.master, self.apps.get('base').static_dir))

        # /auth
        root.putChild(b'auth', auth.AuthRootResource(self.master))

        # /avatar
        root.putChild(b'avatar', avatar.AvatarResource(self.master))

        # /api
        root.putChild(b'api', rest.RestRootResource(self.master))

        # /ws
        root.putChild(b'ws', ws.WsResource(self.master))

        # /sse
        root.putChild(b'sse', sse.EventResource(self.master))

        # /change_hook
        resource_obj = change_hook.ChangeHookResource(master=self.master)

        # FIXME: this does not work with reconfig
        change_hook_auth = new_config.www.get('change_hook_auth')
        if change_hook_auth is not None:
            resource_obj = self.setupProtectedResource(
                resource_obj, change_hook_auth)
        root.putChild(b"change_hook", resource_obj)

        self.root = root

        rotateLength = new_config.www.get(
            'logRotateLength') or self.master.log_rotation.rotateLength
        maxRotatedFiles = new_config.www.get(
            'maxRotatedFiles') or self.master.log_rotation.maxRotatedFiles

        httplog = None
        if new_config.www['logfileName']:
            httplog = os.path.abspath(
                os.path.join(self.master.basedir, new_config.www['logfileName']))
        self.site = BuildbotSite(root, logPath=httplog, rotateLength=rotateLength,
                                 maxRotatedFiles=maxRotatedFiles)

        self.site.sessionFactory = None

        # Make sure site.master is set. It is required for poller change_hook
        self.site.master = self.master
        # convert this to a tuple so it can't be appended anymore (in
        # case some dynamically created resources try to get reconfigs)
        self.reconfigurableResources = tuple(self.reconfigurableResources)
Exemplo n.º 7
0
 def setUp(self):
     self.setup_test_reactor()
     self.change_hook = change_hook.ChangeHookResource(
         dialects={'bitbucketcloud': {
                 'bitbucket_property_whitelist': ["bitbucket.*"],
         }},
         master=fakeMasterForHooks(self)
     )
Exemplo n.º 8
0
    def setUp(self):
        self.setup_test_reactor()
        self.master = fakeMasterForHooks(self)

        fakeStorageService = FakeSecretStorage()
        fakeStorageService.reconfigService(secretdict={"secret_key": self._SECRET})

        self.secretService = SecretManager()
        self.secretService.services = [fakeStorageService]
        self.master.addService(self.secretService)

        self.changeHook = change_hook.ChangeHookResource(
            dialects={'gitlab': {'secret': util.Secret("secret_key")}},
            master=self.master)
    def setUp(self):
        self.request = FakeRequest()
        # Google Code simply transmit the payload as an UTF-8 JSON body
        self.request.content = StringIO.StringIO(googleCodeJsonBody)
        self.request.received_headers = {
            'Google-Code-Project-Hosting-Hook-Hmac': '85910bf93ba5c266402d9328b0c7a856',
            'Content-Length': '509',
            'Accept-Encoding': 'gzip',
            'User-Agent': 'Google Code Project Hosting (+http://code.google.com/p/support/wiki/PostCommitWebHooks)',
            'Host': 'buildbot6-lopter.dotcloud.com:19457',
            'Content-Type': 'application/json; charset=UTF-8'
        }

        self.changeHook = change_hook.ChangeHookResource(dialects={
            'googlecode': {
                'secret_key': 'FSP3p-Ghdn4T0oqX',
                'branch': 'test'
            }
        }, master=fakeMasterForHooks())
Exemplo n.º 10
0
 def setUp(self):
     self.changeHook = change_hook.ChangeHookResource(
         dialects={'gitlab': True}, master=fakeMasterForHooks(self))
Exemplo n.º 11
0
 def setUp(self):
     self.changeHook = change_hook.ChangeHookResource(
         dialects={'gitlab': {
             'secret': self._SECRET
         }},
         master=fakeMasterForHooks(self))
Exemplo n.º 12
0
 def setUp(self):
     dialects = {'gitorious': True}
     self.changeHook = change_hook.ChangeHookResource(
         dialects=dialects, master=fakeMasterForHooks())
Exemplo n.º 13
0
 def setUp(self):
     self.change_hook = change_hook.ChangeHookResource(
         dialects={'bitbucketcloud': {}}, master=fakeMasterForHooks(self))
Exemplo n.º 14
0
 def setUp(self):
     self.setup_test_reactor()
     dialects = {'gitorious': True}
     self.changeHook = change_hook.ChangeHookResource(
         dialects=dialects, master=fakeMasterForHooks(self))
Exemplo n.º 15
0
 def setUp(self):
     self.setUpTestReactor()
     self.change_hook = change_hook.ChangeHookResource(
         dialects={'bitbucket': True}, master=fakeMasterForHooks(self))
Exemplo n.º 16
0
    def setupSite(self, new_config):
        self.reconfigurableResources = []

        # we're going to need at least the the base plugin (buildbot-www)
        if 'base' not in self.apps:
            raise RuntimeError("could not find buildbot-www; is it installed?")

        root = self.apps.get('base').resource
        for key, plugin in new_config.www.get('plugins', {}).items():
            log.msg("initializing www plugin %r" % (key, ))
            if key not in self.apps:
                raise RuntimeError(
                    "could not find plugin %s; is it installed?" % (key, ))
            self.apps.get(key).setMaster(self.master)
            root.putChild(key, self.apps.get(key).resource)
        known_plugins = set(new_config.www.get('plugins', {})) | set(['base'])
        for plugin_name in set(self.apps.names) - known_plugins:
            log.msg("NOTE: www plugin %r is installed but not "
                    "configured" % (plugin_name, ))

        # /
        root.putChild(
            '',
            wwwconfig.IndexResource(self.master,
                                    self.apps.get('base').static_dir))

        # /auth
        root.putChild('auth', auth.AuthRootResource(self.master))

        # /avatar
        root.putChild('avatar', avatar.AvatarResource(self.master))

        # /api
        root.putChild('api', rest.RestRootResource(self.master))

        # /ws
        root.putChild('ws', ws.WsResource(self.master))

        # /sse
        root.putChild('sse', sse.EventResource(self.master))

        # /change_hook
        resource_obj = change_hook.ChangeHookResource(master=self.master)

        # FIXME: this does not work with reconfig
        change_hook_auth = new_config.www.get('change_hook_auth')
        if change_hook_auth is not None:
            resource_obj = self.setupProtectedResource(resource_obj,
                                                       change_hook_auth)
        root.putChild("change_hook", resource_obj)

        self.root = root

        def either(a, b):  # a if a else b for py2.4
            if a:
                return a
            else:
                return b

        rotateLength = either(new_config.www.get('logRotateLength'),
                              self.master.log_rotation.rotateLength)
        maxRotatedFiles = either(new_config.www.get('maxRotatedFiles'),
                                 self.master.log_rotation.maxRotatedFiles)

        class RotateLogSite(server.Site):
            """ A Site that logs to a separate file: http.log, and rotate its logs """
            def _openLogFile(self, path):
                try:
                    from twisted.python.logfile import LogFile
                    log.msg(
                        "Setting up http.log rotating %s files of %s bytes each"
                        % (maxRotatedFiles, rotateLength))
                    if hasattr(LogFile,
                               "fromFullPath"):  # not present in Twisted-2.5.0
                        return LogFile.fromFullPath(
                            path,
                            rotateLength=rotateLength,
                            maxRotatedFiles=maxRotatedFiles)
                    else:
                        log.msg(
                            "WebStatus: rotated http logs are not supported on this version of Twisted"
                        )
                except ImportError, e:
                    log.msg(
                        "WebStatus: Unable to set up rotating http.log: %s" %
                        e)

                # if all else fails, just call the parent method
                return server.Site._openLogFile(self, path)
Exemplo n.º 17
0
    def setupSite(self, new_config):
        self.reconfigurableResources = []

        # we're going to need at least the base plugin (buildbot-www)
        if 'base' not in self.apps:
            raise RuntimeError("could not find buildbot-www; is it installed?")

        root = self.apps.get('base').resource
        for key, plugin in iteritems(new_config.www.get('plugins', {})):
            log.msg("initializing www plugin %r" % (key,))
            if key not in self.apps:
                raise RuntimeError(
                    "could not find plugin %s; is it installed?" % (key,))
            self.apps.get(key).setMaster(self.master)
            root.putChild(key, self.apps.get(key).resource)
        known_plugins = set(new_config.www.get('plugins', {})) | set(['base'])
        for plugin_name in set(self.apps.names) - known_plugins:
            log.msg("NOTE: www plugin %r is installed but not "
                    "configured" % (plugin_name,))

        # /
        root.putChild('', wwwconfig.IndexResource(
            self.master, self.apps.get('base').static_dir))

        # /auth
        root.putChild('auth', auth.AuthRootResource(self.master))

        # /avatar
        root.putChild('avatar', avatar.AvatarResource(self.master))

        # /api
        root.putChild('api', rest.RestRootResource(self.master))

        # /ws
        root.putChild('ws', ws.WsResource(self.master))

        # /sse
        root.putChild('sse', sse.EventResource(self.master))

        # /change_hook
        resource_obj = change_hook.ChangeHookResource(master=self.master)

        # FIXME: this does not work with reconfig
        change_hook_auth = new_config.www.get('change_hook_auth')
        if change_hook_auth is not None:
            resource_obj = self.setupProtectedResource(
                resource_obj, change_hook_auth)
        root.putChild("change_hook", resource_obj)

        self.root = root

        rotateLength = new_config.www.get(
            'logRotateLength') or self.master.log_rotation.rotateLength
        maxRotatedFiles = new_config.www.get(
            'maxRotatedFiles') or self.master.log_rotation.maxRotatedFiles

        class RotateLogSite(server.Site):

            """ A Site that logs to a separate file: http.log, and rotate its logs """

            def _openLogFile(self, path):
                try:
                    from twisted.python.logfile import LogFile
                    log.msg("Setting up http.log rotating %s files of %s bytes each" %
                            (maxRotatedFiles, rotateLength))
                    # not present in Twisted-2.5.0
                    if hasattr(LogFile, "fromFullPath"):
                        return LogFile.fromFullPath(path, rotateLength=rotateLength, maxRotatedFiles=maxRotatedFiles)
                    else:
                        log.msg(
                            "WebStatus: rotated http logs are not supported on this version of Twisted")
                except ImportError as e:
                    log.msg(
                        "WebStatus: Unable to set up rotating http.log: %s" % e)

                # if all else fails, just call the parent method
                return server.Site._openLogFile(self, path)

        httplog = None
        if new_config.www['logfileName']:
            httplog = os.path.abspath(
                os.path.join(self.master.basedir, new_config.www['logfileName']))
        self.site = RotateLogSite(root, logPath=httplog)

        self.site.sessionFactory = BuildbotSession

        # Make sure site.master is set. It is required for poller change_hook
        self.site.master = self.master
        # convert this to a tuple so it can't be appended anymore (in
        # case some dynamically created resources try to get reconfigs)
        self.reconfigurableResources = tuple(self.reconfigurableResources)
Exemplo n.º 18
0
    def setupSite(self, new_config):
        self.reconfigurableResources = []

        # we're going to need at least the base plugin (buildbot-www)
        if 'base' not in self.apps:
            raise RuntimeError("could not find buildbot-www; is it installed?")

        root = self.apps.get('base').resource
        known_plugins = set(new_config.www.get('plugins', {})) | set(['base'])
        for key, plugin in list(iteritems(new_config.www.get('plugins', {}))):
            log.msg("initializing www plugin %r" % (key, ))
            if key not in self.apps:
                raise RuntimeError(
                    "could not find plugin %s; is it installed?" % (key, ))
            app = self.apps.get(key)
            app.setMaster(self.master)
            app.setConfiguration(plugin)
            root.putChild(unicode2bytes(key), app.resource)
            if not app.ui:
                del new_config.www['plugins'][key]
        for plugin_name in set(self.apps.names) - known_plugins:
            log.msg("NOTE: www plugin %r is installed but not "
                    "configured" % (plugin_name, ))

        # /
        root.putChild(
            b'',
            wwwconfig.IndexResource(self.master,
                                    self.apps.get('base').static_dir))

        # /auth
        root.putChild(b'auth', auth.AuthRootResource(self.master))

        # /avatar
        root.putChild(b'avatar', avatar.AvatarResource(self.master))

        # /api
        root.putChild(b'api', rest.RestRootResource(self.master))

        # /ws
        root.putChild(b'ws', ws.WsResource(self.master))

        # /sse
        root.putChild(b'sse', sse.EventResource(self.master))

        # /change_hook
        resource_obj = change_hook.ChangeHookResource(master=self.master)

        # FIXME: this does not work with reconfig
        change_hook_auth = new_config.www.get('change_hook_auth')
        if change_hook_auth is not None:
            resource_obj = self.setupProtectedResource(resource_obj,
                                                       change_hook_auth)
        root.putChild(b"change_hook", resource_obj)

        self.root = root

        rotateLength = new_config.www.get(
            'logRotateLength') or self.master.log_rotation.rotateLength
        maxRotatedFiles = new_config.www.get(
            'maxRotatedFiles') or self.master.log_rotation.maxRotatedFiles

        httplog = None
        if new_config.www['logfileName']:
            httplog = os.path.abspath(
                os.path.join(self.master.basedir,
                             new_config.www['logfileName']))
        self.site = BuildbotSite(root,
                                 logPath=httplog,
                                 rotateLength=rotateLength,
                                 maxRotatedFiles=maxRotatedFiles)

        self.site.sessionFactory = None

        # Make sure site.master is set. It is required for poller change_hook
        self.site.master = self.master
        # convert this to a tuple so it can't be appended anymore (in
        # case some dynamically created resources try to get reconfigs)
        self.reconfigurableResources = tuple(self.reconfigurableResources)