コード例 #1
0
    def test_disconnect_device(self, sleep_mock):
        adapter_mock = Mock()
        env = Simulation(device=Mock(), adapter=adapter_mock)

        # connected device calls adapter_mock
        env._process_cycle(0.5)
        adapter_mock.assert_has_calls([call.handle(env.cycle_delay)])
        sleep_mock.assert_not_called()

        adapter_mock.reset_mock()
        sleep_mock.reset_mock()

        # disconnected device calls sleep_mock
        env.disconnect_device()
        env._process_cycle(0.5)

        sleep_mock.assert_has_calls([call.handle(env.cycle_delay)])
        adapter_mock.assert_not_called()

        adapter_mock.reset_mock()
        sleep_mock.reset_mock()

        # re-connecting returns to previous behavior
        env.connect_device()
        env._process_cycle(0.5)
        adapter_mock.assert_has_calls([call.handle(env.cycle_delay)])
        sleep_mock.assert_not_called()
コード例 #2
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def _check_reconnects_with_backoff(self, methodname):
        f = self._build_factory()

        # Violate the interface abstraction to verify backoff behavior:
        m_delaytracker = self.make_mock()
        f._delaytracker = m_delaytracker # Overwrite the extant one.

        m_connector = self.make_mock()
        m_reason = self.make_mock()

        method = getattr(f, methodname)
        ret = method(m_connector, m_reason)

        self.assertIsNone(ret)

        self.assert_calls_equal(
            m_delaytracker,
            [call.increment()])

        def check_record_arg(rec):
            """<Record.msg.find('Reconnecting in') != -1>"""
            return rec.msg.find('Reconnecting in') != -1

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(msg='Connection %s: %r (Reconnecting in %.2f seconds.)'))])

        self.assert_calls_equal(
            self.m_reactor,
            [call.callLater(m_delaytracker.increment.return_value, m_connector.connect)])
コード例 #3
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def test_github_notification_with_connection_debug_logs_and_delegates(self):
        f = self._build_factory()

        m_addr = self.make_mock()

        f.buildProtocol(m_addr)

        # Peek behind the curtain:
        self.assertIsNotNone(f._protoinstance)

        m_protoinstance = self.make_mock()

        # Poke behind the curtain:
        f._protoinstance = m_protoinstance

        eventid = 42
        eventname = 'blah-event'
        eventdict = {'fruit': 'apple', 'meat': 'pork'}

        f.handle_github_notification(eventid, eventname, eventdict)

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='DEBUG', msg=self.GithubNotificationLogTmpl))])

        self.assert_calls_equal(
            m_protoinstance,
            [call.handle_github_notification(eventid, eventname, eventdict)])
コード例 #4
0
    def _test_init_and_name(self, name, instanceinfo):
        class MyClass(log.LogMixin):
            def __init__(self):
                log.LogMixin.__init__(self, instanceinfo)

        obj = MyClass()

        self.assertEqual(obj._log.name, name)

        self.assert_calls_equal(self.m_loghandler,
                                [call.handle(ArgIsLogRecord(msg='__init__'))])
コード例 #5
0
    def test_signed_malformed_JSON(self):
        m_request = self.make_mock()

        self.res._handle_signed_message(m_request, '%@ NOT JSON @%')

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='ERROR'))])

        self.assert_calls_equal(
            m_request,
            [call.setResponseCode(400, 'MALFORMED')])
コード例 #6
0
ファイル: test_log.py プロジェクト: nejucomo/leastbot
    def test_LogMixin_subclass_nameless(self):

        class MyClass (LogMixin):
            def __init__(self):
                self._init_log()
                self._log.info('created')

        MyClass()

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(msg='created'))])
コード例 #7
0
ファイル: test_log.py プロジェクト: nejucomo/dockomorph
    def _test_init_and_name(self, name, instanceinfo):
        class MyClass (log.LogMixin):
            def __init__(self):
                log.LogMixin.__init__(self, instanceinfo)

        obj = MyClass()

        self.assertEqual(obj._log.name, name)

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(msg='__init__'))])
コード例 #8
0
    def test_handle_bare_event_some_unsupported_event_type(self):
        self._test_handle_bare_event(
            False,
            '%! some unsupported event type !%',
            'banana',
        )

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                 ArgIsLogRecord(
                     levelname='INFO',
                     msg='Unhandled github %r event %r.'))])
