annotate bitten/tests_slave/slave.py @ 898:ba551c60cf06 0.6.x

0.6dev: Merged [976] from trunk.
author hodgestar
date Wed, 09 Mar 2011 15:03:09 +0000
parents 5bbcbc18cc31
children
rev   line source
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
1 # -*- coding: utf-8 -*-
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
2 #
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
3 # Copyright (C) 2005-2007 Christopher Lenz <cmlenz@gmx.de>
833
f4d07544722b 0.6dev: Merged [910] from trunk.
osimons
parents: 726
diff changeset
4 # Copyright (C) 2007-2010 Edgewall Software
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
5 # All rights reserved.
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
6 #
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
9 # are also available at http://bitten.edgewall.org/wiki/License.
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
10
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
11 import os
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
12 import sys
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
13 import shutil
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
14 import tempfile
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
15 import unittest
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
16
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
17 from bitten.slave import BuildSlave, ExitSlave
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
18 from bitten.util import xmlio
836
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
19 from bitten.slave import encode_multipart_formdata
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
20
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
21 class DummyResponse(object):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
22 def __init__(self, code):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
23 self.code = code
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
24
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
25 class TestSlave(BuildSlave):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
26
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
27 def __init__(self, filename, work_dir):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
28 BuildSlave.__init__(self, [filename], work_dir=work_dir)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
29 self.results = []
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
30
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
31 def _gather(self, method, url, body=None, headers=None):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
32 self.results.append(xmlio.parse(body))
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
33 return DummyResponse(201)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
34
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
35 def _execute_step(self, _build_url, recipe, step):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
36 old_local, old_request = self.local, self.request
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
37 try:
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
38 self.local, self.request = False, self._gather
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
39 return BuildSlave._execute_step(self, 'dummy_build', recipe, step)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
40 finally:
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
41 self.local, self.request = old_local, old_request
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
42
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
43 class BuildSlaveTestCase(unittest.TestCase):
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
44
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
45 def setUp(self):
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
46 self.work_dir = tempfile.mkdtemp(prefix='bitten_test')
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
47 self.python_path = xmlio._escape_attr(sys.executable)
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
48
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
49 def tearDown(self):
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
50 shutil.rmtree(self.work_dir)
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
51
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
52 def _create_file(self, *path):
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
53 filename = os.path.join(self.work_dir, *path)
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
54 fd = file(filename, 'w')
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
55 fd.close()
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
56 return filename
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
57
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
58 def _run_slave(self, recipe):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
59 results = []
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
60 filename = self._create_file("recipe.xml")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
61 recipe_file = file(filename, "wb")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
62 recipe_file.write(recipe)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
63 recipe_file.close()
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
64 slave = TestSlave(filename, self.work_dir)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
65 slave.run()
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
66 return slave.results
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
67
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
68 def test_quit_raises(self):
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
69 self.slave = BuildSlave([], work_dir=self.work_dir)
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
70 self.assertRaises(ExitSlave, self.slave.quit)
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
71
838
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
72 def test_simple_recipe(self):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
73 results = self._run_slave("""
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
74 <build xmlns:sh="http://bitten.edgewall.org/tools/sh"
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
75 >
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
76 <step id="print">
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
77 <sh:exec executable="%s" args='-c "print (\\"Hello\\")"' />
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
78 </step>
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
79 </build>""" % self.python_path)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
80
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
81 result = results[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
82 self.assertEqual(result.attr["step"], "print")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
83 self.assertEqual(result.attr["status"], "success")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
84 log = list(result)[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
85 msg = list(log)[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
86 self.assertEqual(str(msg), '<message level="info">Hello</message>')
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
87
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
88 def test_non_utf8(self):
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
89 results = self._run_slave("""
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
90 <build xmlns:sh="http://bitten.edgewall.org/tools/sh"
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
91 >
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
92 <step id="print">
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
93 <sh:exec executable="%s" args='-c "print (\\"\\xe9\\")"' />
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
94 </step>
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
95 </build>""" % self.python_path)
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
96
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
97 result = results[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
98 self.assertEqual(result.attr["step"], "print")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
99 self.assertEqual(result.attr["status"], "success")
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
100 log = list(result)[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
101 msg = list(log)[0]
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
102 # check replacement character (\uFFFD) was generated correctly
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
103 self.assertEqual(str(msg).decode("utf-8"),
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
104 u'<message level="info">\uFFFD</message>')
5bbcbc18cc31 0.6dev: Merged [915] from trunk.
hodgestar
parents: 836
diff changeset
105
836
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
106 class MultiPartEncodeTestCase(unittest.TestCase):
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
107
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
108 def setUp(self):
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
109 self.work_dir = tempfile.mkdtemp(prefix='bitten_test')
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
110
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
111 def tearDown(self):
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
112 shutil.rmtree(self.work_dir)
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
113
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
114 def test_mutlipart_encode_one(self):
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
115 fields = {
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
116 'foo': 'bar',
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
117 'foofile': ('test.txt', 'contents of foofile'),
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
118 }
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
119 body, content_type = encode_multipart_formdata(fields)
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
120 boundary = content_type.split(';')[1].strip().split('=')[1]
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
121 self.assertEquals('multipart/form-data; boundary=%s' % boundary,
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
122 content_type)
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
123 self.assertEquals('--%s\r\nContent-Disposition: form-data; ' \
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
124 'name="foo"\r\n\r\nbar\r\n--%s\r\nContent-Disposition: ' \
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
125 'form-data; name="foofile"; filename="test.txt"\r\n' \
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
126 'Content-Type: application/octet-stream\r\n\r\n' \
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
127 'contents of foofile\r\n--%s--\r\n' % (
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
128 boundary,boundary,boundary), body)
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
129
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
130 def suite():
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
131 suite = unittest.TestSuite()
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
132 suite.addTest(unittest.makeSuite(BuildSlaveTestCase, 'test'))
836
8df9bc903edb 0.6dev: Merged [912:913] from trunk.
osimons
parents: 833
diff changeset
133 suite.addTest(unittest.makeSuite(MultiPartEncodeTestCase, 'test'))
726
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
134 return suite
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
135
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
136 if __name__ == '__main__':
df8d2cd7e50e 0.6dev: Merge [803] from trunk.
osimons
parents:
diff changeset
137 unittest.main(defaultTest='suite')
Copyright (C) 2012-2017 Edgewall Software