81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
import base64
|
|
import hashlib
|
|
import os
|
|
import urllib.parse
|
|
|
|
import pytest
|
|
import requests
|
|
|
|
SPECIAL_CHARS = '!#$%&+-^_`;[]{}+='
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"path,file_name",
|
|
[
|
|
('', 'some.file'),
|
|
('/toto', 'some.file'),
|
|
('/toto/tata', 'some.file'),
|
|
('/toto', 'some.other'),
|
|
('/%s' % SPECIAL_CHARS, '%(spe)s.%(spe)s' % {'spe': SPECIAL_CHARS}),
|
|
],
|
|
)
|
|
def test_uploadfile(cmisclient, cmis_connector, cmis_tmpdir, tmpdir, monkeypatch, path, file_name):
|
|
result_filename = 'result.file'
|
|
monkeypatch.chdir(tmpdir)
|
|
orig_file = tmpdir.join(file_name)
|
|
with orig_file.open('wb') as f:
|
|
f.write(os.urandom(1024))
|
|
url = urllib.parse.urljoin(cmis_connector, 'uploadfile')
|
|
with orig_file.open('rb') as f:
|
|
file_b64_content = base64.b64encode(f.read())
|
|
response = requests.post(
|
|
url,
|
|
json={
|
|
"path": cmis_tmpdir + path,
|
|
"file": {"content": file_b64_content, "filename": file_name, "content_type": "image/jpeg"},
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
resp_data = response.json()
|
|
assert resp_data['err'] == 0
|
|
assert resp_data['data']['properties']['cmis:name'] == file_name
|
|
doc = cmisclient.defaultRepository.getObject(resp_data['data']['properties']['cmis:objectId'])
|
|
with open(result_filename, 'wb') as f:
|
|
result = doc.getContentStream()
|
|
f.write(result.read())
|
|
result.close()
|
|
with open(result_filename, 'rb') as f:
|
|
result_sha1 = hashlib.sha1()
|
|
result_sha1.update(f.read())
|
|
with open(file_name, 'rb') as f:
|
|
orig_sha1 = hashlib.sha1()
|
|
orig_sha1.update(f.read())
|
|
assert orig_sha1.digest() == result_sha1.digest()
|
|
|
|
|
|
def test_uploadfile_conflict(cmisclient, cmis_connector, cmis_tmpdir, tmpdir, monkeypatch):
|
|
url = urllib.parse.urljoin(cmis_connector, 'uploadfile')
|
|
file_b64_content = base64.b64encode('file_content')
|
|
response = requests.post(
|
|
url,
|
|
json={
|
|
"path": cmis_tmpdir + '/uploadconflict',
|
|
"file": {"content": file_b64_content, "filename": 'some.file', "content_type": "image/jpeg"},
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
resp_data = response.json()
|
|
assert resp_data['err'] == 0
|
|
file_b64_content = base64.b64encode('other_file_content')
|
|
response = requests.post(
|
|
url,
|
|
json={
|
|
"path": cmis_tmpdir + '/uploadconflict',
|
|
"file": {"content": file_b64_content, "filename": 'some.file', "content_type": "image/jpeg"},
|
|
},
|
|
)
|
|
assert response.status_code == 200
|
|
resp_data = response.json()
|
|
assert resp_data['err'] == 1
|
|
assert resp_data['err_desc'].startswith("update conflict")
|