summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2017-06-01 13:08:10 -0700
committerJeff Forcier <jeff@bitprophet.org>2017-06-01 13:08:10 -0700
commit4d15d0e824d199b60f96b7ee5584d4cb5b23fc1a (patch)
treea3093d7816f98d3ff1192d97a98ad52a9d96ced4
parentaa7963276816cc539315f62e4657bcc579085739 (diff)
Test & impl for truly functional HostKeys.__delitem__
-rw-r--r--paramiko/hostkeys.py9
-rw-r--r--tests/test_hostkeys.py12
2 files changed, 20 insertions, 1 deletions
diff --git a/paramiko/hostkeys.py b/paramiko/hostkeys.py
index 4be3fd42..b72abe40 100644
--- a/paramiko/hostkeys.py
+++ b/paramiko/hostkeys.py
@@ -246,7 +246,14 @@ class HostKeys (MutableMapping):
return ret
def __delitem__(self, key):
- pass # Needed for instantiating HostKeys.
+ index = None
+ for i, entry in enumerate(self._entries):
+ if self._hostname_matches(key, entry):
+ index = i
+ break
+ if i is None:
+ raise KeyError(key)
+ self._entries.pop(i)
def __setitem__(self, hostname, entry):
# don't use this please.
diff --git a/tests/test_hostkeys.py b/tests/test_hostkeys.py
index 2bdcad9c..2c7ceeb9 100644
--- a/tests/test_hostkeys.py
+++ b/tests/test_hostkeys.py
@@ -115,3 +115,15 @@ class HostKeysTest (unittest.TestCase):
self.assertEqual(b'7EC91BB336CB6D810B124B1353C32396', fp)
fp = hexlify(hostdict['secure.example.com']['ssh-dss'].get_fingerprint()).upper()
self.assertEqual(b'4478F0B9A23CC5182009FF755BC1D26C', fp)
+
+ def test_delitem(self):
+ hostdict = paramiko.HostKeys('hostfile.temp')
+ target = 'happy.example.com'
+ entry = hostdict[target] # will KeyError if not present
+ del hostdict[target]
+ try:
+ entry = hostdict[target]
+ except KeyError:
+ pass # Good
+ else:
+ assert False, "Entry was not deleted from HostKeys on delitem!"