summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Kraft <george.kraft@calxeda.com>2013-12-11 12:36:50 -0600
committerGeorge Kraft <george.kraft@calxeda.com>2013-12-11 12:36:50 -0600
commit97127c4f4ff7a8e42347d815ecda95059ed3c084 (patch)
treea06b0cd4321fb9300e6ac669feab8fb919747c51
parent065b3f2f0d8aa70d5498429ecc98f4daea77aa89 (diff)
downloadcxmanage-97127c4f4ff7a8e42347d815ecda95059ed3c084.tar.gz
CXMAN-261: Add a Credentials class and unit tests for it
-rw-r--r--cxmanage_api/credentials.py56
-rw-r--r--cxmanage_api/tests/test_credentials.py69
-rwxr-xr-xrun_tests5
3 files changed, 128 insertions, 2 deletions
diff --git a/cxmanage_api/credentials.py b/cxmanage_api/credentials.py
new file mode 100644
index 0000000..8709bf9
--- /dev/null
+++ b/cxmanage_api/credentials.py
@@ -0,0 +1,56 @@
+# Copyright (c) 2012-2013, Calxeda Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Calxeda Inc. nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGE.
+
+
+class Credentials(object):
+ """ Container for login credentials """
+ defaults = {
+ "ecme_username": "admin",
+ "ecme_password": "admin",
+ "linux_username": "user1",
+ "linux_password": "1Password"
+ }
+
+ def __init__(self, base=None, **kwargs):
+ self.__dict__.update(self.defaults)
+ if isinstance(base, Credentials):
+ self.__dict__.update(vars(base))
+ elif base != None:
+ self.__dict__.update(base)
+ self.__dict__.update(kwargs)
+
+ for key in self.__dict__:
+ if not key in self.defaults:
+ raise ValueError("Invalid credential key: %s" % key)
+
+ def __repr__(self):
+ return "Credentials(%s)" % (", ".join(
+ "%r: %r" % (key, value) for (key, value) in vars(self).items()
+ ))
diff --git a/cxmanage_api/tests/test_credentials.py b/cxmanage_api/tests/test_credentials.py
new file mode 100644
index 0000000..19de536
--- /dev/null
+++ b/cxmanage_api/tests/test_credentials.py
@@ -0,0 +1,69 @@
+# Copyright (c) 2012-2013, Calxeda Inc.
+#
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Calxeda Inc. nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+# DAMAGE.
+
+import unittest
+
+from cxmanage_api.credentials import Credentials
+
+
+class TestCredentials(unittest.TestCase):
+ """ Unit tests for the Credentials class """
+ def test_default(self):
+ """ Test default Credentials object """
+ creds = Credentials()
+ self.assertEqual(vars(creds), Credentials.defaults)
+
+ def test_from_dict(self):
+ """ Test Credentials instantiated with a dict """
+ creds = Credentials({"linux_password": "foo"})
+ expected = dict(Credentials.defaults)
+ expected["linux_password"] = "foo"
+ self.assertEqual(vars(creds), expected)
+
+ def test_from_kwargs(self):
+ """ Test Credentials instantiated with kwargs """
+ creds = Credentials(linux_password="foo")
+ expected = dict(Credentials.defaults)
+ expected["linux_password"] = "foo"
+ self.assertEqual(vars(creds), expected)
+
+ def test_from_credentials(self):
+ """ Test Credentials instantiated with other Credentials """
+ creds = Credentials(Credentials(linux_password="foo"))
+ expected = dict(Credentials.defaults)
+ expected["linux_password"] = "foo"
+ self.assertEqual(vars(creds), expected)
+
+ def test_fails_on_invalid(self):
+ """ Test that we don't allow unrecognized credentials """
+ with self.assertRaises(ValueError):
+ Credentials({"desire_to_keep_going": "Very Low"})
+ with self.assertRaises(ValueError):
+ Credentials(magical_mystery_cure="Writing silly strings!")
diff --git a/run_tests b/run_tests
index c121186..aae600f 100755
--- a/run_tests
+++ b/run_tests
@@ -35,9 +35,10 @@ import unittest
import xmlrunner
from cxmanage_api.tests import tftp_test, image_test, node_test, fabric_test, \
- tasks_test, dummy_test
+ tasks_test, dummy_test, test_credentials
test_modules = [
- tftp_test, image_test, node_test, fabric_test, tasks_test, dummy_test
+ tftp_test, image_test, node_test, fabric_test, tasks_test, dummy_test,
+ test_credentials
]
def main():