コード例 #9
0
    def test_handle_push_event_not_dockomorph_tag(self):
        self.res._handle_push_event({'ref': 'refs/heads/master'})

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                 ArgIsLogRecord(
                     levelname='DEBUG',
                     args=('refs/heads/master',)))])

        self.assert_calls_equal(
            self.m_handle_push_tag,
            [])
コード例 #10
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def test_connect(self):
        self.client.connect()

        self.assert_calls_equal(
            self.m_reactor,
            [call.connectSSL(
                    self.host,
                    self.port,
                    ArgIsType(irc.ClientProtocolFactory),
                    ArgIsType(ssl.ClientContextFactory))])

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(msg='Connecting to %s:%d...'))])
コード例 #11
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def test_github_notification_without_connection_logs_info(self):
        f = self._build_factory()

        # Peek behind the curtain:
        self.assertIsNone(f._protoinstance)

        eventid = 42
        eventname = 'blah-event'
        eventdict = {'fruit': 'apple', 'meat': 'pork'}

        f.handle_github_notification(eventid, eventname, eventdict)

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='INFO', msg=self.GithubNotificationLogTmpl))])
コード例 #12
0
    def test_process_cycle_calls_process_simulation(self):
        adapter_mock = Mock()
        device_mock = Mock()
        env = Simulation(device=device_mock, adapter=adapter_mock)
        set_simulation_running(env)

        env._process_cycle(0.5)
        adapter_mock.assert_has_calls(
            [call.handle(env.cycle_delay)])
        device_mock.assert_has_calls(
            [call.process(0.5)]
        )

        self.assertEqual(env.cycles, 1)
        self.assertEqual(env.runtime, 0.5)
コード例 #13
0
ファイル: test_secrets.py プロジェクト: nejucomo/dockomorph
    def test_no_preexisting_secrets_file(self):
        m_FilePath = self.patch('twisted.python.filepath.FilePath')
        m_urandom = self.patch('os.urandom')

        m_secretsdir = m_FilePath.return_value
        m_path = m_secretsdir.child.return_value

        m_write_file = self.make_mock()

        def m_path_open(mode):
            if mode == 'r':
                raise IOError(errno.ENOENT, 'fake-no-entry')
            else:
                assert mode == 'w', repr(mode)
                return m_write_file

        m_path.open.side_effect = m_path_open

        # Exercise target code:
        result = secrets.create_or_load_secret('banana')

        # Verify results:
        self.assertIs(result, m_urandom.return_value.encode.return_value)

        self.assert_calls_equal(
            m_FilePath,
            [call(secrets._SecretsDir),
             call().makedirs(),
             call().child('banana'),
             call().child().open('r'),
             call().child().open('w'),
             ])

        self.assert_calls_equal(
            m_urandom,
            [call(secrets._SecretByteSize),
             call().encode('hex')])

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                ArgIsLogRecord(
                    levelname='INFO',
                    msg='Initialized secret %r to: %s'))])
コード例 #14
0
ファイル: test_github.py プロジェクト: nejucomo/leastbot
    def test_render_POST_ping_tampered(self):
        tweakedmessage = self.pingmessage.copy()
        tweakedmessage['hook_id'] += 1

        self.m_request.content.getvalue.return_value = json.dumps(tweakedmessage)

        r = self.res.render_POST(self.m_request)

        self.assertEqual(NOT_DONE_YET, r)
        self.assert_calls_equal(
            self.m_request,
            [call.getHeader('X-Hub-Signature'),
             call.content.getvalue(),
             call.setResponseCode(403, 'FORBIDDEN'),
             call.finish()])

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='WARNING'))])
コード例 #15
0
    def setUp(self):
        LogMockingTestCase.setUp(self)

        self.sigver = github.SignatureVerifier(self.secret)

        self.m_reactor = self.make_mock()
        self.m_handle_push_tag = self.make_mock()

        self.res = github.WebhookResource(
            self.m_reactor,
            self.secret,
            self.m_handle_push_tag,
        )

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='DEBUG', msg='__init__'))])

        # Clear out m_loghandler:
        self.reset_mocks()
