Skip to content

Commit e72d049

Browse files
committed
[tests] Added tests for multi-tenant admin
1 parent 521e494 commit e72d049

File tree

2 files changed

+151
-6
lines changed

2 files changed

+151
-6
lines changed

openwisp_controller/config/tests/test_admin.py

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -514,16 +514,63 @@ def test_template_vpn_fk_autocomplete_view(self):
514514
hidden=[data['vpn2'].name, data['vpn_inactive'].name],
515515
)
516516

517+
def test_org_admin_create_template_with_shared_vpn(self):
518+
vpn = self._create_vpn(organization=None)
519+
org = self._create_org()
520+
administrator = self._create_administrator(organizations=[org])
521+
path = reverse(f'admin:{self.app_label}_template_add')
522+
payload = {
523+
'organization': '',
524+
'name': 'Test',
525+
'type': 'vpn',
526+
'vpn': str(vpn.id),
527+
'backend': 'netjsonconfig.OpenWrt',
528+
'config': '',
529+
'default_values': '',
530+
'tags': '',
531+
}
532+
self.assertEqual(Template.objects.count(), 2)
533+
534+
with self.subTest('Should not allow creating shared template'):
535+
self._test_org_admin_create_shareable_object(
536+
path=path,
537+
payload=payload,
538+
model=Template,
539+
expected_count=2,
540+
user=administrator,
541+
)
542+
543+
with self.subTest('Should allow creating non-shared template'):
544+
payload['organization'] = str(org.pk)
545+
self._test_org_admin_create_shareable_object(
546+
path=path,
547+
payload=payload,
548+
model=Template,
549+
expected_count=3,
550+
user=administrator,
551+
raises_error=False,
552+
)
553+
554+
def test_org_admin_view_shared_template(self):
555+
vpn = self._create_vpn(organization=None)
556+
template = self._create_template(type='vpn', vpn=vpn)
557+
self._test_org_admin_view_shareable_object(
558+
path=reverse(f'admin:{self.app_label}_template_change', args=[template.pk]),
559+
)
560+
517561
def test_vpn_queryset(self):
518562
data = self._create_multitenancy_test_env(vpn=True)
519563
self._test_multitenant_admin(
520564
url=reverse(f'admin:{self.app_label}_vpn_changelist'),
521-
visible=[data['org1'].name, data['vpn1'].name],
565+
visible=[
566+
data['org1'].name,
567+
data['vpn1'].name,
568+
data['vpn_shared'].name,
569+
],
522570
hidden=[
523571
data['org2'].name,
524572
data['inactive'],
525573
data['vpn2'].name,
526-
data['vpn_shared'].name,
527574
data['vpn_inactive'].name,
528575
],
529576
)
@@ -569,6 +616,39 @@ def test_recoverlist_operator_403(self):
569616
self._test_recoverlist_operator_403(self.app_label, 'template')
570617
self._test_recoverlist_operator_403(self.app_label, 'vpn')
571618

619+
def test_org_admin_create_shared_vpn(self):
620+
org = self._get_org()
621+
ca = self._create_ca(organization=org)
622+
self._test_org_admin_create_shareable_object(
623+
path=reverse(f'admin:{self.app_label}_vpn_add'),
624+
model=Vpn,
625+
payload={
626+
'organization': '',
627+
'name': 'Test',
628+
'host': 'vpn1.test.com',
629+
'key': 'vZFUV5FqYt4WW9nerc23BofQH51gHNNy',
630+
'backend': 'openwisp_controller.vpn_backends.OpenVPN',
631+
'ca': ca.pk,
632+
'config': {
633+
'openvpn': [
634+
{
635+
'server_bridge': '10.8.0.0 255.255.255.0',
636+
'name': 'tun0',
637+
'mode': 'server',
638+
'proto': 'udp',
639+
'dev': 'tun0',
640+
}
641+
]
642+
},
643+
},
644+
)
645+
646+
def test_org_admin_view_shared_vpn(self):
647+
vpn = self._create_vpn(organization=None)
648+
self._test_org_admin_view_shareable_object(
649+
path=reverse(f'admin:{self.app_label}_vpn_change', args=[vpn.pk]),
650+
)
651+
572652
def test_device_template_filter(self):
573653
org = self._get_org(org_name='test-org')
574654
t = self._create_template(name='test-template', organization=org)

