def test_successful_write(self, mock_post):
        xml_frag = """<InstantaneousDemand></InstantaneousDemand>"""

        response = mock.MagicMock()
        response.status_code = 200
        response.content = "OK"
        mock_post.return_value = response

        writer = WeMonitorWriter()
        writer.update(xml_frag)
        self.assertTrue(mock_post.called, "Failed to call requests.post")
    def test_one_connection_error(self, mock_post, mock_sleep, mock_syslog, mock_system):
        xml_frag = """<InstantaneousDemand></InstantaneousDemand>"""

        mock_post.side_effect = requests.ConnectionError("whoops")
        mock_system.return_value = 0

        writer = WeMonitorWriter()
        with self.assertRaises(requests.ConnectionError):
            writer.update(xml_frag)

        observed_arg = mock_syslog.call_args[0][1]
        self.assertRegexpMatches(observed_arg, 'ping')
    def test_failing_write(self, mock_post, mock_syslog):
        xml_frag = """<InstantaneousDemand></InstantaneousDemand>"""

        response = mock.MagicMock()
        response.status_code = 403
        response.content = "Forbidden"
        mock_post.return_value = response

        writer = WeMonitorWriter()
        writer.update(xml_frag)
        observed_arg = mock_syslog.call_args[0][1]
        self.assertRegexpMatches(observed_arg, 'Forbidden')