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')
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)
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)
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)
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)
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')
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)
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")
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)
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)
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)
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()
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)
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()
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)
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)
def test_perspective_keepalive(self): conn = pb.Connection(self.master, self.worker, self.mind) conn.perspective_keepalive() conn.worker.messageReceivedFromWorker.assert_called_with()
def setUp(self): self.setup_test_reactor() self.master = fakemaster.make_master(self) self.conn = pb.Connection(self.master, mock.Mock(), mock.Mock())
def test_doKeepalive(self): conn = pb.Connection(self.master, self.worker, self.mind) conn.doKeepalive() self.mind.callRemote.assert_called_with('print', message="keepalive")
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)
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()
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()
def setUp(self): self.master = fakemaster.make_master() self.conn = pb.Connection(self.master, mock.Mock(), mock.Mock())
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')