diff options
author | Ralph Boehme <slow@samba.org> | 2019-08-17 11:36:55 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2019-10-09 14:35:29 +0000 |
commit | fa4c3fd9341412a9fc4a53923bf52f7433c08079 (patch) | |
tree | 0c1e642321eb415fe70401770e49a4d9a014f427 /python/samba | |
parent | c85cd5c4311512fff18b04267408eb60d7c8ecdf (diff) | |
download | samba-fa4c3fd9341412a9fc4a53923bf52f7433c08079.tar.gz |
selftest: add mdfind blackbox test
Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Noel Power <noel.power@suse.com>
Diffstat (limited to 'python/samba')
-rw-r--r-- | python/samba/tests/blackbox/mdfind.py | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/python/samba/tests/blackbox/mdfind.py b/python/samba/tests/blackbox/mdfind.py new file mode 100644 index 00000000000..44de51cf767 --- /dev/null +++ b/python/samba/tests/blackbox/mdfind.py @@ -0,0 +1,130 @@ +# +# Blackbox tests for mdfind +# +# Copyright (C) Ralph Boehme 2019 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# + +"""Blackbox test for mdfind""" + +import os +import time +import threading +import logging +import json +from http.server import HTTPServer, BaseHTTPRequestHandler +from samba.dcerpc import mdssvc +from samba.tests import BlackboxTestCase +from samba.samba3 import mdscli +from samba.logger import get_samba_logger + +logger = get_samba_logger(name=__name__) + +testfiles = [ + "foo", + "bar", +] + +class MdssvcHTTPRequestHandler(BaseHTTPRequestHandler): + def do_POST(self): + content_length = int(self.headers['content-length']) + body = self.rfile.read(content_length) + + actual_json = json.loads((body)) + expected_json = json.loads(self.server.json_in) + + if actual_json != expected_json: + logger.error("Bad request, expected:\n%s\nGot:\n%s\n" % (expected_json, actual_json)) + self.send_error(400, + "Bad request", + "Expected: %s\n" + "Got: %s\n" % + (expected_json, actual_json)) + return + + resp = bytes(self.server.json_out, encoding="utf-8") + + self.send_response(200) + self.send_header('content-type', 'application/json; charset=UTF-8') + self.send_header('content-length', len(resp)) + self.end_headers() + self.wfile.write(resp) + +class MdfindBlackboxTests(BlackboxTestCase): + + def setUp(self): + super(MdfindBlackboxTests, self).setUp() + + self.server = HTTPServer(('127.0.0.35', 8080), + MdssvcHTTPRequestHandler, + bind_and_activate=False) + + self.t = threading.Thread(target=MdfindBlackboxTests.http_server, args=(self,)) + self.t.setDaemon(True) + self.t.start() + time.sleep(1) + + pipe = mdssvc.mdssvc('ncacn_np:fileserver[/pipe/mdssvc]', self.get_loadparm()) + conn = mdscli.conn(pipe, 'spotlight', '/foo') + self.sharepath = conn.sharepath() + conn.disconnect(pipe) + + for file in testfiles: + f = open("%s/%s" % (self.sharepath, file), "w") + f.close() + + def tearDown(self): + super(BlackboxTestCase, self).tearDown() + for file in testfiles: + os.remove("%s/%s" % (self.sharepath, file)) + + def http_server(self): + self.server.server_bind() + self.server.server_activate() + self.server.serve_forever() + + def test_mdfind(self): + """Simple blackbox test for mdfind""" + + username = os.environ["USERNAME"] + password = os.environ["PASSWORD"] + config = os.environ["SMB_CONF_PATH"] + + json_in = r'''{ + "from": 0, "size": 100, "_source": ["path.real"], + "query": { + "query_string": { + "query": "(samba*) AND path.real.fulltext:\"%BASEPATH%\"" + } + } + }''' + json_out = '''{ + "hits" : { + "total" : { "value" : 2}, + "hits" : [ + {"_source" : {"path" : {"real" : "%BASEPATH%/foo"}}}, + {"_source" : {"path" : {"real" : "%BASEPATH%/bar"}}} + ] + } + }''' + + self.server.json_in = json_in.replace("%BASEPATH%", self.sharepath) + self.server.json_out = json_out.replace("%BASEPATH%", self.sharepath) + + output = self.check_output("mdfind -s %s -U %s%%%s fileserver spotlight '*==\"samba*\"'" % (config, username, password)) + + actual = output.decode('utf-8').splitlines() + expected = ["%s/%s" % (self.sharepath, file) for file in testfiles] + self.assertEquals(expected, actual) |