def test_instance_one(self): namespace = {"bob": None} username = os.urandom(32).encode("hex") password = os.urandom(32).encode("hex") manhole_factory(namespace, username, password) with self.assertRaises(AssertionError): manhole_factory(namespace, username, password)
def test_uses_namespace(self): namespace = {"bob": None} username = os.urandom(32).encode("hex") password = os.urandom(32).encode("hex") manhole_factory(namespace, username, password) output = StringIO() with patch("sys.stdout", output): show() output.seek(0) output = output.getvalue().strip() self.assertEqual(output, "objects: ['bob', 'pp', 'show']")
def _start_manhole(self, port, username, password): """ Starts the manhole server so we can connect to the agent over telnet """ if "manhole" in self.services: svclog.warning( "Telnet manhole service is already running on port %s", self.services["manhole"].port) return svclog.info("Starting telnet manhole on port %s", port) # Since we don't always need this module we import # it here to save on memory and other resources from pyfarm.agent.manhole import manhole_factory # Contains the things which will be in the top level # namespace of the Python interpreter. namespace = { "config": config, "agent": self, "jobtypes": config["jobtypes"], "current_assignments": config["current_assignments"]} factory = manhole_factory(namespace, username, password) self.services["manhole"] = reactor.listenTCP(port, factory)
def test_assertions(self): with self.assertRaises(AssertionError): manhole_factory(None, "", "") with self.assertRaises(AssertionError): manhole_factory({}, None, "") with self.assertRaises(AssertionError): manhole_factory({}, "", None)
def test_instance(self): namespace = {"bob": None} username = os.urandom(32).encode("hex") password = os.urandom(32).encode("hex") manhole = manhole_factory(namespace, username, password) self.assertEqual(namespace, {"bob": None}) self.assertEqual( TelnetRealm.NAMESPACE, {"bob": None, "pp": pprint, "show": show}) self.assertIsInstance(manhole, ServerFactory) self.assertIsInstance(manhole.protocol, TransportProtocolFactory) self.assertIsInstance(manhole.protocol.portal, Portal) # There could be multiple password checkers, check for the one # we know we should have added. for _, instance in manhole.protocol.portal.checkers.items(): found = False for user, passwd in instance.users.items(): if user == username and passwd == password: found = True if found: break else: self.fail("Failed to find correct username and password.")