Imported Upstream version 4.0.5
This commit is contained in:
@@ -18,15 +18,12 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import unittest
|
||||
import time
|
||||
import datetime
|
||||
import email.utils
|
||||
import calendar
|
||||
from ipapython.cookie import Cookie
|
||||
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
|
||||
class TestParse(unittest.TestCase):
|
||||
|
||||
def test_parse(self):
|
||||
@@ -50,22 +47,6 @@ class TestParse(unittest.TestCase):
|
||||
with self.assertRaises(ValueError):
|
||||
cookies = Cookie.parse(s)
|
||||
|
||||
# 1 cookie with empty value
|
||||
s = 'color='
|
||||
cookies = Cookie.parse(s)
|
||||
self.assertEqual(len(cookies), 1)
|
||||
cookie = cookies[0]
|
||||
self.assertEqual(cookie.key, 'color')
|
||||
self.assertEqual(cookie.value, '')
|
||||
self.assertEqual(cookie.domain, None)
|
||||
self.assertEqual(cookie.path, None)
|
||||
self.assertEqual(cookie.max_age, None)
|
||||
self.assertEqual(cookie.expires, None)
|
||||
self.assertEqual(cookie.secure, None)
|
||||
self.assertEqual(cookie.httponly, None)
|
||||
self.assertEqual(str(cookie), "color=")
|
||||
self.assertEqual(cookie.http_cookie(), "color=;")
|
||||
|
||||
# 1 cookie with name/value
|
||||
s = 'color=blue'
|
||||
cookies = Cookie.parse(s)
|
||||
@@ -279,7 +260,7 @@ class TestInvalidAttributes(unittest.TestCase):
|
||||
# Invalid Max-Age
|
||||
s = 'color=blue; Max-Age=over-the-hill'
|
||||
with self.assertRaises(ValueError):
|
||||
Cookie.parse(s)
|
||||
cookies = Cookie.parse(s)
|
||||
|
||||
cookie = Cookie('color', 'blue')
|
||||
with self.assertRaises(ValueError):
|
||||
@@ -288,7 +269,7 @@ class TestInvalidAttributes(unittest.TestCase):
|
||||
# Invalid Expires
|
||||
s = 'color=blue; Expires=Sun, 06 Xxx 1994 08:49:37 GMT'
|
||||
with self.assertRaises(ValueError):
|
||||
Cookie.parse(s)
|
||||
cookies = Cookie.parse(s)
|
||||
|
||||
cookie = Cookie('color', 'blue')
|
||||
with self.assertRaises(ValueError):
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,3 @@
|
||||
# encoding: utf-8
|
||||
|
||||
# Authors:
|
||||
# Jan Cholasta <jcholast@redhat.com>
|
||||
#
|
||||
@@ -23,53 +21,52 @@ Test the `ipapython/ipautil.py` module.
|
||||
"""
|
||||
|
||||
import nose
|
||||
import pytest
|
||||
import six
|
||||
import tempfile
|
||||
|
||||
from ipapython import ipautil
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
class CheckIPAddress:
|
||||
def __init__(self, addr):
|
||||
self.description = "Test IP address parsing and verification (%s)" % addr
|
||||
|
||||
def __call__(self, addr, words=None, prefixlen=None):
|
||||
try:
|
||||
ip = ipautil.CheckedIPAddress(addr, match_local=False)
|
||||
assert ip.words == words and ip.prefixlen == prefixlen
|
||||
except:
|
||||
assert words is None and prefixlen is None
|
||||
|
||||
@pytest.mark.parametrize("addr,words,prefixlen", [
|
||||
('0.0.0.0/0', None, None),
|
||||
('10.11.12.13', (10, 11, 12, 13), 8),
|
||||
('10.11.12.13/14', (10, 11, 12, 13), 14),
|
||||
('10.11.12.13%zoneid', None, None),
|
||||
('10.11.12.13%zoneid/14', None, None),
|
||||
('10.11.12.1337', None, None),
|
||||
('10.11.12.13/33', None, None),
|
||||
('127.0.0.1', None, None),
|
||||
('241.1.2.3', None, None),
|
||||
('169.254.1.2', None, None),
|
||||
('10.11.12.0/24', (10, 11, 12, 0), 24),
|
||||
('10.0.0.255', (10, 0, 0, 255), 8),
|
||||
('224.5.6.7', None, None),
|
||||
('10.11.12.255/24', (10, 11, 12, 255), 24),
|
||||
('255.255.255.255', None, None),
|
||||
('::/0', None, None),
|
||||
('2001::1', (0x2001, 0, 0, 0, 0, 0, 0, 1), 64),
|
||||
('2001::1/72', (0x2001, 0, 0, 0, 0, 0, 0, 1), 72),
|
||||
('2001::1%zoneid', (0x2001, 0, 0, 0, 0, 0, 0, 1), 64),
|
||||
('2001::1%zoneid/72', None, None),
|
||||
('2001::1beef', None, None),
|
||||
('2001::1/129', None, None),
|
||||
('::1', None, None),
|
||||
('6789::1', None, None),
|
||||
('fe89::1', None, None),
|
||||
('2001::/64', (0x2001, 0, 0, 0, 0, 0, 0, 0), 64),
|
||||
('ff01::1', None, None),
|
||||
('junk', None, None)
|
||||
])
|
||||
def test_ip_address(addr, words, prefixlen):
|
||||
if words is None:
|
||||
pytest.raises(
|
||||
ValueError, ipautil.CheckedIPAddress, addr)
|
||||
else:
|
||||
ip = ipautil.CheckedIPAddress(addr)
|
||||
assert ip.words == words
|
||||
assert ip.prefixlen == prefixlen
|
||||
def test_ip_address():
|
||||
addrs = [
|
||||
('10.11.12.13', (10, 11, 12, 13), 8),
|
||||
('10.11.12.13/14', (10, 11, 12, 13), 14),
|
||||
('10.11.12.13%zoneid',),
|
||||
('10.11.12.13%zoneid/14',),
|
||||
('10.11.12.1337',),
|
||||
('10.11.12.13/33',),
|
||||
('127.0.0.1',),
|
||||
('241.1.2.3',),
|
||||
('169.254.1.2',),
|
||||
('10.11.12.0/24',),
|
||||
('224.5.6.7',),
|
||||
('10.11.12.255/24',),
|
||||
|
||||
('2001::1', (0x2001, 0, 0, 0, 0, 0, 0, 1), 64),
|
||||
('2001::1/72', (0x2001, 0, 0, 0, 0, 0, 0, 1), 72),
|
||||
('2001::1%zoneid', (0x2001, 0, 0, 0, 0, 0, 0, 1), 64),
|
||||
('2001::1%zoneid/72',),
|
||||
('2001::1beef',),
|
||||
('2001::1/129',),
|
||||
('::1',),
|
||||
('6789::1',),
|
||||
('fe89::1',),
|
||||
('2001::/64',),
|
||||
('ff01::1',),
|
||||
|
||||
('junk',)
|
||||
]
|
||||
|
||||
for addr in addrs:
|
||||
yield (CheckIPAddress(addr[0]),) + addr
|
||||
|
||||
|
||||
class TestCIDict(object):
|
||||
@@ -101,7 +98,7 @@ class TestCIDict(object):
|
||||
nose.tools.assert_equal("VAL3", self.cidict["key3"])
|
||||
nose.tools.assert_equal("VAL3", self.cidict["KEY3"])
|
||||
with nose.tools.assert_raises(KeyError):
|
||||
self.cidict["key4"] # pylint: disable=pointless-statement
|
||||
self.cidict["key4"]
|
||||
|
||||
def test_get(self):
|
||||
nose.tools.assert_equal("val1", self.cidict.get("Key1"))
|
||||
@@ -118,37 +115,27 @@ class TestCIDict(object):
|
||||
nose.tools.assert_equal("newval4", self.cidict["key4"])
|
||||
|
||||
def test_del(self):
|
||||
assert "Key1" in self.cidict
|
||||
assert self.cidict.has_key("Key1")
|
||||
del(self.cidict["Key1"])
|
||||
assert "Key1" not in self.cidict
|
||||
assert not self.cidict.has_key("Key1")
|
||||
|
||||
assert "key2" in self.cidict
|
||||
assert self.cidict.has_key("key2")
|
||||
del(self.cidict["KEY2"])
|
||||
assert "key2" not in self.cidict
|
||||
assert not self.cidict.has_key("key2")
|
||||
|
||||
def test_clear(self):
|
||||
nose.tools.assert_equal(3, len(self.cidict))
|
||||
self.cidict.clear()
|
||||
nose.tools.assert_equal(0, len(self.cidict))
|
||||
assert self.cidict == {}
|
||||
assert list(self.cidict) == []
|
||||
assert list(self.cidict.values()) == []
|
||||
assert list(self.cidict.items()) == []
|
||||
if six.PY2:
|
||||
assert self.cidict.keys() == []
|
||||
assert self.cidict.values() == []
|
||||
assert self.cidict.items() == []
|
||||
assert self.cidict._keys == {}
|
||||
|
||||
def test_copy(self):
|
||||
copy = self.cidict.copy()
|
||||
assert copy == self.cidict
|
||||
nose.tools.assert_equal(3, len(copy))
|
||||
assert "Key1" in copy
|
||||
assert "key1" in copy
|
||||
assert copy.has_key("Key1")
|
||||
assert copy.has_key("key1")
|
||||
nose.tools.assert_equal("val1", copy["Key1"])
|
||||
|
||||
@pytest.mark.skipif(not six.PY2, reason="Python 2 only")
|
||||
def test_haskey(self):
|
||||
assert self.cidict.has_key("KEY1")
|
||||
assert self.cidict.has_key("key2")
|
||||
@@ -164,17 +151,18 @@ class TestCIDict(object):
|
||||
assert "Key4" not in self.cidict
|
||||
|
||||
def test_items(self):
|
||||
items = list(self.cidict.items())
|
||||
items = self.cidict.items()
|
||||
nose.tools.assert_equal(3, len(items))
|
||||
items_set = set(items)
|
||||
assert ("Key1", "val1") in items_set
|
||||
assert ("key2", "val2") in items_set
|
||||
assert ("KEY3", "VAL3") in items_set
|
||||
|
||||
assert list(self.cidict.items()) == list(self.cidict.iteritems()) == list(zip(
|
||||
self.cidict.keys(), self.cidict.values()))
|
||||
assert self.cidict.items() == list(self.cidict.iteritems()) == zip(
|
||||
self.cidict.iterkeys(), self.cidict.itervalues())
|
||||
|
||||
def test_iter(self):
|
||||
items = []
|
||||
assert list(self.cidict) == list(self.cidict.keys())
|
||||
assert sorted(self.cidict) == sorted(['Key1', 'key2', 'KEY3'])
|
||||
|
||||
@@ -209,24 +197,24 @@ class TestCIDict(object):
|
||||
assert "VAL3" in values_set
|
||||
|
||||
def test_keys(self):
|
||||
keys = list(self.cidict.keys())
|
||||
keys = self.cidict.keys()
|
||||
nose.tools.assert_equal(3, len(keys))
|
||||
keys_set = set(keys)
|
||||
assert "Key1" in keys_set
|
||||
assert "key2" in keys_set
|
||||
assert "KEY3" in keys_set
|
||||
|
||||
assert list(self.cidict.keys()) == list(self.cidict.iterkeys())
|
||||
assert self.cidict.keys() == list(self.cidict.iterkeys())
|
||||
|
||||
def test_values(self):
|
||||
values = list(self.cidict.values())
|
||||
values = self.cidict.values()
|
||||
nose.tools.assert_equal(3, len(values))
|
||||
values_set = set(values)
|
||||
assert "val1" in values_set
|
||||
assert "val2" in values_set
|
||||
assert "VAL3" in values_set
|
||||
|
||||
assert list(self.cidict.values()) == list(self.cidict.itervalues())
|
||||
assert self.cidict.values() == list(self.cidict.itervalues())
|
||||
|
||||
def test_update(self):
|
||||
newdict = { "KEY2": "newval2",
|
||||
@@ -234,7 +222,7 @@ class TestCIDict(object):
|
||||
self.cidict.update(newdict)
|
||||
nose.tools.assert_equal(4, len(self.cidict))
|
||||
|
||||
items = list(self.cidict.items())
|
||||
items = self.cidict.items()
|
||||
nose.tools.assert_equal(4, len(items))
|
||||
items_set = set(items)
|
||||
assert ("Key1", "val1") in items_set
|
||||
@@ -275,22 +263,22 @@ class TestCIDict(object):
|
||||
def test_setdefault(self):
|
||||
nose.tools.assert_equal("val1", self.cidict.setdefault("KEY1", "default"))
|
||||
|
||||
assert "KEY4" not in self.cidict
|
||||
assert not self.cidict.has_key("KEY4")
|
||||
nose.tools.assert_equal("default", self.cidict.setdefault("KEY4", "default"))
|
||||
assert "KEY4" in self.cidict
|
||||
assert self.cidict.has_key("KEY4")
|
||||
nose.tools.assert_equal("default", self.cidict["key4"])
|
||||
|
||||
assert "KEY5" not in self.cidict
|
||||
assert not self.cidict.has_key("KEY5")
|
||||
nose.tools.assert_equal(None, self.cidict.setdefault("KEY5"))
|
||||
assert "KEY5" in self.cidict
|
||||
assert self.cidict.has_key("KEY5")
|
||||
nose.tools.assert_equal(None, self.cidict["key5"])
|
||||
|
||||
def test_pop(self):
|
||||
nose.tools.assert_equal("val1", self.cidict.pop("KEY1", "default"))
|
||||
assert "key1" not in self.cidict
|
||||
assert not self.cidict.has_key("key1")
|
||||
|
||||
nose.tools.assert_equal("val2", self.cidict.pop("KEY2"))
|
||||
assert "key2" not in self.cidict
|
||||
assert not self.cidict.has_key("key2")
|
||||
|
||||
nose.tools.assert_equal("default", self.cidict.pop("key4", "default"))
|
||||
with nose.tools.assert_raises(KeyError):
|
||||
@@ -318,7 +306,15 @@ class TestCIDict(object):
|
||||
def test_fromkeys(self):
|
||||
dct = ipautil.CIDict.fromkeys(('A', 'b', 'C'))
|
||||
assert sorted(dct.keys()) == sorted(['A', 'b', 'C'])
|
||||
assert list(dct.values()) == [None] * 3
|
||||
assert sorted(dct.values()) == [None] * 3
|
||||
|
||||
def test_clear(self):
|
||||
self.cidict.clear()
|
||||
assert self.cidict == {}
|
||||
assert self.cidict.keys() == []
|
||||
assert self.cidict.values() == []
|
||||
assert self.cidict.items() == []
|
||||
assert self.cidict._keys == {}
|
||||
|
||||
|
||||
class TestTimeParser(object):
|
||||
@@ -377,8 +373,6 @@ class TestTimeParser(object):
|
||||
nose.tools.assert_equal(800000, time.microsecond)
|
||||
|
||||
def test_time_zones(self):
|
||||
# pylint: disable=no-member
|
||||
|
||||
timestr = "20051213141205Z"
|
||||
|
||||
time = ipautil.parse_generalized_time(timestr)
|
||||
@@ -412,68 +406,3 @@ class TestTimeParser(object):
|
||||
nose.tools.assert_equal(-30, time.tzinfo.minoffset)
|
||||
offset = time.tzinfo.utcoffset(time.tzinfo.dst())
|
||||
nose.tools.assert_equal(((24 - 9) * 60 * 60) - (30 * 60), offset.seconds)
|
||||
|
||||
|
||||
def test_run():
|
||||
result = ipautil.run(['echo', 'foo\x02bar'],
|
||||
capture_output=True,
|
||||
capture_error=True)
|
||||
assert result.returncode == 0
|
||||
assert result.output == 'foo\x02bar\n'
|
||||
assert result.raw_output == b'foo\x02bar\n'
|
||||
assert result.error_output == ''
|
||||
assert result.raw_error_output == b''
|
||||
|
||||
|
||||
def test_run_no_capture_output():
|
||||
result = ipautil.run(['echo', 'foo\x02bar'])
|
||||
assert result.returncode == 0
|
||||
assert result.output is None
|
||||
assert result.raw_output == b'foo\x02bar\n'
|
||||
assert result.error_output is None
|
||||
assert result.raw_error_output == b''
|
||||
|
||||
|
||||
def test_run_bytes():
|
||||
result = ipautil.run(['echo', b'\x01\x02'], capture_output=True)
|
||||
assert result.returncode == 0
|
||||
assert result.raw_output == b'\x01\x02\n'
|
||||
|
||||
|
||||
def test_run_decode():
|
||||
result = ipautil.run(['echo', u'á'.encode('utf-8')],
|
||||
encoding='utf-8', capture_output=True)
|
||||
assert result.returncode == 0
|
||||
if six.PY3:
|
||||
assert result.output == 'á\n'
|
||||
else:
|
||||
assert result.output == 'á\n'.encode('utf-8')
|
||||
|
||||
|
||||
def test_run_decode_bad():
|
||||
if six.PY3:
|
||||
with pytest.raises(UnicodeDecodeError):
|
||||
ipautil.run(['echo', b'\xa0\xa1'],
|
||||
capture_output=True,
|
||||
encoding='utf-8')
|
||||
else:
|
||||
result = ipautil.run(['echo', '\xa0\xa1'],
|
||||
capture_output=True,
|
||||
encoding='utf-8')
|
||||
assert result.returncode == 0
|
||||
assert result.output == '\xa0\xa1\n'
|
||||
|
||||
|
||||
def test_backcompat():
|
||||
result = out, err, rc = ipautil.run(['echo', 'foo\x02bar'],
|
||||
capture_output=True,
|
||||
capture_error=True)
|
||||
assert rc is result.returncode
|
||||
assert out is result.output
|
||||
assert err is result.error_output
|
||||
|
||||
|
||||
def test_flush_sync():
|
||||
with tempfile.NamedTemporaryFile('wb+') as f:
|
||||
f.write(b'data')
|
||||
ipautil.flush_sync(f)
|
||||
|
||||
@@ -21,13 +21,16 @@ import sys
|
||||
sys.path.insert(0, ".")
|
||||
|
||||
import unittest
|
||||
import pytest
|
||||
|
||||
from ipapython import ipavalidate
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
|
||||
class TestValidate(unittest.TestCase):
|
||||
def setUp(self):
|
||||
pass
|
||||
|
||||
def tearDown(self):
|
||||
pass
|
||||
|
||||
def test_validEmail(self):
|
||||
self.assertEqual(True, ipavalidate.Email("test@freeipa.org"))
|
||||
self.assertEqual(True, ipavalidate.Email("", notEmpty=False))
|
||||
|
||||
@@ -1,139 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2016 FreeIPA Project Contributors - see LICENSE file
|
||||
#
|
||||
|
||||
import pytest
|
||||
import six
|
||||
|
||||
from ipapython.kerberos import Principal
|
||||
|
||||
if six.PY3:
|
||||
unicode = str
|
||||
|
||||
valid_principals = {
|
||||
u'tuser@REALM.TEST': {
|
||||
'components': (u'tuser',),
|
||||
'realm': u'REALM.TEST',
|
||||
'username': u'tuser'
|
||||
},
|
||||
u'tuser\@tupn.test@REALM.TEST': {
|
||||
'components': (u'tuser@tupn.test',),
|
||||
'realm': u'REALM.TEST',
|
||||
'username': u'tuser@tupn.test',
|
||||
'upn_suffix': u'tupn.test'
|
||||
},
|
||||
u'test/host.ipa.test@REALM.TEST': {
|
||||
'components': (u'test', u'host.ipa.test'),
|
||||
'realm': u'REALM.TEST',
|
||||
'hostname': u'host.ipa.test'
|
||||
},
|
||||
u'test/service/host.ipa.test@REALM.TEST': {
|
||||
'components': (u'test', u'service', u'host.ipa.test'),
|
||||
'realm': u'REALM.TEST',
|
||||
'service_name': u'test/service'
|
||||
|
||||
},
|
||||
u'tuser': {
|
||||
'components': (u'tuser',),
|
||||
'realm': None,
|
||||
'username': u'tuser'
|
||||
},
|
||||
u'$%user@REALM.TEST': {
|
||||
'components': (u'$%user',),
|
||||
'realm': u'REALM.TEST',
|
||||
'username': u'$%user'
|
||||
},
|
||||
u'host/host.ipa.test': {
|
||||
'components': (u'host', u'host.ipa.test'),
|
||||
'realm': None,
|
||||
'hostname': u'host.ipa.test'
|
||||
},
|
||||
u's$c/$%^.ipa.t%$t': {
|
||||
'components': (u's$c', u'$%^.ipa.t%$t'),
|
||||
'realm': None,
|
||||
'hostname': u'$%^.ipa.t%$t',
|
||||
'service_name': u's$c'
|
||||
},
|
||||
u'test\/service/test\/host@REALM\@TEST': {
|
||||
'components': (u'test/service', u'test/host'),
|
||||
'realm': u'REALM@TEST',
|
||||
'hostname': u'test/host',
|
||||
'service_name': u'test\/service'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def valid_principal_iter(principals):
|
||||
for princ, data in principals.items():
|
||||
yield princ, data
|
||||
|
||||
|
||||
@pytest.fixture(params=list(valid_principal_iter(valid_principals)))
|
||||
def valid_principal(request):
|
||||
return request.param
|
||||
|
||||
|
||||
def test_principals(valid_principal):
|
||||
principal_name, data = valid_principal
|
||||
|
||||
princ = Principal(principal_name)
|
||||
|
||||
for name, value in data.items():
|
||||
assert getattr(princ, name) == value
|
||||
|
||||
assert unicode(princ) == principal_name
|
||||
assert repr(princ) == "ipapython.kerberos.Principal('{}')".format(
|
||||
principal_name)
|
||||
|
||||
|
||||
def test_multiple_unescaped_ats_raise_error():
|
||||
pytest.raises(ValueError, Principal, u'too@many@realms')
|
||||
|
||||
|
||||
principals_properties = {
|
||||
u'user@REALM': {
|
||||
'property_true': ('is_user',),
|
||||
'property_raises': ('upn_suffix', 'hostname', 'service_name')
|
||||
},
|
||||
u'host/m1.ipa.test@REALM': {
|
||||
'property_true': ('is_host', 'is_service'),
|
||||
'property_raises': ('username', 'upn_suffix')
|
||||
},
|
||||
u'service/m1.ipa.test@REALM': {
|
||||
'property_true': ('is_service'),
|
||||
'property_raises': ('username', 'upn_suffix')
|
||||
},
|
||||
u'user\@domain@REALM': {
|
||||
'property_true': ('is_user', 'is_enterprise'),
|
||||
'property_raises': ('hostname', 'service_name')
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def principal_properties_iter(principals_properties):
|
||||
for p, data in principals_properties.items():
|
||||
yield p, data
|
||||
|
||||
|
||||
@pytest.fixture(params=list(principal_properties_iter(principals_properties)))
|
||||
def principal_properties(request):
|
||||
return request.param
|
||||
|
||||
|
||||
def test_principal_properties(principal_properties):
|
||||
principal, data = principal_properties
|
||||
|
||||
princ = Principal(principal)
|
||||
|
||||
boolean_propertes = [prop for prop in dir(princ) if
|
||||
prop.startswith('is_')]
|
||||
|
||||
for b in boolean_propertes:
|
||||
if b in data['property_true']:
|
||||
assert getattr(princ, b)
|
||||
else:
|
||||
assert not getattr(princ, b)
|
||||
|
||||
for property_raises in data['property_raises']:
|
||||
with pytest.raises(ValueError):
|
||||
getattr(princ, property_raises)
|
||||
@@ -20,17 +20,12 @@
|
||||
Test the `kernel_keyring.py` module.
|
||||
"""
|
||||
|
||||
from nose.tools import raises # pylint: disable=E0611
|
||||
from nose.tools import raises, assert_raises # pylint: disable=E0611
|
||||
from ipapython import kernel_keyring
|
||||
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
|
||||
TEST_KEY = 'ipa_test'
|
||||
TEST_UNICODEKEY = u'ipa_unicode'
|
||||
TEST_VALUE = b'abc123'
|
||||
UPDATE_VALUE = b'123abc'
|
||||
TEST_VALUE = 'abc123'
|
||||
UPDATE_VALUE = '123abc'
|
||||
|
||||
SIZE_256 = 'abcdefgh' * 32
|
||||
SIZE_512 = 'abcdefgh' * 64
|
||||
@@ -41,7 +36,7 @@ class test_keyring(object):
|
||||
Test the kernel keyring interface
|
||||
"""
|
||||
|
||||
def setup(self):
|
||||
def setUp(self):
|
||||
try:
|
||||
kernel_keyring.del_key(TEST_KEY)
|
||||
except ValueError:
|
||||
@@ -50,10 +45,6 @@ class test_keyring(object):
|
||||
kernel_keyring.del_key(SIZE_256)
|
||||
except ValueError:
|
||||
pass
|
||||
try:
|
||||
kernel_keyring.del_key(TEST_UNICODEKEY)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
def test_01(self):
|
||||
"""
|
||||
@@ -68,8 +59,8 @@ class test_keyring(object):
|
||||
# Make sure it is gone
|
||||
try:
|
||||
result = kernel_keyring.read_key(TEST_KEY)
|
||||
except ValueError as e:
|
||||
assert str(e) == 'key %s not found' % TEST_KEY
|
||||
except ValueError, e:
|
||||
assert e.message == 'key %s not found' % TEST_KEY
|
||||
|
||||
def test_02(self):
|
||||
"""
|
||||
@@ -98,11 +89,10 @@ class test_keyring(object):
|
||||
assert(result == UPDATE_VALUE)
|
||||
|
||||
# Now update it 10 times
|
||||
for i in range(10):
|
||||
value = ('test %d' % i).encode('ascii')
|
||||
kernel_keyring.update_key(TEST_KEY, value)
|
||||
for i in xrange(10):
|
||||
kernel_keyring.update_key(TEST_KEY, 'test %d' % i)
|
||||
result = kernel_keyring.read_key(TEST_KEY)
|
||||
assert(result == value)
|
||||
assert(result == 'test %d' % i)
|
||||
|
||||
kernel_keyring.del_key(TEST_KEY)
|
||||
|
||||
@@ -111,7 +101,7 @@ class test_keyring(object):
|
||||
"""
|
||||
Read a non-existent key
|
||||
"""
|
||||
kernel_keyring.read_key(TEST_KEY)
|
||||
result = kernel_keyring.read_key(TEST_KEY)
|
||||
|
||||
def test_06(self):
|
||||
"""
|
||||
@@ -140,9 +130,9 @@ class test_keyring(object):
|
||||
"""
|
||||
Test 512-bytes of data
|
||||
"""
|
||||
kernel_keyring.add_key(TEST_KEY, SIZE_512.encode('ascii'))
|
||||
kernel_keyring.add_key(TEST_KEY, SIZE_512)
|
||||
result = kernel_keyring.read_key(TEST_KEY)
|
||||
assert(result == SIZE_512.encode('ascii'))
|
||||
assert(result == SIZE_512)
|
||||
|
||||
kernel_keyring.del_key(TEST_KEY)
|
||||
|
||||
@@ -150,18 +140,8 @@ class test_keyring(object):
|
||||
"""
|
||||
Test 1k bytes of data
|
||||
"""
|
||||
kernel_keyring.add_key(TEST_KEY, SIZE_1024.encode('ascii'))
|
||||
kernel_keyring.add_key(TEST_KEY, SIZE_1024)
|
||||
result = kernel_keyring.read_key(TEST_KEY)
|
||||
assert(result == SIZE_1024.encode('ascii'))
|
||||
assert(result == SIZE_1024)
|
||||
|
||||
kernel_keyring.del_key(TEST_KEY)
|
||||
|
||||
def test_10(self):
|
||||
"""
|
||||
Test a unicode key
|
||||
"""
|
||||
kernel_keyring.add_key(TEST_UNICODEKEY, TEST_VALUE)
|
||||
result = kernel_keyring.read_key(TEST_UNICODEKEY)
|
||||
assert(result == TEST_VALUE)
|
||||
|
||||
kernel_keyring.del_key(TEST_UNICODEKEY)
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
#
|
||||
# Copyright (C) 2017 FreeIPA Contributors see COPYING for license
|
||||
#
|
||||
|
||||
"""
|
||||
Test the `session_storage.py` module.
|
||||
"""
|
||||
import pytest
|
||||
|
||||
from ipapython import session_storage
|
||||
|
||||
|
||||
@pytest.mark.skip_ipaclient_unittest
|
||||
@pytest.mark.needs_ipaapi
|
||||
class test_session_storage(object):
|
||||
"""
|
||||
Test the session storage interface
|
||||
"""
|
||||
|
||||
def setup(self):
|
||||
# TODO: set up test user and kinit to it
|
||||
# tmpdir = tempfile.mkdtemp(prefix = "tmp-")
|
||||
# os.environ['KRB5CCNAME'] = 'FILE:%s/ccache' % tmpdir
|
||||
self.principal = 'admin'
|
||||
self.key = 'X-IPA-test-session-storage'
|
||||
self.data = b'Test Data'
|
||||
|
||||
def test_01(self):
|
||||
session_storage.store_data(self.principal, self.key, self.data)
|
||||
|
||||
def test_02(self):
|
||||
data = session_storage.get_data(self.principal, self.key)
|
||||
assert(data == self.data)
|
||||
|
||||
def test_03(self):
|
||||
session_storage.remove_data(self.principal, self.key)
|
||||
try:
|
||||
session_storage.get_data(self.principal, self.key)
|
||||
except session_storage.KRB5Error:
|
||||
pass
|
||||
@@ -21,67 +21,56 @@ Test the `ipapython/ssh.py` module.
|
||||
"""
|
||||
|
||||
import base64
|
||||
|
||||
import six
|
||||
import pytest
|
||||
import nose
|
||||
|
||||
from ipapython import ssh
|
||||
|
||||
if six.PY3:
|
||||
unicode = str
|
||||
class CheckPublicKey:
|
||||
def __init__(self, pk):
|
||||
self.description = "Test SSH public key parsing (%s)" % repr(pk)
|
||||
|
||||
pytestmark = pytest.mark.tier0
|
||||
def __call__(self, pk, out):
|
||||
try:
|
||||
parsed = ssh.SSHPublicKey(pk)
|
||||
assert parsed.openssh() == out
|
||||
except Exception, e:
|
||||
assert type(e) is out
|
||||
|
||||
b64 = 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDGAX3xAeLeaJggwTqMjxNwa6XHBUAikXPGMzEpVrlLDCZtv00djsFTBi38PkgxBJVkgRWMrcBsr/35lq7P6w8KGIwA8GI48Z0qBS2NBMJ2u9WQ2hjLN6GdMlo77O0uJY3251p12pCVIS/bHRSq8kHO2No8g7KA9fGGcagPfQH+ee3t7HUkpbQkFTmbPPN++r3V8oVUk5LxbryB3UIIVzNmcSIn3JrXynlvui4MixvrtX6zx+O/bBo68o8/eZD26QrahVbA09fivrn/4h3TM019Eu/c2jOdckfU3cHUV/3Tno5d6JicibyaoDDK7S/yjdn5jhaz8MSEayQvFkZkiF0L'
|
||||
raw = base64.b64decode(b64)
|
||||
openssh = 'ssh-rsa %s' % b64
|
||||
def test_public_key_parsing():
|
||||
b64 = 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDGAX3xAeLeaJggwTqMjxNwa6XHBUAikXPGMzEpVrlLDCZtv00djsFTBi38PkgxBJVkgRWMrcBsr/35lq7P6w8KGIwA8GI48Z0qBS2NBMJ2u9WQ2hjLN6GdMlo77O0uJY3251p12pCVIS/bHRSq8kHO2No8g7KA9fGGcagPfQH+ee3t7HUkpbQkFTmbPPN++r3V8oVUk5LxbryB3UIIVzNmcSIn3JrXynlvui4MixvrtX6zx+O/bBo68o8/eZD26QrahVbA09fivrn/4h3TM019Eu/c2jOdckfU3cHUV/3Tno5d6JicibyaoDDK7S/yjdn5jhaz8MSEayQvFkZkiF0L'
|
||||
raw = base64.b64decode(b64)
|
||||
openssh = 'ssh-rsa %s' % b64
|
||||
|
||||
pks = [
|
||||
('\xff', UnicodeDecodeError),
|
||||
|
||||
@pytest.mark.parametrize("pk,out", [
|
||||
(b'\xff', UnicodeDecodeError),
|
||||
(u'\xff', ValueError),
|
||||
(raw, openssh),
|
||||
('\0\0\0\x04none', u'none AAAABG5vbmU='),
|
||||
('\0\0\0', ValueError),
|
||||
('\0\0\0\0', ValueError),
|
||||
('\0\0\0\x01', ValueError),
|
||||
('\0\0\0\x01\xff', ValueError),
|
||||
|
||||
(raw, openssh),
|
||||
(b'\0\0\0\x04none', u'none AAAABG5vbmU='),
|
||||
(b'\0\0\0', ValueError),
|
||||
(b'\0\0\0\0', ValueError),
|
||||
(b'\0\0\0\x01', ValueError),
|
||||
(b'\0\0\0\x01\xff', ValueError),
|
||||
(b64, openssh),
|
||||
(unicode(b64), openssh),
|
||||
(u'\n%s\n\n' % b64, openssh),
|
||||
(u'AAAABG5vbmU=', u'none AAAABG5vbmU='),
|
||||
(u'AAAAB', ValueError),
|
||||
|
||||
(u'\0\0\0\x04none', ValueError),
|
||||
(u'\0\0\0', ValueError),
|
||||
(u'\0\0\0\0', ValueError),
|
||||
(u'\0\0\0\x01', ValueError),
|
||||
(u'\0\0\0\x01\xff', ValueError),
|
||||
(openssh, openssh),
|
||||
(unicode(openssh), openssh),
|
||||
(u'none AAAABG5vbmU=', u'none AAAABG5vbmU='),
|
||||
(u'\t \t ssh-rsa \t \t%s\t \tthis is a comment\t \t ' % b64,
|
||||
u'%s this is a comment' % openssh),
|
||||
(u'opt3,opt2="\tx ",opt1,opt2="\\"x " %s comment ' % openssh,
|
||||
u'opt1,opt2="\\"x ",opt3 %s comment' % openssh),
|
||||
(u'ssh-rsa\n%s' % b64, ValueError),
|
||||
(u'ssh-rsa\t%s' % b64, ValueError),
|
||||
(u'vanitas %s' % b64, ValueError),
|
||||
(u'@opt %s' % openssh, ValueError),
|
||||
(u'opt=val %s' % openssh, ValueError),
|
||||
(u'opt, %s' % openssh, ValueError),
|
||||
]
|
||||
|
||||
(b64, openssh),
|
||||
(unicode(b64), openssh),
|
||||
(b64.encode('ascii'), openssh),
|
||||
(u'\n%s\n\n' % b64, openssh),
|
||||
(u'AAAABG5vbmU=', u'none AAAABG5vbmU='),
|
||||
(u'AAAAB', ValueError),
|
||||
|
||||
(openssh, openssh),
|
||||
(unicode(openssh), openssh),
|
||||
(openssh.encode('ascii'), openssh),
|
||||
(u'none AAAABG5vbmU=', u'none AAAABG5vbmU='),
|
||||
(u'\t \t ssh-rsa \t \t%s\t \tthis is a comment\t \t ' % b64,
|
||||
u'%s this is a comment' % openssh),
|
||||
(u'opt3,opt2="\tx ",opt1,opt2="\\"x " %s comment ' % openssh,
|
||||
u'opt1,opt2="\\"x ",opt3 %s comment' % openssh),
|
||||
(u'ssh-rsa\n%s' % b64, ValueError),
|
||||
(u'ssh-rsa\t%s' % b64, ValueError),
|
||||
(u'vanitas %s' % b64, ValueError),
|
||||
(u'@opt %s' % openssh, ValueError),
|
||||
(u'opt=val %s' % openssh, ValueError),
|
||||
(u'opt, %s' % openssh, ValueError)],
|
||||
# ids=repr is workaround for pytest issue with NULL bytes,
|
||||
# see https://github.com/pytest-dev/pytest/issues/2644
|
||||
ids=repr
|
||||
)
|
||||
def test_public_key_parsing(pk, out):
|
||||
if isinstance(out, type) and issubclass(out, Exception):
|
||||
pytest.raises(out, ssh.SSHPublicKey, pk)
|
||||
else:
|
||||
parsed = ssh.SSHPublicKey(pk)
|
||||
assert parsed.openssh() == out
|
||||
for pk in pks:
|
||||
yield (CheckPublicKey(pk[0]),) + pk
|
||||
|
||||
Reference in New Issue
Block a user