From 45739cf02a1f9ec7b77c3ecbcf37b8f80a76b445 Mon Sep 17 00:00:00 2001 From: Michael Krotscheck Date: Sun, 1 Feb 2015 12:58:55 -0800 Subject: [PATCH] Email Working Directory Utility Method A utility method that ensures that a typo inside of the email plugin won't ruin our day. By using this method instead we can change the location of our working directories in one place, rather than several. Change-Id: I3a562d839544c55deee22a85c435df629c67edc0 --- storyboard/plugin/email/__init__.py | 11 +++++++ storyboard/tests/plugin/email/test_init.py | 38 +++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/storyboard/plugin/email/__init__.py b/storyboard/plugin/email/__init__.py index 94fbeaa6..daa6dafa 100644 --- a/storyboard/plugin/email/__init__.py +++ b/storyboard/plugin/email/__init__.py @@ -15,6 +15,9 @@ from oslo.config import cfg from oslo_log import log +from storyboard.common.working_dir import get_plugin_directory + + CONF = cfg.CONF LOG = log.getLogger(__name__) @@ -62,3 +65,11 @@ PLUGIN_OPTS = [ ] CONF.register_opts(PLUGIN_OPTS, "plugin_email") + + +def get_email_directory(): + """A shared utility method that always provides the same working + directory. Error handling is explicitly not provided, as the methods used + 'should' be consistent about the errors they themselves raise. + """ + return get_plugin_directory("email") diff --git a/storyboard/tests/plugin/email/test_init.py b/storyboard/tests/plugin/email/test_init.py index db3e6139..d56dcb3c 100644 --- a/storyboard/tests/plugin/email/test_init.py +++ b/storyboard/tests/plugin/email/test_init.py @@ -12,15 +12,19 @@ # implied. See the License for the specific language governing permissions and # limitations under the License. +import os +import stat + from oslo.config import cfg +from storyboard.plugin.email import get_email_directory from storyboard.tests import base CONF = cfg.CONF -class TestConfiguration(base.TestCase): +class TestEmailConfiguration(base.TestCase): def test_configuration_defaults(self): self.assertIsNotNone(CONF.plugin_email) @@ -34,3 +38,35 @@ class TestConfiguration(base.TestCase): self.assertEqual(None, conf.smtp_ssl_certfile) self.assertEqual(None, conf.smtp_user) self.assertEqual(None, conf.smtp_password) + + +class TestGetEmailDirectory(base.WorkingDirTestCase): + def test_get_email_directory(self): + """Can we resolve the email directory? Most of this testing also + exists in test_working_dir, however it behooves us to test it here as + well. + """ + expected_path = os.path.realpath(os.path.join(CONF.working_directory, + 'plugin', 'email')) + self.assertFalse(os.path.exists(expected_path)) + + resolved_path = get_email_directory() + + self.assertEqual(expected_path, resolved_path) + self.assertTrue(os.path.exists(CONF.working_directory)) + self.assertTrue(os.path.exists(expected_path)) + + self.assertTrue(os.access(CONF.working_directory, os.W_OK)) + self.assertTrue(os.access(expected_path, os.W_OK)) + + def test_get_email_directory_not_creatable(self): + """Assert that the get_email_directory() method raises an error if + it cannot be created. + """ + + # Set the permissions + os.chmod(CONF.working_directory, + stat.S_IRUSR + stat.S_IRGRP + stat.S_IROTH) + + # Make sure it raises an exception. + self.assertRaises(IOError, get_email_directory)