예제 #1
0
 def test_make_callback_noaction(self):
     context = DummyContext()
     context.supervisord = DummySupervisor()
     context.template = 'ui/status.html'
     context.form = {}
     view = self._makeOne(context)
     self.assertRaises(ValueError, view.make_callback, 'process', None)
예제 #2
0
 def test_ctor(self):
     supervisor = DummySupervisor()
     subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
     handler = self._makeOne(supervisor, subinterfaces)
     self.assertEqual(handler.supervisord, supervisor)
     from docker_supervisor.xmlrpc import RootRPCInterface
     self.assertEqual(handler.rpcinterface.__class__, RootRPCInterface)
예제 #3
0
 def test_handle_request_stdout_logfile_missing(self):
     supervisor = DummySupervisor()
     supervisor.options.logfile = '/not/there'
     request = DummyRequest('/mainlogtail', None, None, None)
     handler = self._makeOne(supervisor)
     handler.handle_request(request)
     self.assertEqual(request._error, 410)
예제 #4
0
 def test_continue_request_no_params_in_request(self):
     supervisor = DummySupervisor()
     subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
     handler = self._makeOne(supervisor, subinterfaces)
     data = '<?xml version="1.0" encoding="UTF-8"?>' \
            '<methodCall>' \
            '<methodName>supervisor.getAPIVersion</methodName>' \
            '</methodCall>'
     request = DummyRequest('/what/ever', None, None, None)
     handler.continue_request(data, request)
     logdata = supervisor.options.logger.data
     from docker_supervisor.xmlrpc import loads
     if loads:
         expected = 2
     else:
         expected = 3
     self.assertEqual(len(logdata), expected)
     self.assertEqual(logdata[-2],
                      u'XML-RPC method called: supervisor.getAPIVersion()')
     self.assertEqual(
         logdata[-1],
         u'XML-RPC method supervisor.getAPIVersion() returned successfully')
     self.assertEqual(len(request.producers), 1)
     xml_response = request.producers[0]
     import xmlrpclib
     response = xmlrpclib.loads(xml_response)
     from docker_supervisor.rpcinterface import API_VERSION
     self.assertEqual(response[0][0], API_VERSION)
     self.assertEqual(request._done, True)
     self.assertEqual(request.headers['Content-Type'], 'text/xml')
     self.assertEqual(request.headers['Content-Length'], len(xml_response))
예제 #5
0
    def test_match(self):
        class FakeRequest:
            def __init__(self, uri):
                self.uri = uri

        supervisor = DummySupervisor()
        handler = self._makeOne(supervisor)
        self.assertEqual(handler.match(FakeRequest(handler.path)), True)
예제 #6
0
 def test_render_refresh(self):
     context = DummyContext()
     context.supervisord = DummySupervisor()
     context.template = 'ui/status.html'
     context.response = {}
     context.form = {'action':'refresh'}
     view = self._makeOne(context)
     data = view.render()
     from docker_supervisor.http import NOT_DONE_YET
     self.assertTrue(data is NOT_DONE_YET, data)
예제 #7
0
 def test_render_noaction(self):
     context = DummyContext()
     context.supervisord = DummySupervisor()
     context.template = 'ui/status.html'
     context.request = DummyRequest('/foo', [], '', '')
     context.form = {}
     context.response = {}
     view = self._makeOne(context)
     data = view.render()
     self.assertTrue(data.startswith('<!DOCTYPE html PUBLIC'), data)
예제 #8
0
    def test_match(self):
        class DummyRequest2:
            def __init__(self, uri):
                self.uri = uri

        supervisor = DummySupervisor()
        subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
        handler = self._makeOne(supervisor, subinterfaces)
        self.assertEqual(handler.match(DummyRequest2('/RPC2')), True)
        self.assertEqual(handler.match(DummyRequest2('/nope')), False)
예제 #9
0
 def test_handle_request(self):
     supervisor = DummySupervisor()
     f = tempfile.NamedTemporaryFile()
     t = f.name
     supervisor.options.logfile = t
     handler = self._makeOne(supervisor)
     request = DummyRequest('/mainlogtail', None, None, None)
     handler.handle_request(request)
     self.assertEqual(request._error, None)
     from docker_supervisor.medusa import http_date
     self.assertEqual(request.headers['Last-Modified'],
                      http_date.build_http_date(os.stat(t)[stat.ST_MTIME]))
     self.assertEqual(request.headers['Content-Type'], 'text/plain')
     self.assertEqual(len(request.producers), 1)
     self.assertEqual(request._done, True)