openwisp_controller/pki/tests/test_admin.py

Lines changed: 69 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,15 @@ def test_ca_queryset(self):
5858
data = self._create_multitenancy_test_env()
5959
self._test_multitenant_admin(
6060
url=reverse(f'admin:{self.app_label}_ca_changelist'),
61-
visible=[data['ca1'].name, data['org1'].name],
61+
visible=[
62+
data['ca1'].name,
63+
data['org1'].name,
64+
data['ca_shared'].name,
65+
],
6266
hidden=[
6367
data['ca2'].name,
6468
data['org2'].name,
6569
data['ca_inactive'].name,
66-
data['ca_shared'].name,
6770
],
6871
)
6972

@@ -76,16 +79,39 @@ def test_ca_organization_fk_autocomplete_view(self):
7679
administrator=True,
7780
)
7881

82+
def test_org_create_shared_ca(self):
83+
self._test_org_admin_create_shareable_object(
84+
path=reverse(f'admin:{self.app_label}_ca_add'),
85+
model=Ca,
86+
payload={
87+
'name': 'ca-shared',
88+
'organization': '',
89+
'key_length': 2048,
90+
'digest': 'sha256',
91+
'operation_type': 'new',
92+
'extensions': '',
93+
},
94+
)
95+
96+
def test_org_admin_view_shared_ca(self):
97+
ca = self._create_ca(organization=None)
98+
self._test_org_admin_view_shareable_object(
99+
path=reverse(f'admin:{self.app_label}_ca_change', args=[ca.pk]),
100+
)
101+
79102
def test_cert_queryset(self):
80103
data = self._create_multitenancy_test_env(cert=True)
81104
self._test_multitenant_admin(
82105
url=reverse(f'admin:{self.app_label}_cert_changelist'),
83-
visible=[data['cert1'].name, data['org1'].name],
106+
visible=[
107+
data['cert1'].name,
108+
data['org1'].name,
109+
data['cert_shared'].name,
110+
],
84111
hidden=[
85112
data['cert2'].name,
86113
data['org2'].name,
87114
data['cert_inactive'].name,
88-
data['cert_shared'].name,
89115
],
90116
)
91117

@@ -109,6 +135,45 @@ def test_cert_ca_fk_autocomplete_view(self):
109135
administrator=True,
110136
)
111137

138+
def test_org_admin_create_cert_with_shared_ca(self):
139+
org = self._get_org()
140+
administrator = self._create_administrator(organizations=[org])
141+
shared_ca = self._create_ca(organization=None)
142+
payload = {
143+
'name': 'Test',
144+
'organization': '',
145+
'ca': str(shared_ca.pk),
146+
'operation_type': 'new',
147+
'key_length': 2048,
148+
'digest': 'sha256',
149+
'extensions': '[]',
150+
}
151+
with self.subTest('Should not allow creating shared certificate'):
152+
self._test_org_admin_create_shareable_object(
153+
path=reverse(f'admin:{self.app_label}_cert_add'),
154+
model=Cert,
155+
payload=payload,
156+
user=administrator,
157+
)
158+
159+
with self.subTest('Should allow creating non-shared certificate'):
160+
payload['organization'] = str(org.pk)
161+
self._test_org_admin_create_shareable_object(
162+
path=reverse(f'admin:{self.app_label}_cert_add'),
163+
model=Cert,
164+
payload=payload,
165+
user=administrator,
166+
raises_error=False,
167+
expected_count=1,
168+
)
169+
170+
def test_org_admin_view_shared_cert(self):
171+
shared_ca = self._create_ca(organization=None)
172+
shared_cert = self._create_cert(ca=shared_ca, organization=None)
173+
self._test_org_admin_view_shareable_object(
174+
path=reverse(f'admin:{self.app_label}_cert_change', args=[shared_cert.pk]),
175+
)
176+
112177
def test_cert_changeform_200(self):
113178
org = self._create_org(name='test-org')
114179
self._create_operator(organizations=[org])

0 commit comments

Comments
 (0)