'Assert that given a particular command line, an application is started
as a particular UID/GID.
@param argv: A list of strings giving the options to parse.
@param uid: An integer giving the expected UID.
@param gid: An integer giving the expected GID.'

def _applicationStartsWithConfiguredID(self, argv, uid, gid):

    self.config.parseOptions(argv)
    events = []
    class FakeUnixApplicationRunner(twistd._SomeApplicationRunner, ):
        def setupEnvironment(self, chroot, rundir, nodaemon, umask, pidfile):
            events.append('environment')
        def shedPrivileges(self, euid, uid, gid):
            events.append(('privileges', euid, uid, gid))
        def startReactor(self, reactor, oldstdout, oldstderr):
            events.append('reactor')
        def removePID(self, pidfile):
            pass
    @implementer(service.IService, service.IProcess)
    class FakeService(object, ):
        processName = None
        uid = None
        gid = None
        def setName(self, name):
            pass
        def setServiceParent(self, parent):
            pass
        def disownServiceParent(self):
            pass
        def privilegedStartService(self):
            events.append('privilegedStartService')
        def startService(self):
            events.append('startService')
        def stopService(self):
            pass
    application = FakeService()
    verifyObject(service.IService, application)
    verifyObject(service.IProcess, application)
    runner = FakeUnixApplicationRunner(self.config)
    runner.preApplication()
    runner.application = application
    runner.postApplication()
    self.assertEqual(events, ['environment', 'privilegedStartService', ('privileges', False, uid, gid), 'startService', 'reactor'])
