/
seeddb_test.py
91 lines (70 loc) · 2.63 KB
/
seeddb_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from __future__ import print_function
from django.urls import reverse
from django.http import Http404
from django.test.client import RequestFactory
from mock import MagicMock
from nav.compatibility import smart_str
from nav.models.manage import Netbox, Room
from nav.web.seeddb.page.netbox.edit import netbox_edit, log_netbox_change
from nav.web.seeddb.utils.delete import dependencies
import pytest
def test_usage_edit_url_should_allow_slashes():
assert reverse('seeddb-usage-edit', args=('TEST/SLASH',))
def test_editing_deleted_netboxes_should_raise_404(admin_account):
netboxid = 666 # Assuming no such netbox exists in test data set!
factory = RequestFactory()
url = reverse('seeddb-netbox-edit', args=(netboxid,))
request = factory.get(url)
request.account = admin_account
request.session = MagicMock()
with pytest.raises(Http404):
netbox_edit(request, netboxid)
def test_adding_netbox_with_invalid_ip_should_fail(db, client):
url = reverse('seeddb-netbox-edit')
ip = "195.88.54.16'))) OR 2121=(SELECT COUNT(*) FROM GENERATE_SERIES(1,15000000)) AND ((('FRyc' LIKE 'FRyc"
response = client.post(
url,
follow=True,
data={
"ip": ip,
"room": "myroom",
"category": "GW",
"organization": "myorg",
},
)
assert response.status_code == 200
assert 'Form was not valid' in smart_str(response.content)
assert 'Could not resolve name' in smart_str(response.content)
@pytest.fixture()
def netbox(management_profile):
box = Netbox(
ip='10.254.254.254',
sysname='downhost.example.org',
organization_id='myorg',
room_id='myroom',
category_id='SRV',
)
box.save()
yield box
print("teardown test device")
box.delete()
def test_dependencies(netbox):
"""Tests the related objects listed when deleting objects in seeddb"""
qs = Room.objects.filter(pk='myroom')
deps = dependencies(qs, [Netbox])
assert 'myroom' in deps
assert [netbox] == deps.get('myroom')
def test_dependencies_no_whitelist(netbox):
"""Tests the related objects listed when deleting objects in seeddb"""
qs = Room.objects.filter(pk='myroom')
deps = dependencies(qs, [])
assert Netbox.objects.get(pk=netbox.pk)
assert deps == {}
def test_log_netbox_change_should_not_crash(admin_account, netbox):
"""Regression test to ensure this function doesn't try to access removed or
invalid attributes on Netbox.
"""
old = Netbox.objects.get(id=netbox.id)
new = netbox
new.category_id = "OTHER"
assert log_netbox_change(admin_account, old, new) is None