to_replace = [h for h in log_root.handlers
if isinstance(h, handlers.WatchedFileHandler)]
for handler in to_replace:
+ # NOTE(cbrandily): we use default delay(=False) to ensure the log file
+ # is opened before privileges drop.
new_handler = std_logging.FileHandler(handler.baseFilename,
mode=handler.mode,
- encoding=handler.encoding,
- delay=handler.delay)
+ encoding=handler.encoding)
log_root.removeHandler(handler)
log_root.addHandler(new_handler)
# License for the specific language governing permissions and limitations
# under the License.
-
+import logging
+from logging import handlers
import os
import sys
setattr(self, name, value)
+class TestUnwatchLog(base.BaseTestCase):
+
+ def test_unwatch_log(self):
+ stream_handler = logging.StreamHandler()
+ logger = logging.Logger('fake')
+ logger.addHandler(stream_handler)
+ logger.addHandler(handlers.WatchedFileHandler('/tmp/filename1'))
+
+ with mock.patch('logging.getLogger', return_value=logger):
+ daemon.unwatch_log()
+ self.assertEqual(2, len(logger.handlers))
+ logger.handlers.remove(stream_handler)
+ observed = logger.handlers[0]
+ self.assertEqual(logging.FileHandler, type(observed))
+ self.assertEqual('/tmp/filename1', observed.baseFilename)
+
+
class TestPrivileges(base.BaseTestCase):
def test_setuid_with_name(self):
with mock.patch('pwd.getpwnam', return_value=FakeEntry('pw_uid', 123)):