예제 #10
0
 def _make_http_servers(self, sconfigs):
     options = DummyOptions()
     options.server_configs = sconfigs
     options.rpcinterface_factories = [('dummy', DummyRPCInterfaceFactory,
                                        {})]
     supervisord = DummySupervisor()
     from docker_supervisor.http import make_http_servers
     servers = make_http_servers(options, supervisord)
     try:
         for config, s in servers:
             s.close()
             socketfile = config.get('file')
             if socketfile is not None:
                 os.unlink(socketfile)
     finally:
         from asyncore import socket_map
         socket_map.clear()
     return servers
예제 #11
0
 def test_continue_request_400_if_method_name_is_empty(self):
     supervisor = DummySupervisor()
     subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
     handler = self._makeOne(supervisor, subinterfaces)
     data = '<?xml version="1.0" encoding="UTF-8"?>' \
            '<methodCall><methodName></methodName></methodCall>'
     request = DummyRequest('/what/ever', None, None, None)
     handler.continue_request(data, request)
     logdata = supervisor.options.logger.data
     from docker_supervisor.xmlrpc import loads
     if loads:
         expected = 1
     else:
         expected = 2
     self.assertEqual(len(logdata), expected)
     self.assertEqual(logdata[-1],
                      u'XML-RPC request received with no method name')
     self.assertEqual(len(request.producers), 0)
     self.assertEqual(request._error, 400)
예제 #12
0
 def test_continue_request_500(self):
     supervisor = DummySupervisor()
     subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
     handler = self._makeOne(supervisor, subinterfaces)
     import xmlrpclib
     data = xmlrpclib.dumps((), 'supervisor.raiseError')
     request = DummyRequest('/what/ever', None, None, None)
     handler.continue_request(data, request)
     logdata = supervisor.options.logger.data
     from docker_supervisor.xmlrpc import loads
     if loads:
         expected = 2
     else:
         expected = 3
     self.assertEqual(len(logdata), expected)
     self.assertEqual(logdata[-2],
                      u'XML-RPC method called: supervisor.raiseError()')
     self.assertTrue(logdata[-1].startswith('Traceback'))
     self.assertTrue(logdata[-1].endswith('ValueError: error\n'))
     self.assertEqual(len(request.producers), 0)
     self.assertEqual(request._error, 500)
예제 #13
0
 def test_continue_request_nosuchmethod(self):
     supervisor = DummySupervisor()
     subinterfaces = [('supervisor', DummySupervisorRPCNamespace())]
     handler = self._makeOne(supervisor, subinterfaces)
     import xmlrpclib
     data = xmlrpclib.dumps(('a', 'b'), 'supervisor.noSuchMethod')
     request = DummyRequest('/what/ever', None, None, None)
     handler.continue_request(data, request)
     logdata = supervisor.options.logger.data
     from docker_supervisor.xmlrpc import loads
     if loads:
         expected = 2
     else:
         expected = 3
     self.assertEqual(len(logdata), expected)
     self.assertEqual(logdata[-2],
                      u'XML-RPC method called: supervisor.noSuchMethod()')
     self.assertEqual(
         logdata[-1],
         (u'XML-RPC method supervisor.noSuchMethod() returned fault: '
          '[1] UNKNOWN_METHOD'))
     self.assertEqual(len(request.producers), 1)
     xml_response = request.producers[0]
     self.assertRaises(xmlrpclib.Fault, xmlrpclib.loads, xml_response)
예제 #14
0
 def _makeOne(self):
     supervisord = DummySupervisor()
     handler = self._getTargetClass()(supervisord)
     return handler
예제 #15
0
 def test_handle_request_stdout_logfile_none(self):
     supervisor = DummySupervisor()
     handler = self._makeOne(supervisor)
     request = DummyRequest('/mainlogtail', None, None, None)
     handler.handle_request(request)
     self.assertEqual(request._error, 410)