Esempio n. 1
0
    def test_remoteStartBuild(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        builders = {'builder': mock.Mock()}
        self.mind.callRemote.return_value = defer.succeed(builders)
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.remoteSetBuilderList(builders)

        conn.remoteStartBuild('builder')

        builders['builder'].callRemote.assert_called_with('startBuild')
Esempio n. 2
0
    def test_remoteGetWorkerInfo_worker(self):
        def side_effect(*args, **kwargs):
            if args[0] == 'getWorkerInfo':
                return defer.succeed({
                    'info': 'test',
                    'worker_commands': {
                        'y': 2,
                        'x': 1
                    },
                    'version': 'TheVersion',
                })
            raise ValueError(f"Command unknown: {args}")

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {
            'info': 'test',
            'worker_commands': {
                'y': 2,
                'x': 1
            },
            'version': 'TheVersion'
        }
        self.assertEqual(info, r)
        expected_calls = [mock.call('getWorkerInfo')]
        self.assertEqual(self.mind.callRemote.call_args_list, expected_calls)
Esempio n. 3
0
    def test_detached(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.attached(self.mind)
        conn.detached(self.mind)

        self.assertEqual(conn.keepalive_timer, None)
        self.assertEqual(conn.mind, None)
Esempio n. 4
0
    def test_remoteGetWorkerInfo_slave_2_16(self):
        """In buildslave 2.16 all information about worker is retrieved in
        a single getSlaveInfo() call."""
        def side_effect(*args, **kwargs):
            if 'getWorkerInfo' in args:
                return defer.fail(twisted_pb.RemoteError(
                    'twisted.spread.flavors.NoSuchMethod', None, None))
            if 'getSlaveInfo' in args:
                return defer.succeed({
                    'info': 'test',
                    'slave_commands': {'x': 1, 'y': 2},
                    'version': 'TheVersion',
                })
            if 'getCommands' in args:
                return defer.succeed({'x': 1, 'y': 2})
            if 'getVersion' in args:
                return defer.succeed('TheVersion')

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {'info': 'test', 'worker_commands': {
            'y': 2, 'x': 1}, 'version': 'TheVersion'}
        self.assertEqual(info, r)
        calls = [
            mock.call('getWorkerInfo'),
            mock.call('print',
                      message='buildbot-slave detected, failing back to deprecated buildslave API. '
                              '(Ignoring missing getWorkerInfo method.)'),
            mock.call('getSlaveInfo'),
        ]
        self.mind.callRemote.assert_has_calls(calls)
    def test_remoteGetWorkerInfo(self):
        def side_effect(*args, **kwargs):
            if 'getSlaveInfo' in args:
                return defer.succeed({'info': 'test'})
            if 'getCommands' in args:
                return defer.succeed({'x': 1, 'y': 2})
            if 'getVersion' in args:
                return defer.succeed('TheVersion')

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {
            'info': 'test',
            'slave_commands': {
                'y': 2,
                'x': 1
            },
            'version': 'TheVersion'
        }
        self.assertEqual(info, r)
        calls = [
            mock.call('getSlaveInfo'),
            mock.call('getCommands'),
            mock.call('getVersion')
        ]
        self.mind.callRemote.assert_has_calls(calls)
Esempio n. 6
0
    def test_remoteGetWorkerInfo_no_info(self):
        # All remote commands tried in remoteGetWorkerInfo are unavailable.
        # This should be real old worker...
        def side_effect(*args, **kwargs):
            if args[0] == 'print':
                return
            return defer.fail(twisted_pb.RemoteError(
                'twisted.spread.flavors.NoSuchMethod', None, None))

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {}
        self.assertEqual(info, r)
        calls = [
            mock.call('getWorkerInfo'),
            mock.call('print',
                      message='buildbot-slave detected, failing back to deprecated buildslave API. '
                              '(Ignoring missing getWorkerInfo method.)'),
            mock.call('getSlaveInfo'),
            mock.call('getCommands'),
            mock.call('getVersion'),
        ]
        self.mind.callRemote.assert_has_calls(calls)
Esempio n. 7
0
    def test_remoteShutdown(self):
        self.mind.callRemote.return_value = defer.succeed(None)
        conn = pb.Connection(self.master, self.worker, self.mind)
        # note that we do not test the "old way", as it is now *very* old.
        conn.remoteShutdown()

        self.mind.callRemote.assert_called_with('shutdown')
Esempio n. 8
0
    def test_remoteGetWorkerInfo_worker(self):
        def side_effect(*args, **kwargs):
            if 'getWorkerInfo' in args:
                return defer.succeed({
                    'info': 'test',
                    'worker_commands': {
                        'y': 2, 'x': 1
                    },
                    'version': 'TheVersion',
                })
            if 'getSlaveInfo' in args:
                return defer.fail(twisted_pb.RemoteError(
                    'twisted.spread.flavors.NoSuchMethod', None, None))
            if 'getCommands' in args:
                return defer.succeed({'x': 1, 'y': 2})
            if 'getVersion' in args:
                return defer.succeed('TheVersion')

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {'info': 'test', 'worker_commands': {
            'y': 2, 'x': 1}, 'version': 'TheVersion'}
        self.assertEqual(info, r)
        calls = [mock.call('getWorkerInfo')]
        self.mind.callRemote.assert_has_calls(calls)
Esempio n. 9
0
 def test_get_peer(self):
     conn = pb.Connection(self.master, self.worker, self.mind)
     conn.mind.broker.transport.getPeer.return_value = IPv4Address(
         "TCP",
         "ip",
         "port",
     )
     self.assertEqual(conn.get_peer(), "ip:port")
Esempio n. 10
0
    def test_startStopKeepaliveTimer(self):
        conn = pb.Connection(self.master, self.worker, self.mind)

        conn.startKeepaliveTimer()
        self.assertNotEqual(conn.keepalive_timer, None)

        conn.stopKeepaliveTimer()
        self.assertEqual(conn.keepalive_timer, None)
Esempio n. 11
0
    def test_attached(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        att = yield conn.attached(self.mind)

        self.assertNotEqual(conn.keepalive_timer, None)
        self.worker.attached.assert_called_with(conn)
        self.assertEqual(att, conn)

        conn.detached(self.mind)
Esempio n. 12
0
    def test_remoteSetBuilderList(self):
        builders = ['builder1', 'builder2']
        self.mind.callRemote.return_value = defer.succeed(builders)
        conn = pb.Connection(self.master, self.worker, self.mind)
        r = yield conn.remoteSetBuilderList(builders)

        self.assertEqual(r, builders)
        self.assertEqual(conn.builders, builders)
        self.mind.callRemote.assert_called_with('setBuilderList', builders)
Esempio n. 13
0
    def test_attached(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        att = yield conn.attached(self.mind)

        self.worker.attached.assert_called_with(conn)
        self.assertEqual(att, conn)

        self.reactor.pump([10] * 361)
        self.mind.callRemote.assert_has_calls(
            [mock.call('print', message="keepalive")])

        conn.detached(self.mind)
        yield conn.waitShutdown()
Esempio n. 14
0
    def test_startStopKeepaliveTimer(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.startKeepaliveTimer()

        self.mind.callRemote.assert_not_called()
        self.reactor.pump([10] * 361)
        self.mind.callRemote.assert_has_calls(
            [mock.call('print', message="keepalive")])
        self.reactor.pump([10] * 361)
        self.mind.callRemote.assert_has_calls([
            mock.call('print', message="keepalive"),
            mock.call('print', message="keepalive"),
        ])

        conn.stopKeepaliveTimer()
        yield conn.waitShutdown()
    def test_remoteGetWorkerInfo_no_info(self):
        # All remote commands tried in remoteGetWorkerInfo are unavailable.
        # This should be real old worker...
        def side_effect(*args, **kwargs):
            return defer.fail(twisted_pb.RemoteError(
                'twisted.spread.flavors.NoSuchMethod', None, None))

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {}
        self.assertEqual(info, r)
        calls = [
            mock.call('getWorkerInfo'),
            mock.call('getSlaveInfo'),
            mock.call('getCommands'),
            mock.call('getVersion'),
        ]
        self.mind.callRemote.assert_has_calls(calls)
Esempio n. 16
0
    def test_startStopKeepaliveTimer(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.startKeepaliveTimer()

        self.mind.callRemote.assert_not_called()
        self.reactor.pump([10] * 361)
        expected_call = [
            mock.call('print', message="keepalive"),
        ]
        self.assertEqual(self.mind.callRemote.call_args_list, expected_call)

        self.reactor.pump([10] * 361)
        expected_calls = [
            mock.call('print', message="keepalive"),
            mock.call('print', message="keepalive"),
        ]
        self.assertEqual(self.mind.callRemote.call_args_list, expected_calls)

        conn.stopKeepaliveTimer()
        yield conn.waitShutdown()
Esempio n. 17
0
    def test_remoteStartCommand(self):
        builders = ['builder']
        ret_val = {'builder': mock.Mock()}
        self.mind.callRemote.return_value = defer.succeed(ret_val)
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.remoteSetBuilderList(builders)

        RCInstance, builder_name, commandID = base.RemoteCommandImpl(
        ), "builder", None
        remote_command, args = "command", {"args": 'args'}

        conn.remoteStartCommand(
            RCInstance, builder_name, commandID, remote_command, args)

        callargs = ret_val['builder'].callRemote.call_args_list[0][0]
        callargs_without_rc = (
            callargs[0], callargs[2], callargs[3], callargs[4])
        self.assertEqual(callargs_without_rc, ('startCommand',
                                               commandID, remote_command, args))
        self.assertIsInstance(callargs[1], pb.RemoteCommand)
        self.assertEqual(callargs[1].impl, RCInstance)
Esempio n. 18
0
    def test_remoteGetWorkerInfo_slave(self):
        def side_effect(*args, **kwargs):
            if args[0] == 'getWorkerInfo':
                return defer.fail(
                    twisted_pb.RemoteError(
                        'twisted.spread.flavors.NoSuchMethod', None, None))
            if args[0] == 'getSlaveInfo':
                return defer.succeed({'info': 'test'})
            if args[0] == 'getCommands':
                return defer.succeed({'x': 1, 'y': 2})
            if args[0] == 'getVersion':
                return defer.succeed('TheVersion')
            return None

        self.mind.callRemote.side_effect = side_effect
        conn = pb.Connection(self.master, self.worker, self.mind)
        info = yield conn.remoteGetWorkerInfo()

        r = {
            'info': 'test',
            'worker_commands': {
                'y': 2,
                'x': 1
            },
            'version': 'TheVersion'
        }
        self.assertEqual(info, r)
        expected_calls = [
            mock.call('getWorkerInfo'),
            mock.call(
                'print',
                message=
                'buildbot-slave detected, failing back to deprecated buildslave API. '
                '(Ignoring missing getWorkerInfo method.)'),
            mock.call('getSlaveInfo'),
            mock.call('getCommands'),
            mock.call('getVersion'),
        ]
        self.assertEqual(self.mind.callRemote.call_args_list, expected_calls)
Esempio n. 19
0
    def test_perspective_keepalive(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.perspective_keepalive()

        conn.worker.messageReceivedFromWorker.assert_called_with()
Esempio n. 20
0
 def setUp(self):
     self.setup_test_reactor()
     self.master = fakemaster.make_master(self)
     self.conn = pb.Connection(self.master, mock.Mock(), mock.Mock())
Esempio n. 21
0
    def test_doKeepalive(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.doKeepalive()

        self.mind.callRemote.assert_called_with('print', message="keepalive")
Esempio n. 22
0
    def test_constructor(self):
        conn = pb.Connection(self.master, self.worker, self.mind)

        self.assertEqual(conn.mind, self.mind)
        self.assertEqual(conn.master, self.master)
        self.assertEqual(conn.worker, self.worker)
Esempio n. 23
0
    def test_perspective_shutdown(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.perspective_shutdown()

        conn.worker.shutdownRequested.assert_called_with()
        conn.worker.messageReceivedFromWorker.assert_called_with()
Esempio n. 24
0
    def test_loseConnection(self):
        conn = pb.Connection(self.master, self.worker, self.mind)
        conn.loseConnection()

        self.assertEqual(conn.keepalive_timer, None)
        conn.mind.broker.transport.loseConnection.assert_called_with()
Esempio n. 25
0
 def setUp(self):
     self.master = fakemaster.make_master()
     self.conn = pb.Connection(self.master, mock.Mock(), mock.Mock())
Esempio n. 26
0
 def test_remotePrint(self):
     conn = pb.Connection(self.master, self.worker, self.mind)
     conn.remotePrint(message='test')
     conn.mind.callRemote.assert_called_with('print', message='test')