Browse Source

fix CompressionSpec validator and tests

Thomas Waldmann 2 years ago
parent
commit
0b40e038ad
2 changed files with 15 additions and 13 deletions
  1. 10 9
      src/borg/compress.pyx
  2. 5 4
      src/borg/testsuite/compress.py

+ 10 - 9
src/borg/compress.pyx

@@ -15,6 +15,7 @@ which compressor has been used to compress the data and dispatch to the correct
 decompressor.
 decompressor.
 """
 """
 
 
+from argparse import ArgumentTypeError
 import random
 import random
 from struct import Struct
 from struct import Struct
 import zlib
 import zlib
@@ -652,7 +653,7 @@ class CompressionSpec:
         values = s.split(',')
         values = s.split(',')
         count = len(values)
         count = len(values)
         if count < 1:
         if count < 1:
-            raise ValueError
+            raise ArgumentTypeError("not enough arguments")
         # --compression algo[,level]
         # --compression algo[,level]
         self.name = values[0]
         self.name = values[0]
         if self.name in ('none', 'lz4', ):
         if self.name in ('none', 'lz4', ):
@@ -663,9 +664,9 @@ class CompressionSpec:
             elif count == 2:
             elif count == 2:
                 level = int(values[1])
                 level = int(values[1])
                 if not 0 <= level <= 9:
                 if not 0 <= level <= 9:
-                    raise ValueError
+                    raise ArgumentTypeError("level must be >= 0 and <= 9")
             else:
             else:
-                raise ValueError
+                raise ArgumentTypeError("too many arguments")
             self.level = level
             self.level = level
         elif self.name in ('zstd', ):
         elif self.name in ('zstd', ):
             if count < 2:
             if count < 2:
@@ -673,28 +674,28 @@ class CompressionSpec:
             elif count == 2:
             elif count == 2:
                 level = int(values[1])
                 level = int(values[1])
                 if not 1 <= level <= 22:
                 if not 1 <= level <= 22:
-                    raise ValueError
+                    raise ArgumentTypeError("level must be >= 1 and <= 22")
             else:
             else:
-                raise ValueError
+                raise ArgumentTypeError("too many arguments")
             self.level = level
             self.level = level
         elif self.name == 'auto':
         elif self.name == 'auto':
             if 2 <= count <= 3:
             if 2 <= count <= 3:
                 compression = ','.join(values[1:])
                 compression = ','.join(values[1:])
             else:
             else:
-                raise ValueError
+                raise ArgumentTypeError("bad arguments")
             self.inner = CompressionSpec(compression)
             self.inner = CompressionSpec(compression)
         elif self.name == 'obfuscate':
         elif self.name == 'obfuscate':
             if 3 <= count <= 5:
             if 3 <= count <= 5:
                 level = int(values[1])
                 level = int(values[1])
                 if not ((1 <= level <= 6) or (110 <= level <= 123)):
                 if not ((1 <= level <= 6) or (110 <= level <= 123)):
-                    raise ValueError
+                    raise ArgumentTypeError("level must be >= 1 and <= 6 or >= 110 and <= 123")
                 self.level = level
                 self.level = level
                 compression = ','.join(values[2:])
                 compression = ','.join(values[2:])
             else:
             else:
-                raise ValueError
+                raise ArgumentTypeError("bad arguments")
             self.inner = CompressionSpec(compression)
             self.inner = CompressionSpec(compression)
         else:
         else:
-            raise ValueError
+            raise ArgumentTypeError("unsupported compression type")
 
 
     @property
     @property
     def compressor(self):
     def compressor(self):

+ 5 - 4
src/borg/testsuite/compress.py

@@ -1,3 +1,4 @@
+import argparse
 import os
 import os
 import zlib
 import zlib
 
 
@@ -226,7 +227,7 @@ def test_obfuscate_meta():
 
 
 
 
 def test_compression_specs():
 def test_compression_specs():
-    with pytest.raises(ValueError):
+    with pytest.raises(argparse.ArgumentTypeError):
         CompressionSpec("")
         CompressionSpec("")
 
 
     assert isinstance(CompressionSpec("none").compressor, CNONE)
     assert isinstance(CompressionSpec("none").compressor, CNONE)
@@ -241,7 +242,7 @@ def test_compression_specs():
     zlib = CompressionSpec("zlib,9").compressor
     zlib = CompressionSpec("zlib,9").compressor
     assert isinstance(zlib, ZLIB)
     assert isinstance(zlib, ZLIB)
     assert zlib.level == 9
     assert zlib.level == 9
-    with pytest.raises(ValueError):
+    with pytest.raises(argparse.ArgumentTypeError):
         CompressionSpec("zlib,9,invalid")
         CompressionSpec("zlib,9,invalid")
 
 
     lzma = CompressionSpec("lzma").compressor
     lzma = CompressionSpec("lzma").compressor
@@ -264,7 +265,7 @@ def test_compression_specs():
     assert isinstance(zstd, ZSTD)
     assert isinstance(zstd, ZSTD)
     assert zstd.level == 22
     assert zstd.level == 22
 
 
-    with pytest.raises(ValueError):
+    with pytest.raises(argparse.ArgumentTypeError):
         CompressionSpec("lzma,9,invalid")
         CompressionSpec("lzma,9,invalid")
-    with pytest.raises(ValueError):
+    with pytest.raises(argparse.ArgumentTypeError):
         CompressionSpec("invalid")
         CompressionSpec("invalid")