Merge lp:~gocept/landscape-client/py3-package-releaseupgrader into lp:~landscape/landscape-client/trunk

Proposed by Steffen Allner
Status: Merged
Approved by: Данило Шеган
Approved revision: 994
Merged at revision: 970
Proposed branch: lp:~gocept/landscape-client/py3-package-releaseupgrader
Merge into: lp:~landscape/landscape-client/trunk
Diff against target: 203 lines (+37/-37)
3 files modified
landscape/package/releaseupgrader.py (+10/-7)
landscape/package/tests/test_releaseupgrader.py (+18/-23)
py3_ready_tests (+9/-7)
To merge this branch: bzr merge lp:~gocept/landscape-client/py3-package-releaseupgrader
Reviewer Review Type Date Requested Status
🤖 Landscape Builder test results Approve
Данило Шеган (community) Approve
Daniel Havlik (community) Approve
Review via email: mp+320604@code.launchpad.net

Commit message

Use bytes/unicode where appropriate in landscape.package.releaseupgrader module and ensure tests for this module work in both py2 and py3.

Description of the change

This MP considers th landscape.package.releaseupgrader module and its tests. Important fixes were in handling fetch_async() results in the mock, use bytes when checking communication with processes and use unicode for log output.

Additionally, I removed a dependency to landscape.compat by using io.StringIO() directly.

To post a comment you must log in.
Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make check
Result: Success
Revno: 992
Branch: lp:~gocept/landscape-client/py3-package-releaseupgrader
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3695/

review: Approve (test results)
Revision history for this message
Daniel Havlik (nilo) wrote :

+1

review: Approve
Revision history for this message
Данило Шеган (danilo) wrote :

Looks good, +1.

review: Approve
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Attempt to merge into lp:landscape-client failed due to conflicts:

text conflict in py3_ready_tests

Revision history for this message
Данило Шеган (danilo) wrote :

Please re-merge trunk so we can land this.

993. By Steffen Allner

Backmerge from trunk.

994. By Steffen Allner

As we now open the fila in binary mode in the helper, we need to adapt the tests here.

Revision history for this message
🤖 Landscape Builder (landscape-builder) :
review: Abstain (executing tests)
Revision history for this message
🤖 Landscape Builder (landscape-builder) wrote :

Command: TRIAL_ARGS=-j4 make check
Result: Success
Revno: 994
Branch: lp:~gocept/landscape-client/py3-package-releaseupgrader
Jenkins: https://ci.lscape.net/job/latch-test-xenial/3708/

review: Approve (test results)
Revision history for this message
Steffen Allner (sallner) wrote :

