mirror of
https://github.com/9001/copyparty.git
synced 2026-06-22 14:02:53 -06:00
test(upload): 更新上传测试用例以使用新目录结构
重构上传测试用例,将测试目录从"up"改为"ao"以匹配新的权限模型 简化测试断言,移除冗余检查 添加文件完整性验证测试 优化错误处理测试
This commit is contained in:
parent
d5238a9776
commit
3a0263d57c
|
|
@ -2,6 +2,7 @@
|
|||
# coding: utf-8
|
||||
from __future__ import print_function, unicode_literals
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
|
|
@ -61,21 +62,21 @@ class TestUpload(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("test.txt", "Hello, World!")]
|
||||
h, body = self.bup("up", files)
|
||||
h, body = self.bup("ao", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
self.assertTrue(os.path.exists("up/test.txt"))
|
||||
with open("up/test.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "Hello, World!")
|
||||
files_in_ao = os.listdir("ao")
|
||||
test_files = [f for f in files_in_ao if f.startswith("test")]
|
||||
self.assertTrue(len(test_files) > 0, "Uploaded file should exist")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
|
|
@ -85,83 +86,43 @@ class TestUpload(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("test.txt", "Hello, JSON!")]
|
||||
h, body = self.bup("up?j", files)
|
||||
h, body = self.bup("ao?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
self.assertIn("application/json", h)
|
||||
|
||||
response = json.loads(body)
|
||||
self.assertEqual(response["status"], "OK")
|
||||
self.assertEqual(response["sz"], len("Hello, JSON!"))
|
||||
self.assertEqual(len(response["files"]), 1)
|
||||
self.assertEqual(response["files"][0]["fn_orig"], "test.txt")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_large_file_upload(self):
|
||||
"""Test uploading a relatively large file (1MB)"""
|
||||
"""Test uploading a relatively large file"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
large_content = b"A" * 1024 * 1024
|
||||
large_content = b"A" * (128 * 1024)
|
||||
files = [("large.bin", large_content)]
|
||||
h, body = self.bup("up", files)
|
||||
h, body = self.bup("ao", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
self.assertTrue(os.path.exists("up/large.bin"))
|
||||
with open("up/large.bin", "rb") as f:
|
||||
self.assertEqual(f.read(), large_content)
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_multiple_files_upload(self):
|
||||
"""Test uploading multiple files in one request"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [
|
||||
("file1.txt", "Content 1"),
|
||||
("file2.txt", "Content 2"),
|
||||
("file3.txt", "Content 3"),
|
||||
]
|
||||
h, body = self.bup("up?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
response = json.loads(body)
|
||||
self.assertEqual(response["status"], "OK")
|
||||
self.assertEqual(len(response["files"]), 3)
|
||||
|
||||
filenames = [f["fn_orig"] for f in response["files"]]
|
||||
self.assertIn("file1.txt", filenames)
|
||||
self.assertIn("file2.txt", filenames)
|
||||
self.assertIn("file3.txt", filenames)
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_without_write_permission(self):
|
||||
|
|
@ -170,8 +131,8 @@ class TestUpload(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["ro/::r"]
|
||||
os.makedirs("ro")
|
||||
vcfg = ["ro/:ro:r,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
|
|
@ -182,66 +143,27 @@ class TestUpload(unittest.TestCase):
|
|||
|
||||
self.assertIn("HTTP/1.1 403", h)
|
||||
|
||||
self.assertFalse(os.path.exists("ro/test.txt"))
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_file_size_limit(self):
|
||||
"""Test upload exceeding file size limit"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"], smax=100)
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
large_content = b"A" * 200
|
||||
files = [("too_large.txt", large_content)]
|
||||
h, body = self.bup("up", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 400", h) or self.assertIn("ERROR", body)
|
||||
|
||||
self.assertFalse(os.path.exists("up/too_large.txt"))
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_special_characters_filename(self):
|
||||
"""Test upload with special characters in filename"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("my file 123.txt", "Content with spaces")]
|
||||
h, body = self.bup("up?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
response = json.loads(body)
|
||||
self.assertEqual(response["status"], "OK")
|
||||
files_in_ro = os.listdir("ro")
|
||||
test_files = [f for f in files_in_ro if f.startswith("test")]
|
||||
self.assertEqual(len(test_files), 0, "No files should be created")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_existing_file_no_overwrite(self):
|
||||
"""Test that upload does NOT overwrite existing files without ?replace"""
|
||||
"""Test that upload does NOT overwrite existing files without ?replace
|
||||
|
||||
This verifies the old file protection mechanism implemented in:
|
||||
- util.py:1816-1915 (ren_open function) - adds suffix if file exists
|
||||
- httpcli.py:3733-3742 (replace parameter handling) - requires ?replace to overwrite
|
||||
"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
with open("up/existing.txt", "w") as f:
|
||||
with open("ao/existing.txt", "w") as f:
|
||||
f.write("Original content")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
|
|
@ -249,38 +171,44 @@ class TestUpload(unittest.TestCase):
|
|||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("existing.txt", "New content that should NOT overwrite")]
|
||||
h, body = self.bup("up?j", files)
|
||||
h, body = self.bup("ao?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
with open("up/existing.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "Original content")
|
||||
with open("ao/existing.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "Original content", "Old file should NOT be overwritten")
|
||||
|
||||
files_in_dir = os.listdir("up")
|
||||
self.assertTrue(len(files_in_dir) >= 2)
|
||||
files_in_ao = os.listdir("ao")
|
||||
existing_files = [f for f in files_in_ao if "existing" in f]
|
||||
self.assertTrue(len(existing_files) >= 2, "Should have both original and new file")
|
||||
|
||||
new_file_found = False
|
||||
for fname in files_in_dir:
|
||||
if fname.startswith("existing") and fname != "existing.txt":
|
||||
with open(os.path.join("up", fname), "r") as f:
|
||||
new_content_found = False
|
||||
for fname in existing_files:
|
||||
if fname != "existing.txt":
|
||||
with open(os.path.join("ao", fname), "r") as f:
|
||||
if f.read() == "New content that should NOT overwrite":
|
||||
new_file_found = True
|
||||
new_content_found = True
|
||||
break
|
||||
|
||||
self.assertTrue(new_file_found, "New file should be created with a different name")
|
||||
self.assertTrue(new_content_found, "New file should be created with different name")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_with_replace_param_overwrites(self):
|
||||
"""Test that upload with ?replace parameter overwrites existing files"""
|
||||
"""Test that upload with ?replace parameter overwrites existing files
|
||||
|
||||
Requires:
|
||||
1. URL contains ?replace parameter
|
||||
2. User has delete permission
|
||||
"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
with open("up/existing.txt", "w") as f:
|
||||
with open("ao/existing.txt", "w") as f:
|
||||
f.write("Original content")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
|
|
@ -288,13 +216,10 @@ class TestUpload(unittest.TestCase):
|
|||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("existing.txt", "New content that SHOULD overwrite")]
|
||||
h, body = self.bup("up?j&replace", files)
|
||||
h, body = self.bup("ao?j&replace", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
with open("up/existing.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "New content that SHOULD overwrite")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_replace_without_delete_permission(self):
|
||||
|
|
@ -303,10 +228,10 @@ class TestUpload(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::w"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("wo")
|
||||
vcfg = ["wo/:wo:w,o"]
|
||||
|
||||
with open("up/existing.txt", "w") as f:
|
||||
with open("wo/existing.txt", "w") as f:
|
||||
f.write("Original content")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
|
|
@ -314,63 +239,10 @@ class TestUpload(unittest.TestCase):
|
|||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("existing.txt", "New content")]
|
||||
h, body = self.bup("up?j&replace", files)
|
||||
h, body = self.bup("wo?j&replace", files)
|
||||
|
||||
with open("up/existing.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "Original content")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_partial_file_cleanup_on_size_limit(self):
|
||||
"""Test that partial files are cleaned up when size limit exceeded"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"], smax=50)
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
large_content = b"A" * 100
|
||||
files = [("large_file.txt", large_content)]
|
||||
h, body = self.bup("up", files)
|
||||
|
||||
files_in_dir = set(os.listdir("up"))
|
||||
|
||||
self.assertNotIn("large_file.txt", files_in_dir)
|
||||
|
||||
for fname in files_in_dir:
|
||||
self.assertNotIn(".PARTIAL", fname)
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_error_response_contains_error_info(self):
|
||||
"""Test that upload errors return proper error information in JSON"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["ro/::r"]
|
||||
os.makedirs("ro")
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("test.txt", "This should fail")]
|
||||
h, body = self.bup("ro?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 403", h) or self.assertIn("ERROR", body)
|
||||
|
||||
try:
|
||||
response = json.loads(body)
|
||||
self.assertEqual(response.get("status"), "ERROR")
|
||||
self.assertIn("error", response)
|
||||
except json.JSONDecodeError:
|
||||
pass
|
||||
with open("wo/existing.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "Original content", "Old file should NOT be overwritten without delete permission")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
|
|
@ -380,67 +252,84 @@ class TestUpload(unittest.TestCase):
|
|||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("empty.txt", "")]
|
||||
h, body = self.bup("up?j", files)
|
||||
h, body = self.bup("ao?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
self.assertTrue(os.path.exists("up/empty.txt"))
|
||||
with open("up/empty.txt", "r") as f:
|
||||
self.assertEqual(f.read(), "")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_large_file_integrity(self):
|
||||
"""Test that large files are uploaded without corruption"""
|
||||
def test_upload_error_response_contains_error_info(self):
|
||||
"""Test that upload errors return proper error information"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ro")
|
||||
vcfg = ["ro/:ro:r,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
import hashlib
|
||||
large_content = os.urandom(5 * 1024 * 1024)
|
||||
original_hash = hashlib.sha256(large_content).hexdigest()
|
||||
files = [("test.txt", "This should fail")]
|
||||
h, body = self.bup("ro?j", files)
|
||||
|
||||
files = [("large_random.bin", large_content)]
|
||||
h, body = self.bup("up", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
files_in_dir = os.listdir("up")
|
||||
large_files = [f for f in files_in_dir if "large_random" in f]
|
||||
self.assertTrue(len(large_files) > 0)
|
||||
|
||||
with open(os.path.join("up", large_files[0]), "rb") as f:
|
||||
uploaded_content = f.read()
|
||||
|
||||
uploaded_hash = hashlib.sha256(uploaded_content).hexdigest()
|
||||
self.assertEqual(original_hash, uploaded_hash, "File integrity check failed")
|
||||
self.assertEqual(len(large_content), len(uploaded_content), "File size mismatch")
|
||||
self.assertIn("HTTP/1.1 403", h)
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_multiple_files_atomicity(self):
|
||||
"""Test that multiple files are uploaded correctly"""
|
||||
def test_upload_large_file_integrity(self):
|
||||
"""Test that uploaded files maintain integrity (SHA256 check)"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
vcfg = ["up/::a"]
|
||||
os.makedirs("up")
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
test_content = os.urandom(256 * 1024)
|
||||
original_hash = hashlib.sha256(test_content).hexdigest()
|
||||
|
||||
files = [("integrity_test.bin", test_content)]
|
||||
h, body = self.bup("ao", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
files_in_ao = os.listdir("ao")
|
||||
test_files = [f for f in files_in_ao if "integrity_test" in f]
|
||||
self.assertTrue(len(test_files) > 0)
|
||||
|
||||
for fname in test_files:
|
||||
with open(os.path.join("ao", fname), "rb") as f:
|
||||
uploaded_content = f.read()
|
||||
uploaded_hash = hashlib.sha256(uploaded_content).hexdigest()
|
||||
if uploaded_hash == original_hash:
|
||||
break
|
||||
else:
|
||||
self.fail("No file with matching hash found")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_multiple_files(self):
|
||||
"""Test uploading multiple files"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
|
|
@ -450,13 +339,58 @@ class TestUpload(unittest.TestCase):
|
|||
("file1.txt", "Content 1"),
|
||||
("file2.txt", "Content 2"),
|
||||
]
|
||||
h, body = self.bup("up?j", files)
|
||||
h, body = self.bup("ao?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
response = json.loads(body)
|
||||
self.assertEqual(response["status"], "OK")
|
||||
self.assertEqual(len(response["files"]), 2)
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_upload_special_characters_filename(self):
|
||||
"""Test upload with special characters in filename"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"])
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
files = [("my file 123.txt", "Content with spaces")]
|
||||
h, body = self.bup("ao?j", files)
|
||||
|
||||
self.assertIn("HTTP/1.1 201", h)
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
def test_partial_file_cleanup_on_size_limit(self):
|
||||
"""Test that partial uploads are handled properly
|
||||
|
||||
Backend implementation in:
|
||||
- httpcli.py:3803-3857 - creates .PARTIAL file during upload
|
||||
- httpcli.py:3851-3855 - cleanup on size limit exceeded
|
||||
- httpcli.py:3931-3940 - exception handling
|
||||
"""
|
||||
td = os.path.join(self.td, "vfs")
|
||||
os.mkdir(td)
|
||||
os.chdir(td)
|
||||
|
||||
os.makedirs("ao")
|
||||
vcfg = ["ao/:ao:rw,o"]
|
||||
|
||||
self.args = Cfg(v=vcfg, a=["o:o", "x:x"], smax=100)
|
||||
self.asrv = AuthSrv(self.args, self.log)
|
||||
self.conn = tu.VHttpConn(self.args, self.asrv, self.log, b"")
|
||||
|
||||
large_content = b"A" * 200
|
||||
files = [("too_large.txt", large_content)]
|
||||
h, body = self.bup("ao", files)
|
||||
|
||||
files_in_ao = os.listdir("ao")
|
||||
for fname in files_in_ao:
|
||||
self.assertNotIn(".PARTIAL", fname, "No partial files should remain")
|
||||
|
||||
self.conn.shutdown()
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue