Merge "Change "KubernetesObject" class name to "ReplicationController""
[yardstick.git] / yardstick / network_services / traffic_profile / base.py
index ad256b4..f4b5b17 100644 (file)
 # 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.
-""" Base class for the generic traffic profile implementation """
 
-from __future__ import absolute_import
-from yardstick.common.utils import import_modules_from_package, itersubclasses
+from yardstick.common import exceptions
+from yardstick.common import utils
+
+
+class TrafficProfileConfig(object):
+    """Class to contain the TrafficProfile class information
+
+    This object will parse and validate the traffic profile information.
+    """
+
+    DEFAULT_SCHEMA = 'nsb:traffic_profile:0.1'
+    DEFAULT_FRAME_RATE = 100
+    DEFAULT_DURATION = 30
+
+    def __init__(self, tp_config):
+        self.schema = tp_config.get('schema', self.DEFAULT_SCHEMA)
+        self.name = tp_config.get('name')
+        self.description = tp_config.get('description')
+        tprofile = tp_config['traffic_profile']
+        self.traffic_type = tprofile.get('traffic_type')
+        self.frame_rate = tprofile.get('frame_rate', self.DEFAULT_FRAME_RATE)
+        self.test_precision = tprofile.get('test_precision')
+        self.packet_sizes = tprofile.get('packet_sizes')
+        self.duration = tprofile.get('duration', self.DEFAULT_DURATION)
+        self.lower_bound = tprofile.get('lower_bound')
+        self.upper_bound = tprofile.get('upper_bound')
+        self.step_interval = tprofile.get('step_interval')
 
 
 class TrafficProfile(object):
@@ -33,20 +57,20 @@ class TrafficProfile(object):
         :return:
         """
         profile_class = tp_config["traffic_profile"]["traffic_type"]
-        import_modules_from_package(
-            "yardstick.network_services.traffic_profile")
         try:
-            return next(c for c in itersubclasses(TrafficProfile)
+            return next(c for c in utils.itersubclasses(TrafficProfile)
                         if c.__name__ == profile_class)(tp_config)
         except StopIteration:
-            raise RuntimeError("No implementation for %s", profile_class)
+            raise exceptions.TrafficProfileNotImplemented(
+                profile_class=profile_class)
 
     def __init__(self, tp_config):
         # e.g. RFC2544 start_ip, stop_ip, drop_rate,
         # IMIX = {"10K": 0.1, "100M": 0.5}
         self.params = tp_config
+        self.config = TrafficProfileConfig(tp_config)
 
-    def execute_traffic(self, traffic_generator):
+    def execute_traffic(self, traffic_generator, **kawrgs):
         """ This methods defines the behavior of the traffic generator.
         It will be called in a loop until the traffic generator exits.