# HG changeset patch
# User hodgestar
# Date 1286746599 0
# Node ID 493e1ea770f067a4e8a5c9a80c3641f653e0573e
# Parent 59acaa8b52c0709aa7fc7328a283235da6337639
Add two simple slave tests. In particular, add a test for processing non-utf8 output. See #243.
diff --git a/bitten/tests_slave/slave.py b/bitten/tests_slave/slave.py
--- a/bitten/tests_slave/slave.py
+++ b/bitten/tests_slave/slave.py
@@ -9,18 +9,42 @@
# are also available at http://bitten.edgewall.org/wiki/License.
import os
+import sys
import shutil
import tempfile
import unittest
from bitten.slave import BuildSlave, ExitSlave
+from bitten.util import xmlio
from bitten.slave import encode_multipart_formdata
+class DummyResponse(object):
+ def __init__(self, code):
+ self.code = code
+
+class TestSlave(BuildSlave):
+
+ def __init__(self, filename, work_dir):
+ BuildSlave.__init__(self, [filename], work_dir=work_dir)
+ self.results = []
+
+ def _gather(self, method, url, body=None, headers=None):
+ self.results.append(xmlio.parse(body))
+ return DummyResponse(201)
+
+ def _execute_step(self, _build_url, recipe, step):
+ old_local, old_request = self.local, self.request
+ try:
+ self.local, self.request = False, self._gather
+ return BuildSlave._execute_step(self, 'dummy_build', recipe, step)
+ finally:
+ self.local, self.request = old_local, old_request
+
class BuildSlaveTestCase(unittest.TestCase):
def setUp(self):
self.work_dir = tempfile.mkdtemp(prefix='bitten_test')
- self.slave = BuildSlave([], work_dir=self.work_dir)
+ self.python_path = xmlio._escape_attr(sys.executable)
def tearDown(self):
shutil.rmtree(self.work_dir)
@@ -31,9 +55,54 @@
fd.close()
return filename
+ def _run_slave(self, recipe):
+ results = []
+ filename = self._create_file("recipe.xml")
+ recipe_file = file(filename, "wb")
+ recipe_file.write(recipe)
+ recipe_file.close()
+ slave = TestSlave(filename, self.work_dir)
+ slave.run()
+ return slave.results
+
def test_quit_raises(self):
+ self.slave = BuildSlave([], work_dir=self.work_dir)
self.assertRaises(ExitSlave, self.slave.quit)
+ def test_simple_recipe(self):
+ results = self._run_slave("""
+
+
+
+
+ """ % self.python_path)
+
+ result = results[0]
+ self.assertEqual(result.attr["step"], "print")
+ self.assertEqual(result.attr["status"], "success")
+ log = list(result)[0]
+ msg = list(log)[0]
+ self.assertEqual(str(msg), 'Hello')
+
+ def test_non_utf8(self):
+ results = self._run_slave("""
+
+
+
+
+ """ % self.python_path)
+
+ result = results[0]
+ self.assertEqual(result.attr["step"], "print")
+ self.assertEqual(result.attr["status"], "success")
+ log = list(result)[0]
+ msg = list(log)[0]
+ # check replacement character (\uFFFD) was generated correctly
+ self.assertEqual(str(msg).decode("utf-8"),
+ u'\uFFFD')
+
class MultiPartEncodeTestCase(unittest.TestCase):
def setUp(self):