xref: /unit/test/unit/control.py (revision 1654)
11019Szelenkov@nginx.comimport json
21477Szelenkov@nginx.com
3*1654Szelenkov@nginx.comfrom conftest import option
41019Szelenkov@nginx.comfrom unit.http import TestHTTP
51019Szelenkov@nginx.com
61019Szelenkov@nginx.com
71051Szelenkov@nginx.comdef args_handler(conf_func):
81051Szelenkov@nginx.com    def args_wrapper(self, *args):
91051Szelenkov@nginx.com        argcount = conf_func.__code__.co_argcount
101051Szelenkov@nginx.com        url_default = '/config'
111051Szelenkov@nginx.com        conf = None
121051Szelenkov@nginx.com
131051Szelenkov@nginx.com        if argcount == 2:
141051Szelenkov@nginx.com            url = args[0] if len(args) == 1 else url_default
151051Szelenkov@nginx.com
161051Szelenkov@nginx.com        elif argcount == 3:
171051Szelenkov@nginx.com            conf = args[0]
181051Szelenkov@nginx.com
191051Szelenkov@nginx.com            if isinstance(conf, dict) or isinstance(conf, list):
201051Szelenkov@nginx.com                conf = json.dumps(conf)
211051Szelenkov@nginx.com
221051Szelenkov@nginx.com            url = args[1] if len(args) == 2 else url_default
231051Szelenkov@nginx.com
241051Szelenkov@nginx.com        url = url if url.startswith('/') else url_default + '/' + url
251051Szelenkov@nginx.com        arguments = (self, url) if conf is None else (self, conf, url)
261051Szelenkov@nginx.com
271051Szelenkov@nginx.com        return json.loads(conf_func(*arguments))
281051Szelenkov@nginx.com
291051Szelenkov@nginx.com    return args_wrapper
301051Szelenkov@nginx.com
311051Szelenkov@nginx.com
321019Szelenkov@nginx.comclass TestControl(TestHTTP):
331019Szelenkov@nginx.com
341019Szelenkov@nginx.com    # TODO socket reuse
351019Szelenkov@nginx.com    # TODO http client
361019Szelenkov@nginx.com
371051Szelenkov@nginx.com    @args_handler
381051Szelenkov@nginx.com    def conf(self, conf, url):
391051Szelenkov@nginx.com        return self.put(**self._get_args(url, conf))['body']
401019Szelenkov@nginx.com
411051Szelenkov@nginx.com    @args_handler
421051Szelenkov@nginx.com    def conf_get(self, url):
431051Szelenkov@nginx.com        return self.get(**self._get_args(url))['body']
441019Szelenkov@nginx.com
451051Szelenkov@nginx.com    @args_handler
461051Szelenkov@nginx.com    def conf_delete(self, url):
471051Szelenkov@nginx.com        return self.delete(**self._get_args(url))['body']
481019Szelenkov@nginx.com
491052Szelenkov@nginx.com    @args_handler
501052Szelenkov@nginx.com    def conf_post(self, conf, url):
511052Szelenkov@nginx.com        return self.post(**self._get_args(url, conf))['body']
521052Szelenkov@nginx.com
531051Szelenkov@nginx.com    def _get_args(self, url, conf=None):
541051Szelenkov@nginx.com        args = {
551051Szelenkov@nginx.com            'url': url,
561051Szelenkov@nginx.com            'sock_type': 'unix',
57*1654Szelenkov@nginx.com            'addr': option.temp_dir + '/control.unit.sock',
581051Szelenkov@nginx.com        }
591019Szelenkov@nginx.com
601051Szelenkov@nginx.com        if conf is not None:
611051Szelenkov@nginx.com            args['body'] = conf
621019Szelenkov@nginx.com
631051Szelenkov@nginx.com        return args
64