[bug] keep combined file longer in scope
authorFolker Bernitt <fbernitt@thoughtworks.com>
Mon, 21 Sep 2015 13:59:53 +0000 (15:59 +0200)
committerKali Kaneko <kali@leap.se>
Thu, 24 Sep 2015 16:09:32 +0000 (12:09 -0400)
In previous commit 9546348c, the combined bundle ca
was not long enough in scope and was therefore deleted
when it actually was used.
Adopted test to check whether file is deleted.

src/leap/keymanager/__init__.py
src/leap/keymanager/tests/test_keymanager.py

index 22fb725..f00e049 100644 (file)
@@ -19,6 +19,7 @@ Key Manager is a Nicknym agent for LEAP client.
 """
 # let's do a little sanity check to see if we're using the wrong gnupg
 import fileinput
+import os
 import sys
 import tempfile
 from leap.common import ca_bundle
@@ -140,6 +141,18 @@ class KeyManager(object):
         self._combined_ca_bundle = self._create_combined_bundle_file()
 
     #
+    # destructor
+    #
+
+    def __del__(self):
+        try:
+            created_tmp_combined_ca_bundle = self._combined_ca_bundle not in [ca_bundle.where(), self._ca_cert_path]
+            if created_tmp_combined_ca_bundle:
+                os.remove(self._combined_ca_bundle)
+        except OSError:
+            pass
+
+    #
     # utilities
     #
 
@@ -151,8 +164,7 @@ class KeyManager(object):
         elif not self._ca_cert_path:
             return leap_ca_bundle
 
-        # file is auto deleted when python process ends
-        tmp_file = tempfile.NamedTemporaryFile(delete=True)
+        tmp_file = tempfile.NamedTemporaryFile(delete=False)  # delete when keymanager expires
 
         with open(tmp_file.name, 'w') as fout:
             fin = fileinput.input(files=(leap_ca_bundle, self._ca_cert_path))
index 7b90ae1..b2722b2 100644 (file)
@@ -20,7 +20,7 @@
 Tests for the Key Manager.
 """
 
-
+from os import path
 from datetime import datetime
 import tempfile
 from leap.common import ca_bundle
@@ -369,8 +369,7 @@ class KeyManagerKeyManagementTestCase(KeyManagerWithSoledadTestCase):
 
     @inlineCallbacks
     def test_fetch_uses_combined_ca_bundle_otherwise(self):
-        with tempfile.NamedTemporaryFile() as tmp_input, \
-                tempfile.NamedTemporaryFile() as tmp_output:
+        with tempfile.NamedTemporaryFile() as tmp_input, tempfile.NamedTemporaryFile(delete=False) as tmp_output:
             ca_content = 'some\ncontent\n'
             ca_cert_path = tmp_input.name
             self._dump_to_file(ca_cert_path, ca_content)
@@ -390,6 +389,9 @@ class KeyManagerKeyManagementTestCase(KeyManagerWithSoledadTestCase):
                 expected = self._slurp_file(ca_bundle.where()) + ca_content
                 self.assertEqual(expected, self._slurp_file(tmp_output.name))
 
+            del km  # force km out of scope
+            self.assertFalse(path.exists(tmp_output.name))
+
     def _dump_to_file(self, filename, content):
             with open(filename, 'w') as out:
                 out.write(content)