Blob Blame History Raw
From 76b525ab22ac63282153e5a7eb9cf5947da10413 Mon Sep 17 00:00:00 2001
From: Matt Stephenson <mattstep@mattstep.net>
Date: Tue, 3 Apr 2012 14:38:09 -0700
Subject: [PATCH] Get unit tests functional in OS X

* Add detection for directio to ensure the python runtime is built with O_DIRECT
* Extend stubbing in test_libvirt to also stub out _supports_direct_io

Change-Id: Id793d4039311396f0b3c3a52d2a1d951ec3c5e48
(cherry picked from commit cf7c0a7c10723495953be9bf99aedbe3838e0787)
---
 nova/tests/test_libvirt.py      |    7 +++++++
 nova/virt/libvirt/connection.py |    6 ++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/nova/tests/test_libvirt.py b/nova/tests/test_libvirt.py
index cdc9121..5163b32 100644
--- a/nova/tests/test_libvirt.py
+++ b/nova/tests/test_libvirt.py
@@ -899,6 +899,13 @@ class LibvirtConnTestCase(test.TestCase):
 
         self.stubs.Set(os, 'open', os_open_stub)
 
+        def connection_supports_direct_io_stub(*args, **kwargs):
+            return directio_supported
+
+        self.stubs.Set(connection.LibvirtConnection,
+                       '_supports_direct_io',
+                       connection_supports_direct_io_stub)
+
         user_context = context.RequestContext(self.user_id, self.project_id)
         instance_ref = db.instance_create(user_context, self.test_instance)
         network_info = _fake_network_info(self.stubs, 1)
diff --git a/nova/virt/libvirt/connection.py b/nova/virt/libvirt/connection.py
index 5facc10..00345d2 100644
--- a/nova/virt/libvirt/connection.py
+++ b/nova/virt/libvirt/connection.py
@@ -1037,7 +1037,13 @@ class LibvirtConnection(driver.ComputeDriver):
 
     @staticmethod
     def _supports_direct_io(dirpath):
+
+        if not hasattr(os, 'O_DIRECT'):
+            LOG.debug("This python runtime does not support direct I/O")
+            return False
+
         testfile = os.path.join(dirpath, ".directio.test")
+
         hasDirectIO = True
         try:
             f = os.open(testfile, os.O_CREAT | os.O_WRONLY | os.O_DIRECT)