~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/lp/soyuz/doc/soyuz-upload.txt

  • Committer: Launchpad Patch Queue Manager
  • Date: 2011-08-02 23:44:26 UTC
  • mfrom: (13589.1.1 revert-r13574)
  • Revision ID: launchpad@pqm.canonical.com-20110802234426-z03j07sj334l9ay0
[r=wgrant][rollback=13574] Revert r13574. It crashes when the flag is
 enabled, see bug #810290.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 
4
4
This test will:
5
5
 
 
6
  * Turn the poppy FTP server on
6
7
  * Upload packages
 
8
  * Check result
 
9
  * Kill the FTP server
7
10
  * Import gpg key for katie
8
11
  * Register gpg key for katie
9
12
  * Register the katie user in the right team
25
28
uploaded files in.
26
29
 
27
30
    >>> import os
28
 
    >>> import shutil
29
31
    >>> import tempfile
30
32
    >>> temp_dir = tempfile.mkdtemp()
31
33
    >>> incoming_dir = os.path.join(temp_dir, "incoming")
35
37
    >>> os.mkdir(incoming_dir)
36
38
 
37
39
 
38
 
Now let's copy the files into separate upload directories, as if they'd
39
 
been uploaded over FTP.
 
40
Now, let's create a subprocess running the poppy FTP server. It won't
 
41
call the upload processing tool. We'll do that ourselves in our test,
 
42
so that we can control what's going on.
 
43
 
 
44
    >>> from lp.poppy.tests.test_poppy import PoppyTac
 
45
    >>> poppy = PoppyTac(incoming_dir)
 
46
    >>> poppy.setUp()
 
47
 
 
48
Connect to the server and login. We'll keep trying to connect until
 
49
the server dies or the connection succeeds.
 
50
 
 
51
    >>> import ftplib, socket
 
52
    >>> ftp = ftplib.FTP()
 
53
    >>> while True:
 
54
    ...    try:
 
55
    ...        reply = ftp.connect("localhost", 2121)
 
56
    ...    except socket.error:
 
57
    ...        if not poppy.alive:
 
58
    ...            raise Exception('Server can not start.')
 
59
    ...    else:
 
60
    ...        break
 
61
    >>> ftp.login("anonymous", "")
 
62
    '230 Anonymous login ok, access restrictions apply.'
 
63
    >>> ftp.cwd("/")
 
64
    '250 Requested File Action Completed OK'
 
65
 
 
66
 
 
67
Good.. let's send all packages we have in the test directory to
 
68
the poppy server. We send each package set on a different ftp
 
69
session.
40
70
 
41
71
    >>> from canonical.config import config
42
72
    >>> from lp.archiveuploader.tagfiles import parse_tagfile
50
80
    >>> uploads = []
51
81
    >>> package_names = []
52
82
 
53
 
    >>> seq = 1
 
83
# XXX cprov 2006-01-25 bug=29645: poppy still having a weird behaviour
 
84
# during the file transfer, it suddenly closes the connection due
 
85
# inactivity. That's why we keep polling the 'ftp.sock' attribute and
 
86
# reconnect if it is gone.
 
87
 
54
88
    >>> for changes_filepath in changes:
 
89
    ...
 
90
    ...     if not ftp.sock:
 
91
    ...         assert ftp.connect("localhost", 2121).startswith("220 ")
 
92
    ...         assert ftp.login("anonymous", "").startswith("230 ")
 
93
    ...
55
94
    ...     tf = parse_tagfile(changes_filepath)
56
95
    ...
57
96
    ...     if tf.has_key("Source"):
66
105
    ...     sent_filenames.extend(
67
106
    ...         os.path.basename(filepath) for filepath in send_filepaths)
68
107
    ...
69
 
    ...     upload_dir = os.path.join(
70
 
    ...         incoming_dir, 'upload-%06d' % seq, 'ubuntutest')
71
 
    ...     os.makedirs(upload_dir)
 
108
    ...     ignore = ftp.cwd("ubuntutest")
72
109
    ...
73
110
    ...     for filepath in send_filepaths:
74
 
    ...         shutil.copyfile(
75
 
    ...             filepath,
76
 
    ...             os.path.join(upload_dir, os.path.basename(filepath)))
 
111
    ...         try:
 
112
    ...             reply = ftp.storbinary(
 
113
    ...                 "STOR %s" % os.path.basename(filepath),
 
114
    ...                 open(filepath))
 
115
    ...             assert reply == '226 Transfer Complete.'
 
116
    ...         except ftplib.error_perm as e:
 
117
    ...             # Our changes files aren't signed, so poppy-sftp will
 
118
    ...             # complain. But let them through anyway.
 
119
    ...             if not e[0].startswith('550 Changes file must be signed'):
 
120
    ...                 raise
77
121
    ...
78
122
    ...     uploads.append(send_filepaths)
79
 
    ...     seq += 1
 
123
    ...
 
124
    ...     assert ftp.quit() == '221 Goodbye.'
80
125
 
81
126
Check that what we've just uploaded (everything in test_files_dir) is
82
127
what we were expecting to have uploaded.
84
129
    >>> package_names
85
130
    ['drdsl', 'etherwake']
86
131
 
87
 
At that point we must have a bunch of directories in the upload base
88
 
directory named upload-XXXXXX, as would result from several FTP
89
 
sessions.  Below we ensure that, and also that the content of these
90
 
files match the uploaded ones.
 
132
At that point we must have a bunch of directories in the upload
 
133
base directory named <TIMESTAMP>-XXXXXX, each one as a result of
 
134
each FTP session. Below we ensure that, and also that the content
 
135
of these files match the uploaded ones.
91
136
 
92
137
    >>> import hashlib
93
138
    >>> def get_md5(filename):
128
173
    ...         assert os.path.isfile(upload_filename)
129
174
    ...         assert get_md5(filename) == get_md5(upload_filename)
130
175
 
 
176
 
 
177
Right, that's all we need from the FTP server. We don't need it anymore,
 
178
so we'll just kill the process.
 
179
 
 
180
    >>> status = poppy.cleanUp()
 
181
 
131
182
Finally, we'll just create an entirely empty upload folder. We rely for
132
183
our tests on a poppy-like naming system, ie. that the upload folder
133
184
end with 000004 (being our fourth upload).