Skip to content
Snippets Groups Projects
Verified Commit 06205692 authored by Timm Fitschen's avatar Timm Fitschen
Browse files

Merge branch 'dev' of gitlab.indiscale.com:caosdb/src/caosdb-pyinttest into dev

parents bc92027e 435bc66d
No related branches found
No related tags found
No related merge requests found
Pipeline #12899 failed
...@@ -34,6 +34,7 @@ import caosdb as db ...@@ -34,6 +34,7 @@ import caosdb as db
from caosdb import (Container, Info, Property, Record, RecordType, from caosdb import (Container, Info, Property, Record, RecordType,
execute_query) execute_query)
from pytest import raises from pytest import raises
from pytest import mark
def setup(): def setup():
...@@ -581,3 +582,12 @@ def test_cache_performance(): ...@@ -581,3 +582,12 @@ def test_cache_performance():
t2 = t.time() - t1 t2 = t.time() - t1
print("Time [s]: " + str(t2)) print("Time [s]: " + str(t2))
n += 10 n += 10
@mark.xfail(reason="Waits for MR https://gitlab.indiscale.com/caosdb/src/caosdb-pylib/-/merge_requests/15")
def test_role_after_retrieve():
rt = db.RecordType("TestRT").insert()
entity = db.Entity(id=rt.id)
assert entity.role is None
entity.retrieve()
assert entity.role == rt.role
...@@ -26,20 +26,22 @@ ...@@ -26,20 +26,22 @@
Integration tests for the implementation of the server-side-scripting api. Integration tests for the implementation of the server-side-scripting api.
""" """
from __future__ import print_function, unicode_literals from __future__ import print_function, unicode_literals
import json
import os import os
import ssl
import tempfile import tempfile
from pytest import raises, mark
import json
from lxml import etree
from http.client import HTTPSConnection from http.client import HTTPSConnection
import ssl
from caosdb import get_connection, get_config, Info, execute_query, RecordType from caosdb import Info, RecordType
from caosdb.exceptions import (HTTPClientError, from caosdb import administration as admin
HTTPResourceNotFoundError) from caosdb import execute_query, get_config, get_connection
from caosdb.connection.encode import MultipartParam, multipart_encode from caosdb.connection.encode import MultipartParam, multipart_encode
from caosdb.connection.utils import urlencode, urlparse from caosdb.connection.utils import urlencode, urlparse
from caosdb import administration as admin from caosdb.exceptions import HTTPClientError, HTTPResourceNotFoundError
from caosdb.utils.server_side_scripting import run_server_side_script from caosdb.utils.server_side_scripting import run_server_side_script
from lxml import etree
from pytest import mark, raises
_TEST_SCRIPTS = ["not_executable", "ok", "err", "ok_anonymous"] _TEST_SCRIPTS = ["not_executable", "ok", "err", "ok_anonymous"]
...@@ -63,6 +65,7 @@ _ORIGINAL_SERVER_SCRIPTING_BIN_DIR = "" ...@@ -63,6 +65,7 @@ _ORIGINAL_SERVER_SCRIPTING_BIN_DIR = ""
def clean_database(): def clean_database():
admin._set_permissions("anonymous", []) admin._set_permissions("anonymous", [])
d = execute_query("FIND ENTITY WITH ID > 99") d = execute_query("FIND ENTITY WITH ID > 99")
if len(d) > 0: if len(d) > 0:
d.delete() d.delete()
...@@ -84,15 +87,17 @@ def setup_module(): ...@@ -84,15 +87,17 @@ def setup_module():
clean_database() clean_database()
from os import makedirs from os import makedirs
from os.path import join, isdir, exists from os.path import exists, isdir, join
from shutil import copyfile, copymode from shutil import copyfile, copymode
print("bin dir (local): " + str(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL)) print("bin dir (local): " + str(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL))
print("bin dir (server): " + str(_SERVER_SIDE_SCRIPTING_BIN_DIR_SERVER)) print("bin dir (server): " + str(_SERVER_SIDE_SCRIPTING_BIN_DIR_SERVER))
print("tests scripts: " + str(_TEST_SCRIPTS)) print("tests scripts: " + str(_TEST_SCRIPTS))
if not exists(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL): if not exists(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL):
makedirs(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL) makedirs(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL)
_REMOVE_FILES_AFTERWARDS.append(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL) _REMOVE_FILES_AFTERWARDS.append(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL)
assert isdir(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL) assert isdir(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL)
for script_file in _TEST_SCRIPTS: for script_file in _TEST_SCRIPTS:
target = join(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL, script_file) target = join(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL, script_file)
src = join(_TEST_SCRIPTS_DIR, script_file) src = join(_TEST_SCRIPTS_DIR, script_file)
...@@ -105,6 +110,7 @@ def teardown_module(): ...@@ -105,6 +110,7 @@ def teardown_module():
from os import remove from os import remove
from os.path import exists, isdir from os.path import exists, isdir
from shutil import rmtree from shutil import rmtree
for obsolete in _REMOVE_FILES_AFTERWARDS: for obsolete in _REMOVE_FILES_AFTERWARDS:
if exists(obsolete): if exists(obsolete):
if isdir(obsolete): if isdir(obsolete):
...@@ -160,6 +166,7 @@ def test_call_err(): ...@@ -160,6 +166,7 @@ def test_call_err():
assert xml.xpath("/Response/script/stderr")[0].text == "err" assert xml.xpath("/Response/script/stderr")[0].text == "err"
@mark.xfail(reason=("package incompatibility: pandas and numexpr"))
def test_run_server_side_script_with_file_as_positional_param(): def test_run_server_side_script_with_file_as_positional_param():
RecordType("TestRT").insert() RecordType("TestRT").insert()
_REMOVE_FILES_AFTERWARDS.append("test_file.txt") _REMOVE_FILES_AFTERWARDS.append("test_file.txt")
...@@ -185,6 +192,7 @@ def test_run_server_side_script_with_file_as_positional_param(): ...@@ -185,6 +192,7 @@ def test_run_server_side_script_with_file_as_positional_param():
assert "./.upload_files/test_file.txt" in json_data["files"] assert "./.upload_files/test_file.txt" in json_data["files"]
@mark.xfail(reason=("package incompatibility: pandas and numexpr"))
def test_run_server_side_script_with_additional_file(): def test_run_server_side_script_with_additional_file():
RecordType("TestRT").insert() RecordType("TestRT").insert()
_REMOVE_FILES_AFTERWARDS.append("test_file.txt") _REMOVE_FILES_AFTERWARDS.append("test_file.txt")
...@@ -208,6 +216,7 @@ def test_run_server_side_script_with_additional_file(): ...@@ -208,6 +216,7 @@ def test_run_server_side_script_with_additional_file():
assert "./.upload_files/test_file.txt" in json_data["files"] assert "./.upload_files/test_file.txt" in json_data["files"]
@mark.xfail(reason=("package incompatibility: pandas and numexpr"))
def test_diagnostics_basic(): def test_diagnostics_basic():
RecordType("TestRT").insert() RecordType("TestRT").insert()
...@@ -246,6 +255,7 @@ def test_diagnostics_basic(): ...@@ -246,6 +255,7 @@ def test_diagnostics_basic():
assert xml.xpath("/Response/script/stderr")[0].text is None assert xml.xpath("/Response/script/stderr")[0].text is None
@mark.xfail(reason=("package incompatibility: pandas and numexpr"))
def test_diagnostics_with_file_upload(): def test_diagnostics_with_file_upload():
RecordType("TestRT").insert() RecordType("TestRT").insert()
_REMOVE_FILES_AFTERWARDS.append("test_file.txt") _REMOVE_FILES_AFTERWARDS.append("test_file.txt")
...@@ -330,6 +340,7 @@ def request(method, headers, path, body=None): ...@@ -330,6 +340,7 @@ def request(method, headers, path, body=None):
""" """
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.verify_mode = ssl.CERT_REQUIRED context.verify_mode = ssl.CERT_REQUIRED
if hasattr(context, "check_hostname"): if hasattr(context, "check_hostname"):
context.check_hostname = True context.check_hostname = True
context.load_verify_locations(get_config().get("Connection", "cacert")) context.load_verify_locations(get_config().get("Connection", "cacert"))
...@@ -341,6 +352,7 @@ def request(method, headers, path, body=None): ...@@ -341,6 +352,7 @@ def request(method, headers, path, body=None):
str(fullurl.netloc), timeout=200, context=context) str(fullurl.netloc), timeout=200, context=context)
http_con.request(method=method, headers=headers, url=str(fullurl.path) + http_con.request(method=method, headers=headers, url=str(fullurl.path) +
path, body=body) path, body=body)
return http_con.getresponse() return http_con.getresponse()
...@@ -364,7 +376,7 @@ def test_anonymous_script_calling_not_permitted(): ...@@ -364,7 +376,7 @@ def test_anonymous_script_calling_not_permitted():
assert response.getheader("Set-Cookie") is None # no auth token returned assert response.getheader("Set-Cookie") is None # no auth token returned
@mark.local_server @ mark.local_server
def test_anonymous_script_calling_success(): def test_anonymous_script_calling_success():
admin.set_server_property("SERVER_SIDE_SCRIPTING_BIN_DIRS", admin.set_server_property("SERVER_SIDE_SCRIPTING_BIN_DIRS",
_SERVER_SIDE_SCRIPTING_BIN_DIR_SERVER) _SERVER_SIDE_SCRIPTING_BIN_DIR_SERVER)
...@@ -398,6 +410,7 @@ def test_anonymous_script_calling_success(): ...@@ -398,6 +410,7 @@ def test_anonymous_script_calling_success():
@mark.local_server @mark.local_server
def test_evil_path(): def test_evil_path():
subdir = os.path.join(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL, "subdir") subdir = os.path.join(_SERVER_SIDE_SCRIPTING_BIN_DIR_LOCAL, "subdir")
if not os.path.exists(subdir): if not os.path.exists(subdir):
os.makedirs(subdir) os.makedirs(subdir)
_REMOVE_FILES_AFTERWARDS.append(subdir) _REMOVE_FILES_AFTERWARDS.append(subdir)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment