From ee7dd6ecd174aeefa23719c815019eaec061f678 Mon Sep 17 00:00:00 2001
From: Daira Hopwood <daira@jacaranda.org>
Date: Tue, 5 Feb 2013 19:42:17 +0000
Subject: [PATCH] test_client.py: add OpenStack config tests.

Signed-off-by: David-Sarah Hopwood <david-sarah@jacaranda.org>
---
 src/allmydata/test/test_client.py | 60 +++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

diff --git a/src/allmydata/test/test_client.py b/src/allmydata/test/test_client.py
index 13cf7892..e15b212c 100644
--- a/src/allmydata/test/test_client.py
+++ b/src/allmydata/test/test_client.py
@@ -347,6 +347,66 @@ class Basic(testutil.ReallyEqualMixin, unittest.TestCase):
                                     "s3.bucket = test\n")
         self.failUnlessRaises(MissingConfigEntry, client.Client, basedir)
 
+    @mock.patch('allmydata.storage.backends.cloud.openstack.openstack_container.AuthenticationClient')
+    @mock.patch('allmydata.storage.backends.cloud.openstack.openstack_container.OpenStackContainer')
+    def test_openstack_config_good_defaults(self, mock_OpenStackContainer, mock_AuthenticationClient):
+        basedir = "client.Basic.test_openstack_config_good_defaults"
+        os.mkdir(basedir)
+        self._write_secret(basedir, "openstack_api_key")
+        config = (BASECONFIG +
+                  "[storage]\n" +
+                  "enabled = true\n" +
+                  "backend = cloud.openstack\n" +
+                  "openstack.provider = rackspace\n" +
+                  "openstack.username = alex\n")
+        fileutil.write(os.path.join(basedir, "tahoe.cfg"), config)
+
+        c = client.Client(basedir)
+        mock_AuthenticationClient.assert_called_with("dummy", "rackspace",
+                                                     "https://identity.api.rackspacecloud.com/v1.0",
+                                                     "alex", 23*60*60)
+        self.failUnlessEqual(len(mock_OpenStackContainer.mock_calls), 1)
+        server = c.getServiceNamed("storage")
+        self.failUnless(isinstance(server.backend, CloudBackend), server.backend)
+
+    def test_openstack_readonly_bad(self):
+        basedir = "client.Basic.test_openstack_readonly_bad"
+        os.mkdir(basedir)
+        self._write_secret(basedir, "openstack_api_key")
+        fileutil.write(os.path.join(basedir, "tahoe.cfg"),
+                                    BASECONFIG +
+                                    "[storage]\n" +
+                                    "enabled = true\n" +
+                                    "readonly = true\n" +
+                                    "backend = cloud.openstack\n" +
+                                    "openstack.provider = rackspace\n" +
+                                    "openstack.username = alex\n")
+        self.failUnlessRaises(InvalidValueError, client.Client, basedir)
+
+    def test_openstack_config_no_username(self):
+        basedir = "client.Basic.test_openstack_config_no_username"
+        os.mkdir(basedir)
+        self._write_secret(basedir, "openstack_api_key")
+        fileutil.write(os.path.join(basedir, "tahoe.cfg"),
+                                    BASECONFIG +
+                                    "[storage]\n" +
+                                    "enabled = true\n" +
+                                    "backend = cloud.openstack\n" +
+                                    "openstack.provider = rackspace\n")
+        self.failUnlessRaises(MissingConfigEntry, client.Client, basedir)
+
+    def test_openstack_config_no_api_key(self):
+        basedir = "client.Basic.test_openstack_config_no_api_key"
+        os.mkdir(basedir)
+        fileutil.write(os.path.join(basedir, "tahoe.cfg"),
+                                    BASECONFIG +
+                                    "[storage]\n" +
+                                    "enabled = true\n" +
+                                    "backend = cloud.openstack\n" +
+                                    "openstack.provider = rackspace\n" +
+                                    "openstack.username = alex\n")
+        self.failUnlessRaises(MissingConfigEntry, client.Client, basedir)
+
     def test_expire_mutable_false_unsupported(self):
         basedir = "client.Basic.test_expire_mutable_false_unsupported"
         os.mkdir(basedir)
-- 
2.45.2