I merged the trunk and repaired failing tests on the way.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'landscape/package/releaseupgrader.py'
2--- landscape/package/releaseupgrader.py 2017-03-13 15:38:09 +0000
3+++ landscape/package/releaseupgrader.py 2017-03-23 07:44:11 +0000
4@@ -1,14 +1,14 @@
5+import grp
6+import io
7+import logging
8 import os
9-import sys
10-import grp
11 import pwd
12 import shutil
13-import logging
14+import sys
15 import tarfile
16
17 from twisted.internet.defer import succeed
18
19-from landscape.compat import StringIO
20 from landscape.lib.fetch import url_to_filename, fetch_to_files
21 from landscape.lib.lsb_release import parse_lsb_release, LSB_RELEASE_FILENAME
22 from landscape.lib.gpg import gpg_verify
23@@ -186,18 +186,18 @@
24 @param err: The standard error of the upgrade-tool process.
25 @return: A text aggregating the process output, error and log files.
26 """
27- buf = StringIO()
28+ buf = io.StringIO()
29
30 for label, content in [("output", out), ("error", err)]:
31 if content:
32- buf.write("=== Standard %s ===\n\n%s\n\n" % (label, content))
33+ buf.write(u"=== Standard %s ===\n\n%s\n\n" % (label, content))
34
35 for basename in sorted(os.listdir(self.logs_directory)):
36 if not basename.endswith(".log"):
37 continue
38 filename = os.path.join(self.logs_directory, basename)
39 content = read_text_file(filename, - self.logs_limit)
40- buf.write("=== %s ===\n\n%s\n\n" % (basename, content))
41+ buf.write(u"=== %s ===\n\n%s\n\n" % (basename, content))
42
43 return buf.getvalue()
44
45@@ -224,6 +224,9 @@
46
47 def send_operation_result(args):
48 out, err, code = args
49+ out = out.decode("utf-8")
50+ err = err.decode("utf-8")
51+
52 if code == 0:
53 status = SUCCEEDED
54 else:
55
56=== modified file 'landscape/package/tests/test_releaseupgrader.py'
57--- landscape/package/tests/test_releaseupgrader.py 2017-01-11 10:39:32 +0000
58+++ landscape/package/tests/test_releaseupgrader.py 2017-03-23 07:44:11 +0000
59@@ -3,11 +3,9 @@
60 import signal
61 import tarfile
62 import unittest
63-from unittest import skipIf
64
65 from twisted.internet import reactor
66 from twisted.internet.defer import succeed, fail, Deferred
67-from twisted.python.compat import _PY3
68
69 from landscape.lib.gpg import InvalidGPGSignature
70 from landscape.lib.fetch import HTTPCodeError
71@@ -62,8 +60,8 @@
72 signature_url = "http://some/where/karmic.tar.gz.gpg"
73
74 method_returns = {
75- tarball_url: succeed("tarball"),
76- signature_url: succeed("signature")}
77+ tarball_url: succeed(b"tarball"),
78+ signature_url: succeed(b"signature")}
79
80 def side_effect(param):
81 return method_returns[param]
82@@ -77,9 +75,9 @@
83 def check_result(ignored):
84 directory = self.config.upgrade_tool_directory
85 self.assertFileContent(
86- os.path.join(directory, "karmic.tar.gz"), "tarball")
87+ os.path.join(directory, "karmic.tar.gz"), b"tarball")
88 self.assertFileContent(
89- os.path.join(directory, "karmic.tar.gz.gpg"), "signature")
90+ os.path.join(directory, "karmic.tar.gz.gpg"), b"signature")
91 self.assertIn("INFO: Successfully fetched upgrade-tool files",
92 self.logfile.getvalue())
93 calls = [mock.call(tarball_url), mock.call(signature_url)]
94@@ -98,8 +96,8 @@
95 signature_url = "http://some/where/karmic.tar.gz.gpg"
96
97 method_returns = {
98- tarball_url: succeed("tarball"),
99- signature_url: fail(HTTPCodeError(404, "not found"))}
100+ tarball_url: succeed(b"tarball"),
101+ signature_url: fail(HTTPCodeError(404, b"not found"))}
102
103 def side_effect(param):
104 return method_returns[param]
105@@ -181,7 +179,7 @@
106 def check_result(ignored):
107 filename = os.path.join(self.config.upgrade_tool_directory, "file")
108 self.assertTrue(os.path.exists(filename))
109- self.assertFileContent(filename, "data\n")
110+ self.assertFileContent(filename, b"data\n")
111
112 result.addCallback(check_result)
113 return result
114@@ -198,9 +196,9 @@
115
116 def check_result(ignored):
117 self.assertFileContent(mirrors_filename,
118- "ftp://ftp.lug.ro/ubuntu/\n"
119- "http://ppa.launchpad.net/landscape/"
120- "trunk/ubuntu/\n")
121+ b"ftp://ftp.lug.ro/ubuntu/\n"
122+ b"http://ppa.launchpad.net/landscape/"
123+ b"trunk/ubuntu/\n")
124
125 result = self.upgrader.tweak("hardy")
126 result.addCallback(check_result)
127@@ -286,8 +284,7 @@
128 "stderr\n\n"
129 "=== main.log ===\n\n"
130 "long log\n\n")
131-
132- @skipIf(_PY3, 'Takes long with Python3, probably unclean Reactor')
133+
134 def test_upgrade(self):
135 """
136 The L{ReleaseUpgrader.upgrade} method spawns the appropropriate
137@@ -339,7 +336,6 @@
138
139 return deferred.addBoth(cleanup)
140
141- @skipIf(_PY3, 'Takes long with Python3, probably unclean Reactor')
142 def test_upgrade_with_env_variables(self):
143 """
144 The L{ReleaseUpgrader.upgrade} method optionally sets environment
145@@ -499,8 +495,6 @@
146
147 return deferred.addBoth(cleanup)
148
149-
150- @skipIf(_PY3, 'Takes long with Python3, probably unclean Reactor')
151 def test_finish(self):
152 """
153 The L{ReleaseUpgrader.finish} method wipes the upgrade-tool directory
154@@ -527,9 +521,10 @@
155 def check_result(args):
156 out, err, code = args
157 self.assertFalse(os.path.exists(upgrade_tool_directory))
158- self.assertEqual(out, "--force-apt-update\n%s\n"
159- % os.getcwd())
160- self.assertEqual(err, "")
161+ self.assertEqual(
162+ out,
163+ b"--force-apt-update\n%s\n" % os.getcwd().encode("utf-8"))
164+ self.assertEqual(err, b"")
165 self.assertEqual(code, 0)
166 find_reporter_mock.assert_called_once_with()
167
168@@ -602,9 +597,9 @@
169
170 def check_result(args):
171 out, err, code = args
172- self.assertEqual(out, "--force-apt-update "
173- "--config=/some/config\n")
174- self.assertEqual(err, "")
175+ self.assertEqual(out, b"--force-apt-update "
176+ b"--config=/some/config\n")
177+ self.assertEqual(err, b"")
178 self.assertEqual(code, 0)
179 find_reporter_mock.assert_called_once_with()
180
181
182=== modified file 'py3_ready_tests'
183--- py3_ready_tests 2017-03-22 15:14:41 +0000
184+++ py3_ready_tests 2017-03-23 07:44:11 +0000
185@@ -1,10 +1,12 @@
186 landscape.lib.tests
187 landscape.sysinfo.tests
188-landscape.package.tests.test_store
189-landscape.package.tests.test_reporter
190-landscape.package.tests.test_changer
191-
192-landscape.package.tests.test_facade
193-landscape.package.tests.test_skeleton
194-landscape.package.tests.test_taskhandler
195+landscape.package.tests
196+
197+
198+
199+
200+
201+
202+
203+
204

Subscribers

People subscribed via source and target branches

to all changes: