From a5553369105d6c9f4d11bdc80fe79054bc029ca3 Mon Sep 17 00:00:00 2001
From: david-sarah <david-sarah@jacaranda.org>
Date: Sun, 29 Apr 2012 02:28:44 +0000
Subject: [PATCH] Make sure that foolscap.logging.log.setLogDir is called with
 a str (not unicode) path, v2. Includes test. fixes #1725

---
 src/allmydata/node.py           |  2 +-
 src/allmydata/test/test_node.py | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/node.py b/src/allmydata/node.py
index a77fdadc..458c57e1 100644
--- a/src/allmydata/node.py
+++ b/src/allmydata/node.py
@@ -348,7 +348,7 @@ class Node(service.MultiService):
         self.tub.setOption("bridge-twisted-logs", True)
         incident_dir = os.path.join(self.basedir, "logs", "incidents")
         # this doesn't quite work yet: unit tests fail
-        foolscap.logging.log.setLogDir(incident_dir)
+        foolscap.logging.log.setLogDir(incident_dir.encode(get_filesystem_encoding()))
 
     def log(self, *args, **kwargs):
         return log.msg(*args, **kwargs)
diff --git a/src/allmydata/test/test_node.py b/src/allmydata/test/test_node.py
index ed6898e7..4c1bbc01 100644
--- a/src/allmydata/test/test_node.py
+++ b/src/allmydata/test/test_node.py
@@ -4,6 +4,8 @@ from twisted.trial import unittest
 from twisted.internet import defer
 from twisted.python import log
 
+from mock import patch
+
 from foolscap.api import flushEventualQueue
 from twisted.application import service
 from allmydata.node import Node, formatTimeTahoeStyle
@@ -116,3 +118,15 @@ class TestCase(testutil.SignalMixin, unittest.TestCase):
         st = os.stat(privdir)
         bits = stat.S_IMODE(st[stat.ST_MODE])
         self.failUnless(bits & 0001 == 0, bits)
+
+    @patch("foolscap.logging.log.setLogDir")
+    def test_logdir_is_str(self, mock_setLogDir):
+        basedir = "test_node/test_logdir_is_str"
+        fileutil.make_dirs(basedir)
+
+        def call_setLogDir(logdir):
+            self.failUnless(isinstance(logdir, str), logdir)
+        mock_setLogDir.side_effect = call_setLogDir
+
+        TestNode(basedir)
+        self.failUnless(mock_setLogDir.called)
-- 
2.45.2