Explorar o código

Improved test coverage and end of year weekly pruning bug fix

Jonas Borgström %!s(int64=12) %!d(string=hai) anos
pai
achega
09744e5114
Modificáronse 5 ficheiros con 20 adicións e 12 borrados
  1. 3 5
      darc/archive.py
  2. 1 1
      darc/archiver.py
  3. 1 1
      darc/cache.py
  4. 13 5
      darc/key.py
  5. 2 0
      darc/test.py

+ 3 - 5
darc/archive.py

@@ -1,7 +1,7 @@
 from __future__ import with_statement
 from datetime import datetime, timedelta
 from getpass import getuser
-from itertools import izip_longest, islice
+from itertools import izip_longest
 import msgpack
 import os
 import socket
@@ -23,7 +23,6 @@ have_lchmod = hasattr(os, 'lchmod')
 linux = sys.platform == 'linux2'
 
 
-
 class ItemIter(object):
 
     def __init__(self, unpacker, filter):
@@ -109,10 +108,9 @@ class Archive(object):
                     break
                 i += 1
         else:
-            try:
-                info = self.manifest.archives[name]
-            except KeyError:
+            if name not in self.manifest.archives:
                 raise self.DoesNotExist(name)
+            info = self.manifest.archives[name]
             self.load(info['id'])
 
     def load(self, id):

+ 1 - 1
darc/archiver.py

@@ -263,7 +263,7 @@ class Archiver(object):
         if args.daily:
             keep += prune_split(archives, '%Y-%m-%d', args.daily, keep)
         if args.weekly:
-            keep += prune_split(archives, '%Y-%V', args.weekly, keep)
+            keep += prune_split(archives, '%G-%V', args.weekly, keep)
         if args.monthly:
             keep += prune_split(archives, '%Y-%m', args.monthly, keep)
         if args.yearly:

+ 1 - 1
darc/cache.py

@@ -6,7 +6,7 @@ import msgpack
 import os
 import shutil
 
-from .helpers import get_cache_dir, Manifest
+from .helpers import get_cache_dir
 from .hashindex import ChunkIndex
 
 

+ 13 - 5
darc/key.py

@@ -2,6 +2,7 @@ from __future__ import with_statement
 from getpass import getpass
 import os
 import msgpack
+import shutil
 import tempfile
 import unittest
 import zlib
@@ -13,7 +14,7 @@ from Crypto.Util.number import bytes_to_long, long_to_bytes
 from Crypto.Random import get_random_bytes
 from Crypto.Protocol.KDF import PBKDF2
 
-from .helpers import IntegrityError, get_keys_dir
+from .helpers import IntegrityError, get_keys_dir, Location
 
 PREFIX = '\0' * 8
 
@@ -310,6 +311,15 @@ class KeyTestCase(unittest.TestCase):
     class MockStore(object):
         id = '\0' * 32
 
+    def setUp(self):
+        self.tmpdir = tempfile.mkdtemp()
+        self.keys_path = os.path.join(self.tmpdir, 'keys')
+        os.mkdir(self.keys_path)
+        os.environ['DARC_KEYS_DIR'] = self.keys_path
+
+    def tearDown(self):
+        shutil.rmtree(self.tmpdir)
+
     def test_plaintext(self):
         key = PlaintextKey.create(None, None)
         data = 'foo'
@@ -318,12 +328,10 @@ class KeyTestCase(unittest.TestCase):
 
     def test_keyfile(self):
         class MockArgs(object):
-            class StoreArg(object):
-                def to_key_filename(self):
-                    return tempfile.mkstemp()[1]
-            store = StoreArg()
+            store = Location(tempfile.mkstemp()[1])
         os.environ['DARC_PASSPHRASE'] = 'test'
         key = KeyfileKey.create(self.MockStore(), MockArgs())
+        key = KeyfileKey.detect(self.MockStore(), None)
         data = 'foo'
         self.assertEqual(data, key.decrypt(key.id_hash(data), key.encrypt(data)))
 

+ 2 - 0
darc/test.py

@@ -123,6 +123,8 @@ class Test(unittest.TestCase):
         self.darc('create', self.store_location + '::test', 'input')
         self.darc('create', self.store_location + '::test.2', 'input')
         self.darc('extract', self.store_location + '::test', 'output')
+        self.assertEqual(len(self.darc('list', self.store_location).splitlines()), 2)
+        self.assertEqual(len(self.darc('list', self.store_location + '::test').splitlines()), 9)
         self.diff_dirs('input', 'output/input')
         info_output = self.darc('info', self.store_location + '::test')
         shutil.rmtree(self.cache_path)