Thomas Waldmann ce83e293bb support notfqdn api result code
we do not really need it as far as the service is concerned (we would give some other valid failure result code),
but it might help to user to more quickly find the mistake in his client configuration.
2013-11-24 06:42:55 +01:00

149 lines
5.6 KiB
Python

"""
Tests for api package.
"""
import pytest
from django.core.urlresolvers import reverse
TEST_HOST = "test.nsupdate.info"
TEST_HOST2 = "test2.nsupdate.info"
TEST_SECRET = "secret"
USERNAME = 'test'
PASSWORD = 'pass'
def test_myip(client):
response = client.get(reverse('myip'))
assert response.status_code == 200
assert response.content in ['127.0.0.1', '::1']
def test_nic_update_noauth(client):
response = client.get(reverse('nic_update'))
assert response.status_code == 401
assert response.content == "badauth"
def make_basic_auth_header(username, password):
import base64
return "Basic " + base64.b64encode("%s:%s" % (username, password))
def test_nic_update_badauth(client):
response = client.get(reverse('nic_update'),
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, "wrong"))
assert response.status_code == 401
assert response.content == "badauth"
def test_nic_update_authorized_nonexistent_host(client):
response = client.get(reverse('nic_update') + '?hostname=nonexistent.nsupdate.info',
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# we must not get this updated, it doesn't exist in the database:
assert response.content == 'nohost'
def test_nic_update_authorized_foreign_host(client):
response = client.get(reverse('nic_update') + '?hostname=%s' % TEST_HOST2,
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# we must not get this updated, this is a host of some other user!
assert response.content == 'nohost'
def test_nic_update_authorized_not_fqdn_hostname(client):
response = client.get(reverse('nic_update') + '?hostname=test',
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
assert response.content == 'notfqdn'
def test_nic_update_authorized_not_fqdn_username(client):
response = client.get(reverse('nic_update'),
HTTP_AUTHORIZATION=make_basic_auth_header('test', TEST_SECRET))
assert response.status_code == 200
assert response.content == 'notfqdn'
def test_nic_update_authorized(client):
response = client.get(reverse('nic_update'),
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# we don't care whether it is nochg or good, but should be one of them:
assert response.content.startswith('good ') or response.content.startswith('nochg ')
def test_nic_update_authorized_myip(client):
response = client.get(reverse('nic_update') + '?myip=4.3.2.1',
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# we don't care whether it is nochg or good, but should be the ip from myip=...:
assert response.content in ['good 4.3.2.1', 'nochg 4.3.2.1']
response = client.get(reverse('nic_update') + '?myip=1.2.3.4',
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# must be good (was different IP)
assert response.content == 'good 1.2.3.4'
response = client.get(reverse('nic_update') + '?myip=1.2.3.4',
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET))
assert response.status_code == 200
# must be nochg (was same IP)
assert response.content == 'nochg 1.2.3.4'
def test_nic_update_authorized_badagent(client, settings):
settings.BAD_AGENTS = ['foo', 'bad_agent', 'bar', ]
response = client.get(reverse('nic_update'),
HTTP_AUTHORIZATION=make_basic_auth_header(TEST_HOST, TEST_SECRET),
HTTP_USER_AGENT='bad_agent')
assert response.status_code == 200
assert response.content == 'badagent'
def test_nic_update_session_nosession(client):
response = client.get(reverse('nic_update_authorized'))
assert response.status_code == 302 # redirects to login view
def test_nic_update_session_no_hostname(client):
client.login(username=USERNAME, password=PASSWORD)
response = client.get(reverse('nic_update_authorized'))
assert response.status_code == 200
assert response.content == "nohost" # we did not tell which host
def test_nic_update_session(client):
client.login(username=USERNAME, password=PASSWORD)
response = client.get(reverse('nic_update_authorized') + '?hostname=%s' % (TEST_HOST, ))
assert response.status_code == 200
assert response.content.startswith('good ') or response.content.startswith('nochg ')
def test_nic_update_session_myip(client):
client.login(username=USERNAME, password=PASSWORD)
response = client.get(reverse('nic_update_authorized') + '?hostname=%s&myip=%s' % (TEST_HOST, '1.2.3.4'))
assert response.status_code == 200
assert response.content.startswith('good 1.2.3.4') or response.content.startswith('nochg 1.2.3.4')
def test_nic_update_session_foreign_host(client):
client.login(username=USERNAME, password=PASSWORD)
response = client.get(reverse('nic_update_authorized') + '?hostname=%s' % TEST_HOST2)
assert response.status_code == 200
# we must not get this updated, this is a host of some other user!
assert response.content == "nohost"
def test_detect_ip_invalid_session(client):
response = client.get(reverse('detectip', args=('invalid_session_id', )))
assert response.status_code == 204
def test_ajax_get_ips(client):
response = client.get(reverse('ajax_get_ips'))
assert response.status_code == 200