コード例 #1
0
ファイル: test_realm.py プロジェクト: exarkun/Pantheon-SSH
 def test_closed(self):
     """
     When the closed event is received, L{PantheonSession} closed the
     standard input of its child process and signals it with C{SIGHUP}.
     """
     mockos = MockProcessState(0, 0)
     mockos.seteuid(100)
     session = PantheonSession(None)
     session.os = mockos
     process = session._process = MemoryProcessTransport(mockos)
     session.closed()
     self.assertTrue(process.stdinClosed)
     self.assertEqual(process.signals, [SIGHUP])
     self.assertEqual(mockos.geteuid(), 100)
コード例 #2
0
ファイル: test_realm.py プロジェクト: exarkun/Pantheon-SSH
 def test_alreadyExited(self):
     """
     No unhandled exceptions are raised if the channel receives eof or is
     closed after the child process has already exited.  stdin is still
     closed and the process's euid is still set back to its original value.
     """
     mockos = MockProcessState(0, 0)
     mockos.seteuid(100)
     session = PantheonSession(None)
     session.os = mockos
     process = session._process = MemoryProcessTransport(mockos)
     process._exited = True
     session.closed()
     self.assertTrue(process.stdinClosed)
     self.assertEqual(mockos.geteuid(), 100)
コード例 #3
0
ファイル: test_realm.py プロジェクト: exarkun/Pantheon-SSH
    def test_execCommand(self):
        """
        L{PantheonSession.execCommand} launches the command as a child process,
        running it with the working directory and uid its avatar, the
        L{PantheonSite}, specifies.
        """
        cwd = "/some/path"
        expectedUID = 58927

        site = PantheonSite(None, cwd, expectedUID)
        messages = []
        site.logExecCommand = messages.append

        nobody = 99
        mockos = MockProcessState(0, 0)
        mockos.setegid(nobody)
        mockos.seteuid(nobody)
        proc = MemoryProcessReactor(mockos)
        session = PantheonSession(site)
        session.reactor = proc
        session.os = mockos
        expectedProto = object()
        session.execCommand(expectedProto, "echo 'hello, world'")
        self.assertIsInstance(session._process, MemoryProcessTransport)
        process = proc.processes.pop(0)
        proto, executable, args, env, path, uid, gid, usePTY, childFDs = process
        self.assertIdentical(expectedProto, proto)
        self.assertEqual("/bin/sh", executable)
        self.assertEqual(args, ["/bin/sh", "-c", "echo 'hello, world'"])
        # XXX What should really be in the environment?
        self.assertEqual({'HOME': cwd}, env)
        self.assertEqual(cwd, path)
        self.assertEqual(expectedUID, uid)
        # XXX What should the GID really be?
        self.assertEqual(80, gid)
        self.assertFalse(usePTY)
        self.assertIdentical(None, childFDs)

        # Ensure we end up in a good state, uid/gid-wise.
        self.assertEqual(nobody, mockos.geteuid())
        self.assertEqual(nobody, mockos.getegid())

        # Ensure the command is logged
        self.assertEqual(["echo 'hello, world'"], messages)