Skip to content

Commit 5324e81

Browse files
committed
feat: test of DS api added
1 parent 1e01a7f commit 5324e81

5 files changed

Lines changed: 125 additions & 12 deletions

File tree

‎Makefile‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ install:
44
test:
55
poetry run pytest
66

7+
test-api-admin:
8+
poetry run pytest tests/test_api_admin.py
9+
10+
test-api-analysis:
11+
poetry run pytest tests/test_api_analysis.py
12+
713
build:
814
poetry build
915

‎datashield_opal/impl.py‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from argparse import Namespace
66
from obiba_opal.core import OpalClient, UriBuilder, OpalRequest, OpalResponse, HTTPError
7-
from datashield.interface import DSDriver, DSConnection, DSResult, DSError
7+
from datashield.interface import DSLoginInfo, DSDriver, DSConnection, DSResult, DSError
88

99

1010
class OpalDSError(DSError):
@@ -291,12 +291,10 @@ def _delete(self, ws) -> OpalRequest:
291291
class OpalDriver(DSDriver):
292292

293293
@classmethod
294-
def new_connection(cls, name: str, args: dict, profile: str = 'default', restore: str = None) -> DSConnection:
295-
namedArgs = Namespace(opal = args['url'], user = args['user'], password = args['password'], token = args['token'])
294+
def new_connection(cls, args: DSLoginInfo, restore: str = None) -> DSConnection:
295+
namedArgs = Namespace(opal = args.url, user = args.user, password = args.password, token = args.token)
296296
loginInfo = OpalClient.LoginInfo.parse(namedArgs)
297-
return OpalConnection(name, loginInfo, profile, restore)
298-
299-
297+
return OpalConnection(args.name, loginInfo, args.profile, restore)
300298

301299
class OpalResult(DSResult):
302300

‎tests/test_api_admin.py‎

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
from datashield import DSSession, DSLoginBuilder
2+
3+
class TestClass:
4+
5+
@classmethod
6+
def setup_class(cls):
7+
#url = 'http://localhost:8080'
8+
url = 'https://opal-demo.obiba.org'
9+
builder = DSLoginBuilder().add('server1', url, 'dsuser', 'P@ssw0rd').add('server2', url, 'dsuser', 'P@ssw0rd')
10+
logins = builder.build()
11+
session = DSSession(logins)
12+
session.open()
13+
setattr(cls, 'session', session)
14+
15+
@classmethod
16+
def teardown_class(cls):
17+
cls.session.close()
18+
19+
def test_profiles(self):
20+
rval = self.session.profiles()
21+
assert 'server1' in rval
22+
assert rval['server1']['current'] == 'default'
23+
assert len(rval['server1']['available']) > 0
24+
25+
def test_packages(self):
26+
rval = self.session.packages()
27+
print(rval)
28+
assert True
29+
30+
def test_methods(self):
31+
rval = self.session.methods()
32+
print(rval)
33+
assert True
34+
35+
def test_tables(self):
36+
rval = self.session.tables()
37+
print(rval)
38+
assert True
39+
40+
def test_resources(self):
41+
rval = self.session.resources()
42+
print(rval)
43+
assert True
44+
45+
def test_workspaces(self):
46+
rval = self.session.workspaces()
47+
print(rval)
48+
assert True

‎tests/test_api_analysis.py‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from datashield import DSSession, DSLoginBuilder
2+
3+
class TestClass:
4+
5+
def setup_method(self, method):
6+
#url = 'http://localhost:8080'
7+
url = 'https://opal-demo.obiba.org'
8+
builder = DSLoginBuilder().add('server1', url, 'dsuser', 'P@ssw0rd').add('server2', url, 'dsuser', 'P@ssw0rd')
9+
logins = builder.build()
10+
self.session = DSSession(logins)
11+
self.session.open()
12+
13+
def teardown_method(self, method):
14+
self.session.close()
15+
16+
def test_assign_tables(self):
17+
self.session.assign_table('df', tables = { 'server1': 'CNSIM.CNSIM1', 'server2': 'CNSIM.CNSIM2' }, asynchronous = False)
18+
rval = self.session.ls()
19+
assert len(rval) == 2
20+
assert 'server1' in rval
21+
assert rval['server1'] == ['df']
22+
assert 'server2' in rval
23+
assert rval['server2'] == ['df']
24+
25+
def test_assign_table(self):
26+
self.session.assign_table('df', table = 'CNSIM.CNSIM1', asynchronous = False)
27+
rval = self.session.ls()
28+
assert len(rval) == 2
29+
assert 'server1' in rval
30+
assert rval['server1'] == ['df']
31+
assert 'server2' in rval
32+
assert rval['server2'] == ['df']
33+
34+
def test_assign_resources(self):
35+
self.session.assign_resource('client', resources = { 'server1': 'RSRC.CNSIM1', 'server2': 'RSRC.CNSIM2' }, asynchronous = False)
36+
rval = self.session.ls()
37+
assert len(rval) == 2
38+
assert 'server1' in rval
39+
assert rval['server1'] == ['client']
40+
assert 'server2' in rval
41+
assert rval['server2'] == ['client']
42+
43+
self.session.assign_expr('df', 'as.resource.data.frame(client, strict = TRUE)', asynchronous = False)
44+
rval = self.session.ls()
45+
assert len(rval) == 2
46+
assert 'server1' in rval
47+
assert len(rval['server1']) == 2
48+
assert 'client' in rval['server1']
49+
assert 'df' in rval['server1']
50+
51+
def test_assign_resource(self):
52+
self.session.assign_resource('client', resource = 'RSRC.CNSIM1', asynchronous = False)
53+
rval = self.session.ls()
54+
assert len(rval) == 2
55+
assert 'server1' in rval
56+
assert rval['server1'] == ['client']
57+
assert 'server2' in rval
58+
assert rval['server2'] == ['client']
59+
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
1-
from datashield.interface import DSDriver, DSError
2-
from datashield import DSLoginBuilder
1+
from datashield import DSError, DSLoginBuilder, DSSession
32
import time
43

54

65
class TestClass:
76

87
@classmethod
98
def setup_class(cls):
10-
driver = DSDriver.load_class('datashield_opal.OpalDriver')
119
#url = 'http://localhost:8080'
1210
url = 'https://opal-demo.obiba.org'
1311
builder = DSLoginBuilder().add('server1', url, 'dsuser', 'P@ssw0rd')
1412
logins = builder.build()
15-
conn = driver.new_connection(logins[0]['name'], logins[0], profile = logins[0]['profile'])
16-
setattr(cls, 'conn', conn)
13+
session = DSSession(logins)
14+
session.open()
15+
print(session.has_errors())
16+
print(session.has_connections())
17+
setattr(cls, 'session', session)
18+
setattr(cls, 'conn', session.conns[0])
1719

1820
@classmethod
1921
def teardown_class(cls):
20-
cls.conn.disconnect()
22+
cls.session.close()
2123

2224
def test_driver(self):
2325
conn = self.conn

0 commit comments

Comments
 (0)