|
|
@@ -266,22 +266,58 @@ ZIP_CONTENT='UEsDBAoACQAAAKubCVVjZ7b1FQAAAAkAAAAIABwAdGVzdC50eHRVVAkAA5K18mKStfJ |
|
|
|
ITEM_CONTENT='test.txt\n' |
|
|
|
ITEM_NAME='test.txt' |
|
|
|
|
|
|
|
ZIP1_PWD='pwd' |
|
|
|
ZIP2_PWD='12345' |
|
|
|
def create_file_from_content(): |
|
|
|
if PY3: |
|
|
|
with open(ZIPPATH, mode='wb') as f: |
|
|
|
f.write(base64.b64decode(ZIP_CONTENT)) |
|
|
|
else: |
|
|
|
with open(ZIPPATH, mode='w') as f: |
|
|
|
f.write(base64.b64decode(ZIP_CONTENT)) |
|
|
|
|
|
|
|
class TestPasswordProtection(unittest.TestCase): |
|
|
|
|
|
|
|
def create_protected_zip(): |
|
|
|
z = ZipFile(ZIPPATH, mode='w', password=ZIP2_PWD) |
|
|
|
z.writestr(ITEM_NAME, ITEM_CONTENT) |
|
|
|
z.close() |
|
|
|
|
|
|
|
|
|
|
|
class TestProtectedReading(unittest.TestCase): |
|
|
|
def setUp(self): |
|
|
|
create_file_from_content() |
|
|
|
|
|
|
|
|
|
|
|
def tearDown(self): |
|
|
|
os.remove(ZIPPATH) |
|
|
|
|
|
|
|
def test_read_with_password(self): |
|
|
|
z = ZipFile(ZIPPATH, 'r', password=ZIP1_PWD) |
|
|
|
if PY3: |
|
|
|
with open(ZIPPATH, mode='wb') as f: |
|
|
|
f.write(base64.b64decode(ZIP_CONTENT)) |
|
|
|
self.assertEqual(z.read(ITEM_NAME), bytes(ITEM_CONTENT, 'utf-8')) |
|
|
|
else: |
|
|
|
with open(ZIPPATH, mode='w') as f: |
|
|
|
f.write(base64.b64decode(ZIP_CONTENT)) |
|
|
|
self.assertEqual(z.read(ITEM_NAME), ITEM_CONTENT) |
|
|
|
z.close() |
|
|
|
|
|
|
|
def test_read_without_password(self): |
|
|
|
z = ZipFile(ZIPPATH, 'r') |
|
|
|
self.assertRaises(RuntimeError, z.read, ITEM_NAME) |
|
|
|
z.close() |
|
|
|
|
|
|
|
def test_read_with_wrong_password(self): |
|
|
|
z = ZipFile(ZIPPATH, 'r', password='wrong') |
|
|
|
self.assertRaises(RuntimeError, z.read, ITEM_NAME) |
|
|
|
z.close() |
|
|
|
|
|
|
|
class TestProtectedWriting(unittest.TestCase): |
|
|
|
def setUp(self): |
|
|
|
create_protected_zip() |
|
|
|
|
|
|
|
|
|
|
|
def tearDown(self): |
|
|
|
os.remove(ZIPPATH) |
|
|
|
|
|
|
|
def test_read_with_password(self): |
|
|
|
z = ZipFile(ZIPPATH, 'r', password='pwd') |
|
|
|
z = ZipFile(ZIPPATH, 'r', password=ZIP2_PWD) |
|
|
|
if PY3: |
|
|
|
self.assertEqual(z.read(ITEM_NAME), bytes(ITEM_CONTENT, 'utf-8')) |
|
|
|
else: |
|
|
@@ -298,6 +334,15 @@ class TestPasswordProtection(unittest.TestCase): |
|
|
|
self.assertRaises(RuntimeError, z.read, ITEM_NAME) |
|
|
|
z.close() |
|
|
|
|
|
|
|
def test_read_with_password_list(self): |
|
|
|
z = ZipFile(ZIPPATH, 'r', password=[ZIP1_PWD, ZIP2_PWD]) |
|
|
|
if PY3: |
|
|
|
self.assertEqual(z.read(ITEM_NAME), bytes(ITEM_CONTENT, 'utf-8')) |
|
|
|
else: |
|
|
|
self.assertEqual(z.read(ITEM_NAME), ITEM_CONTENT) |
|
|
|
z.close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestHighLevelAPI(unittest.TestCase): |
|
|
|
def setUp(self): |
|
|
|