Add Flags class to base.Context 53/52653/3
authorEmma Foley <emma.l.foley@intel.com>
Mon, 26 Feb 2018 11:25:34 +0000 (11:25 +0000)
committerEmma Foley <emma.l.foley@intel.com>
Wed, 28 Feb 2018 10:20:46 +0000 (10:20 +0000)
This patch adds a Flags class to represent the flags passed to
the context.

Flags will contain a set of attributes (for example no_setup and no_teardown).
Those attributes will modify the behaviour of the context.

The attributes added initially are:
* 'no_setup' (default: False)
* 'no_teardown' (default: False)

In future patches, they will be used by the context to:
* Change the name of the context.
* Skip the deploy() and undeploy() methods to keep the VNFs active after the
  testcases are run.

JIRA: YARDSTICK-886
Change-Id: I734b082aa101649eea8991304a8b753ae96aa9de
Signed-off-by: Rodolfo Alonso Hernandez <rodolfo.alonso.hernandez@intel.com>
Signed-off-by: Emma Foley <emma.l.foley@intel.com>
yardstick/benchmark/contexts/base.py
yardstick/tests/unit/benchmark/contexts/test_base.py [new file with mode: 0644]

index c9b5b51..20c160c 100644 (file)
@@ -6,13 +6,36 @@
 # which accompanies this distribution, and is available at
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
-from __future__ import absolute_import
 import abc
 import six
 
 import yardstick.common.utils as utils
 
 
+class Flags(object):
+    """Class to represent the status of the flags in a context"""
+
+    _FLAGS = {'no_setup': False,
+              'no_teardown': False}
+
+    def __init__(self, **kwargs):
+        for name, value in self._FLAGS.items():
+            setattr(self, name, value)
+
+        for name, value in ((name, value) for (name, value) in kwargs.items()
+                            if name in self._FLAGS):
+            setattr(self, name, value)
+
+    def parse(self, **kwargs):
+        """Read in values matching the flags stored in this object"""
+        if not kwargs:
+            return
+
+        for name, value in ((name, value) for (name, value) in kwargs.items()
+                            if name in self._FLAGS):
+            setattr(self, name, value)
+
+
 @six.add_metaclass(abc.ABCMeta)
 class Context(object):
     """Class that represents a context in the logical model"""
diff --git a/yardstick/tests/unit/benchmark/contexts/test_base.py b/yardstick/tests/unit/benchmark/contexts/test_base.py
new file mode 100644 (file)
index 0000000..153c6a5
--- /dev/null
@@ -0,0 +1,43 @@
+# Copyright (c) 2018 Intel Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+
+from yardstick.benchmark.contexts import base
+
+
+class FlagsTestCase(unittest.TestCase):
+
+    def setUp(self):
+        self.flags = base.Flags()
+
+    def test___init__(self):
+        self.assertFalse(self.flags.no_setup)
+        self.assertFalse(self.flags.no_teardown)
+
+    def test___init__with_flags(self):
+        flags = base.Flags(no_setup=True)
+        self.assertTrue(flags.no_setup)
+        self.assertFalse(flags.no_teardown)
+
+    def test_parse(self):
+        self.flags.parse(no_setup=True, no_teardown="False")
+
+        self.assertTrue(self.flags.no_setup)
+        self.assertEqual(self.flags.no_teardown, "False")
+
+    def test_parse_forbidden_flags(self):
+        self.flags.parse(foo=42)
+        with self.assertRaises(AttributeError):
+            _ = self.flags.foo