コード例 #16
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def _test_msg_debug_log(self, *args):
        m_ircIRCClient = self.patch('twisted.words.protocols.irc.IRCClient')

        self.p.msg(*args)

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                    ArgIsLogRecord(
                        levelname='DEBUG',
                        msg=r'msg(user=%r, message=%r, length=%r)'))])

        expectedargs = args
        if len(expectedargs) == 2:
            expectedargs += (None,)

        # Ensure we delegate to the base library:
        self.assert_calls_equal(
            m_ircIRCClient,
            [call.msg(self.p, *expectedargs)])
コード例 #17
0
    def test_no_preexisting_secrets_file(self):
        m_FilePath = self.patch('twisted.python.filepath.FilePath')
        m_urandom = self.patch('os.urandom')

        m_secretsdir = m_FilePath.return_value
        m_path = m_secretsdir.child.return_value

        m_write_file = self.make_mock()

        def m_path_open(mode):
            if mode == 'r':
                raise IOError(errno.ENOENT, 'fake-no-entry')
            else:
                assert mode == 'w', repr(mode)
                return m_write_file

        m_path.open.side_effect = m_path_open

        # Exercise target code:
        result = secrets.create_or_load_secret('banana')

        # Verify results:
        self.assertIs(result, m_urandom.return_value.encode.return_value)

        self.assert_calls_equal(m_FilePath, [
            call(secrets._SecretsDir),
            call().makedirs(),
            call().child('banana'),
            call().child().open('r'),
            call().child().open('w'),
        ])

        self.assert_calls_equal(
            m_urandom, [call(secrets._SecretByteSize),
                        call().encode('hex')])

        self.assert_calls_equal(self.m_loghandler, [
            call.handle(
                ArgIsLogRecord(levelname='INFO',
                               msg='Initialized secret %r to: %s'))
        ])
コード例 #18
0
ファイル: test_irc.py プロジェクト: nejucomo/leastbot
    def test_handleCommand_debug_log(self):
        m_ircIRCClient = self.patch('twisted.words.protocols.irc.IRCClient')

        # Taken from a real world test run:
        command='NOTICE'
        prefix='weber.oftc.net'
        params=['AUTH', '*** Looking up your hostname...']

        self.p.handleCommand(command, prefix, params)

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                    ArgIsLogRecord(
                        levelname='DEBUG',
                        msg=r'handleCommand(command=%r, prefix=%r, params=%r)'))])

        # Ensure we delegate to the base library:
        self.assert_calls_equal(
            m_ircIRCClient,
            [call.handleCommand(self.p, command, prefix, params)])
コード例 #19
0
    def test_render_POST_unhandled_event_type(self):
        m_request = self._setup_mock_request('unknown event type', [])

        r = self.res.render_POST(m_request)

        self.assertEqual(NOT_DONE_YET, r)
        self.assert_calls_equal(
            m_request,
            [call.getHeader('X-Hub-Signature'),
             call.content.getvalue(),
             call.getHeader('X-Github-Event'),
             call.getHeader('X-Github-Delivery'),
             call.setResponseCode(400, 'Event Not Supported'),
             call.finish()])

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(
                ArgIsLogRecord(
                    levelname='INFO',
                    msg='Unhandled github %r event %r.'))])
コード例 #20
0
    def test_render_POST_ping_tampered(self):
        m_request = self._setup_mock_request('ping', self.pingmessage)

        tweakedmessage = self.pingmessage.copy()
        tweakedmessage['hook_id'] += 1

        m_request.content.getvalue.return_value = \
            json.dumps(tweakedmessage)

        r = self.res.render_POST(m_request)

        self.assertEqual(NOT_DONE_YET, r)
        self.assert_calls_equal(
            m_request,
            [call.getHeader('X-Hub-Signature'),
             call.content.getvalue(),
             call.setResponseCode(403, 'FORBIDDEN'),
             call.finish()])

        self.assert_calls_equal(
            self.m_loghandler,
            [call.handle(ArgIsLogRecord(levelname='WARNING'))])