Esempio n. 1
0
    def test_connectionMade_drops_connections_if_authentication_errors(self):
        logger = self.useFixture(TwistedLoggerFixture())

        service = RegionService(sentinel.ipcWorker)
        service.running = True  # Pretend it's running.
        service.factory.protocol = HandshakingRegionServer
        protocol = service.factory.buildProtocol(addr=None)  # addr is unused.
        protocol.transport = MagicMock()
        exception_type = factory.make_exception_type()
        self.patch_authenticate_for_error(protocol, exception_type())
        self.assertDictEqual({}, service.connections)

        connectionMade = wait_for_reactor(protocol.connectionMade)
        connectionMade()

        # The protocol is not added to the connection set.
        self.assertDictEqual({}, service.connections)
        # The transport is instructed to lose the connection.
        self.assertThat(protocol.transport.loseConnection,
                        MockCalledOnceWith())

        # The log was written to.
        self.assertDocTestMatches(
            """\
            Rack controller '...' could not be authenticated; dropping
            connection. Check that /var/lib/maas/secret...""",
            logger.dump(),
        )
Esempio n. 2
0
 def test_connectionMade_does_not_update_services_connection_set(self):
     service = RegionService(sentinel.ipcWorker)
     service.running = True  # Pretend it's running.
     service.factory.protocol = HandshakingRegionServer
     protocol = service.factory.buildProtocol(addr=None)  # addr is unused.
     self.assertDictEqual({}, service.connections)
     protocol.connectionMade()
     self.assertDictEqual({}, service.connections)
Esempio n. 3
0
 def test_connectionMade_drops_connection_if_service_not_running(self):
     service = RegionService(sentinel.ipcWorker)
     service.running = False  # Pretend it's not running.
     service.factory.protocol = HandshakingRegionServer
     protocol = service.factory.buildProtocol(addr=None)  # addr is unused.
     transport = self.patch(protocol, "transport")
     self.assertDictEqual({}, service.connections)
     protocol.connectionMade()
     # The protocol is not added to the connection set.
     self.assertDictEqual({}, service.connections)
     # The transport is instructed to lose the connection.
     self.assertThat(transport.loseConnection, MockCalledOnceWith())
Esempio n. 4
0
    def test_connectionLost_updates_services_connection_set(self):
        service = RegionService(sentinel.ipcWorker)
        service.running = True  # Pretend it's running.
        service.factory.protocol = HandshakingRegionServer
        protocol = service.factory.buildProtocol(addr=None)  # addr is unused.
        protocol.ident = factory.make_name("node")
        connectionLost_up_call = self.patch(amp.AMP, "connectionLost")
        service.connections[protocol.ident] = {protocol}

        protocol.connectionLost(reason=None)
        # The connection is removed from the set, but the key remains.
        self.assertDictEqual({protocol.ident: set()}, service.connections)
        # connectionLost() is called on the superclass.
        self.assertThat(connectionLost_up_call, MockCalledOnceWith(None))
Esempio n. 5
0
    def test_connectionLost_uses_ipcWorker_to_unregister(self):
        ipcWorker = MagicMock()
        service = RegionService(ipcWorker)
        service.running = True  # Pretend it's running.
        service.factory.protocol = HandshakingRegionServer
        protocol = service.factory.buildProtocol(addr=None)  # addr is unused.
        protocol.ident = factory.make_name("node")
        protocol.host = Mock()
        protocol.host.host = sentinel.host
        protocol.host.port = sentinel.port
        protocol.hostIsRemote = True
        connectionLost_up_call = self.patch(amp.AMP, "connectionLost")
        service.connections[protocol.ident] = {protocol}

        protocol.connectionLost(reason=None)
        self.assertThat(ipcWorker.rpcUnregisterConnection,
                        MockCalledOnceWith(protocol.connid))
        # The connection is removed from the set, but the key remains.
        self.assertDictEqual({protocol.ident: set()}, service.connections)
        # connectionLost() is called on the superclass.
        self.assertThat(connectionLost_up_call, MockCalledOnceWith(None))
Esempio n. 6
0
 def make_running_server(self):
     service = RegionService(sentinel.ipcWorker)
     service.running = True  # Pretend it's running.
     # service.factory.protocol = RegionServer
     return service.factory.buildProtocol(addr=None)  # addr is unused.