diff options
| author | Mark Washenberger <mark.washenberger@rackspace.com> | 2011-03-09 16:32:06 -0500 |
|---|---|---|
| committer | Mark Washenberger <mark.washenberger@rackspace.com> | 2011-03-09 16:32:06 -0500 |
| commit | 95d25ba3f4cd3345355922018295f3789d5ddb7c (patch) | |
| tree | 83c37b89d96150fd7d7bc04459b5e3b62986f1ad /nova/tests | |
| parent | 82c4d6309909d6508df0944683ce4d3d7341de10 (diff) | |
| parent | 5662a822a013bd0d159c15b990231c4d1f12797f (diff) | |
merge lp:nova and resolve conflicts
Diffstat (limited to 'nova/tests')
| -rw-r--r-- | nova/tests/test_misc.py | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/nova/tests/test_misc.py b/nova/tests/test_misc.py index e6da6112a..a658e4978 100644 --- a/nova/tests/test_misc.py +++ b/nova/tests/test_misc.py @@ -14,10 +14,12 @@ # License for the specific language governing permissions and limitations # under the License. +import errno import os +import select from nova import test -from nova.utils import parse_mailmap, str_dict_replace +from nova.utils import parse_mailmap, str_dict_replace, synchronized class ProjectTestCase(test.TestCase): @@ -55,3 +57,47 @@ class ProjectTestCase(test.TestCase): '%r not listed in Authors' % missing) finally: tree.unlock() + + +class LockTestCase(test.TestCase): + def test_synchronized_wrapped_function_metadata(self): + @synchronized('whatever') + def foo(): + """Bar""" + pass + self.assertEquals(foo.__doc__, 'Bar', "Wrapped function's docstring " + "got lost") + self.assertEquals(foo.__name__, 'foo', "Wrapped function's name " + "got mangled") + + def test_synchronized(self): + rpipe1, wpipe1 = os.pipe() + rpipe2, wpipe2 = os.pipe() + + @synchronized('testlock') + def f(rpipe, wpipe): + try: + os.write(wpipe, "foo") + except OSError, e: + self.assertEquals(e.errno, errno.EPIPE) + return + + rfds, _, __ = select.select([rpipe], [], [], 1) + self.assertEquals(len(rfds), 0, "The other process, which was" + " supposed to be locked, " + "wrote on its end of the " + "pipe") + os.close(rpipe) + + pid = os.fork() + if pid > 0: + os.close(wpipe1) + os.close(rpipe2) + + f(rpipe1, wpipe2) + else: + os.close(rpipe1) + os.close(wpipe2) + + f(rpipe2, wpipe1) + os._exit(0) |
