Now that spurious commits were removed in document module, the test would not run properly anymore. We do need special care with transactions when we test the FTP layer because operations on the virtual FS are done in their own transaction, and immediately committed. In order for test code and FTP operations to be able to see each other, the transactions need to be synchronized. The current test transaction needs to be rolled back or committed after reach FTP operation so it can "see" the latest changes in the database. Similarly, we must force a commit of the test transaction whenever we want the FTP layer to be able to see its effects. bzr revid: odo@openerp.com-20111130120244-3m15sxdx1x5x1q1x
298 lines
9.8 KiB
YAML
298 lines
9.8 KiB
YAML
-
|
|
In order to test the document_ftp functionality
|
|
-
|
|
I open the 8021 port and see for ftp presence there
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_plain_ftp(timeout=2.0)
|
|
assert ftp.sock and (ftp.lastresp == '220'), ftp.lastresp
|
|
ftp.close()
|
|
-
|
|
I read the list of databases at port 8021 and confirm our db is
|
|
there
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_login(cr, uid, self)
|
|
assert cr.dbname in ftp.nlst("/")
|
|
ftp.close()
|
|
-
|
|
I try to locate the default "Documents" folder in the db.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_login(cr, uid, self)
|
|
ftp.cwd('Documents')
|
|
ftp.close()
|
|
-
|
|
I create a "test.txt" file at the server (directly). The file
|
|
should have the "abcd" content
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
fdata = StringIO('abcd')
|
|
ftp.storbinary('STOR test.txt', fdata)
|
|
ftp.close()
|
|
-
|
|
I look for the "test.txt" file at the server
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
assert ftp.nlst("test.txt") == ['test.txt']
|
|
ftp.close()
|
|
-
|
|
I check that the content of "test.txt" is "abcd"
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
gotdata = te.get_ftp_fulldata(ftp, "test.txt")
|
|
ftp.close()
|
|
assert gotdata == 'abcd', 'Data: %r' % gotdata
|
|
-
|
|
I append the string 'defgh' to "test.txt"
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
fdata = StringIO('defgh')
|
|
ftp.storbinary('APPE test.txt', fdata)
|
|
ftp.close()
|
|
-
|
|
I check that the content of "text.txt" is 'abcddefgh'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
gotdata = te.get_ftp_fulldata(ftp, "test.txt")
|
|
ftp.close()
|
|
assert gotdata == 'abcddefgh', 'Data: %r' % gotdata
|
|
-
|
|
I try to cd into an non-existing folder 'Not-This'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
import ftplib
|
|
ftp = te.get_ftp_login(cr, uid, self)
|
|
try:
|
|
ftp.cwd('/Not-This')
|
|
assert False, "We should't be able to change here"
|
|
except ftplib.error_perm:
|
|
pass
|
|
except OSError, err:
|
|
ftp.close()
|
|
assert err.errno == 2, err.errno
|
|
ftp.close()
|
|
-
|
|
I create a "test2.txt" file through FTP.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
fdata = StringIO('abcd')
|
|
ftp.storbinary('STOR test2.txt', fdata)
|
|
ftp.close()
|
|
-
|
|
I look for the "test2.txt" file at the server
|
|
-
|
|
!python {model: ir.attachment }: |
|
|
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
|
|
ids = self.search(cr, uid, [('name', '=', 'test2.txt')])
|
|
assert ids, "No test2.txt file found."
|
|
-
|
|
I delete the "test2.txt" file using FTP.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.delete('test2.txt')
|
|
ftp.close()
|
|
-
|
|
I check at the server that test2.txt is deleted
|
|
-
|
|
!python {model: ir.attachment }: |
|
|
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
|
|
ids = self.search(cr, uid, [('name', '=', 'test2.txt')])
|
|
assert not ids, "test2.txt file can still be found."
|
|
-
|
|
I create a test2.txt file again.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
fdata = StringIO('abcd')
|
|
ftp.storbinary('STOR test2.txt', fdata)
|
|
ftp.close()
|
|
cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor)
|
|
-
|
|
I delete the test2.txt from the server (RPC).
|
|
-
|
|
!delete { model: ir.attachment, id:, search: "[('name','=','test2.txt')]" }
|
|
-
|
|
I also commit, because ftp would run in a different transaction.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
cr.commit()
|
|
-
|
|
I check through FTP that test2.txt does not appear.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
import ftplib
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
try:
|
|
nlst_result = ftp.nlst("test2.txt")
|
|
except ftplib.error_perm: # 550 error: 'path not exists'
|
|
nlst_result = []
|
|
assert "test2.txt" not in nlst_result, "Files: %r" % nlst_result
|
|
ftp.close()
|
|
-
|
|
I create a "test-name.txt" file
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
fdata = StringIO('abcd')
|
|
ftp.storbinary('STOR test-name.txt', fdata)
|
|
ftp.close()
|
|
-
|
|
I rename the "test-name.txt" file through ftp.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.rename("test-name.txt", "test-renamed.txt")
|
|
ftp.close()
|
|
-
|
|
I check that test-name.txt has been renamed.
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from ftplib import error_perm
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
try:
|
|
res = ftp.nlst("test-name.txt")
|
|
assert res == [], "File has not been renamed!"
|
|
except error_perm, e:
|
|
pass
|
|
assert ftp.nlst("test-renamed.txt") == ['test-renamed.txt']
|
|
ftp.close()
|
|
-
|
|
I create a new folder 'Test-Folder2' through FTP
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.mkd("Test-Folder2")
|
|
ftp.close()
|
|
-
|
|
I create a file 'test3.txt' at the 'Test-Folder2'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
|
fdata = StringIO('abcd')
|
|
ftp.storbinary('STOR test3.txt', fdata)
|
|
ftp.close()
|
|
-
|
|
I try to retrieve test3.txt
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
|
assert ftp.nlst("test3.txt") == ['test3.txt'], "File test3.txt is not there!"
|
|
ftp.close()
|
|
-
|
|
I create a new folder, 'Test-Folder3', through FTP
|
|
I try to move test3.txt to 'Test-Folder3'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.mkd("Test-Folder3")
|
|
ftp.close()
|
|
# TODO move
|
|
-
|
|
I remove the 'Test-Folder3'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.rmd("Test-Folder3")
|
|
ftp.close()
|
|
-
|
|
I check that test3.txt is removed.
|
|
-
|
|
I create 200 files through FTP
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
|
fdata = StringIO('abcd')
|
|
# TODO speed
|
|
for i in range(0, 200):
|
|
fdata.seek(0)
|
|
ftp.storbinary('STOR test-name%s.txt' %i, fdata)
|
|
ftp.close()
|
|
-
|
|
I list the 200 files, check speed
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
|
# TODO speed
|
|
assert len(ftp.nlst()) >= 200, "We haven't managed to store 200 files!"
|
|
-
|
|
I read the 200 files, check speed
|
|
# TODO
|
|
-
|
|
I move the 200 files to 'Test-Folder2'
|
|
# TODO
|
|
|
|
-
|
|
I delete the 200 files
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2')
|
|
# TODO speed
|
|
ftp.delete('test3.txt')
|
|
for i in range(0, 200):
|
|
ftp.delete('test-name%s.txt' %i)
|
|
ftp.close()
|
|
|
|
-
|
|
I delete the "test.txt" and "test-renamed.txt" file
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
from cStringIO import StringIO
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
# TODO speed
|
|
ftp.delete('test.txt')
|
|
ftp.delete('test-renamed.txt')
|
|
ftp.close()
|
|
|
|
-
|
|
I remove the 'Test-Folder2'
|
|
-
|
|
!python {model: ir.attachment}: |
|
|
from document_ftp import test_easyftp as te
|
|
ftp = te.get_ftp_folder(cr, uid, self, 'Documents')
|
|
ftp.rmd("Test-Folder2")
|
|
ftp.close()
|