]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Deal with intermittent OverflowError in gate-neutron-python26
authorarmando-migliaccio <amigliaccio@nicira.com>
Thu, 25 Jul 2013 00:35:28 +0000 (17:35 -0700)
committerarmando-migliaccio <amigliaccio@nicira.com>
Fri, 26 Jul 2013 00:53:12 +0000 (17:53 -0700)
This occurence looks like is related to a failure in
utils.execute. This patch attempts to deal with the error
by mocking out Popen.communicate altogether.

Fixes bug #1202065

Change-Id: I4092efb17939b69dd2d1965aaf619a9b2be03ef4

neutron/tests/unit/test_agent_linux_utils.py

index 8f0f76cca715c0252f2a5393e3eeb4f09d338bfe..842c8a25f062a1646fc20071947f3b382d7463d0 100644 (file)
@@ -29,38 +29,54 @@ class AgentUtilsExecuteTest(base.BaseTestCase):
         self.test_file = self.useFixture(
             fixtures.TempDir()).join("test_execute.tmp")
         open(self.test_file, 'w').close()
+        instance = mock.patch("subprocess.Popen.communicate")
+        self.mock_popen = instance.start()
+        self.addCleanup(self.mock_popen.stop)
 
     def test_without_helper(self):
+        expected = "%s\n" % self.test_file
+        self.mock_popen.return_value = [expected, ""]
         result = utils.execute(["ls", self.test_file])
-        self.assertEqual(result, "%s\n" % self.test_file)
+        self.assertEqual(result, expected)
 
     def test_with_helper(self):
+        expected = "ls %s\n" % self.test_file
+        self.mock_popen.return_value = [expected, ""]
         result = utils.execute(["ls", self.test_file],
                                self.root_helper)
-        self.assertEqual(result, "ls %s\n" % self.test_file)
+        self.assertEqual(result, expected)
 
-    def test_stderr(self):
-        stdout, stderr = utils.execute(["ls", self.test_file],
-                                       return_stderr=True)
-        self.assertEqual(stdout, "%s\n" % self.test_file)
-        self.assertEqual(stderr, "")
+    def test_stderr_true(self):
+        expected = "%s\n" % self.test_file
+        self.mock_popen.return_value = [expected, ""]
+        out = utils.execute(["ls", self.test_file], return_stderr=True)
+        self.assertIsInstance(out, tuple)
+        self.assertEqual(out, (expected, ""))
 
     def test_check_exit_code(self):
+        self.mock_popen.return_value = ["", ""]
         stdout = utils.execute(["ls", self.test_file[:-1]],
                                check_exit_code=False)
         self.assertEqual(stdout, "")
+
+    def test_execute_raises(self):
+        self.mock_popen.side_effect = RuntimeError
         self.assertRaises(RuntimeError, utils.execute,
                           ["ls", self.test_file[:-1]])
 
     def test_process_input(self):
+        expected = "%s\n" % self.test_file[:-1]
+        self.mock_popen.return_value = [expected, ""]
         result = utils.execute(["cat"], process_input="%s\n" %
                                self.test_file[:-1])
-        self.assertEqual(result, "%s\n" % self.test_file[:-1])
+        self.assertEqual(result, expected)
 
     def test_with_addl_env(self):
+        expected = "%s\n" % self.test_file
+        self.mock_popen.return_value = [expected, ""]
         result = utils.execute(["ls", self.test_file],
                                addl_env={'foo': 'bar'})
-        self.assertEqual(result, "%s\n" % self.test_file)
+        self.assertEqual(result, expected)
 
 
 class AgentUtilsGetInterfaceMAC(base.BaseTestCase):