Initial code drop from Cisco
[nfvbench.git] / nfvbench / traffic_gen / dummy.py
diff --git a/nfvbench/traffic_gen/dummy.py b/nfvbench/traffic_gen/dummy.py
new file mode 100644 (file)
index 0000000..dabdc71
--- /dev/null
@@ -0,0 +1,95 @@
+# Copyright 2016 Cisco Systems, Inc.  All rights reserved.
+#
+#    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.
+
+from nfvbench.log import LOG
+
+from traffic_base import AbstractTrafficGenerator
+import traffic_utils as utils
+
+
+
+class DummyTG(AbstractTrafficGenerator):
+    """Experimental dummy traffic generator.
+
+    This traffic generator will pretend to generate traffic and return fake data.
+    Useful for unit testing without actually generating any traffic.
+    """
+
+    def __init__(self, runner):
+        AbstractTrafficGenerator.__init__(self, runner)
+        self.port_handle = []
+        self.rates = []
+
+    def get_version(self):
+        return "0.1"
+
+    def init(self):
+        pass
+
+    def connect(self):
+        ports = list(self.config.generator_config.ports)
+        self.port_handle = ports
+
+    def is_arp_successful(self):
+        return True
+
+    def config_interface(self):
+        pass
+
+    def create_traffic(self, l2frame_size, rates, bidirectional, latency=True):
+        pass
+
+    def modify_rate(self, rate, reverse):
+        port_index = int(reverse)
+        port = self.port_handle[port_index]
+        self.rates[port_index] = utils.to_rate_str(rate)
+        LOG.info('Modified traffic stream for %s, new rate=%s.' % (port, utils.to_rate_str(rate)))
+
+    def clear_streamblock(self):
+        pass
+
+    def get_stats(self):
+        result = {}
+        for ph in self.port_handle:
+            result[ph] = {
+                'tx': {
+                    'total_pkts': 1000,
+                    'total_pkt_bytes': 100000,
+                    'pkt_rate': 100,
+                    'pkt_bit_rate': 1000000
+                },
+                'rx': {
+                    'total_pkts': 1000,
+                    'total_pkt_bytes': 100000,
+                    'pkt_rate': 100,
+                    'pkt_bit_rate': 1000000,
+                    'dropped_pkts': 0
+                }
+            }
+            result[ph]['rx']['max_delay_usec'] = 10.0
+            result[ph]['rx']['min_delay_usec'] = 1.0
+            result[ph]['rx']['avg_delay_usec'] = 2.0
+        return result
+
+    def clear_stats(self):
+        pass
+
+    def start_traffic(self):
+        pass
+
+    def stop_traffic(self):
+        pass
+
+    def cleanup(self):
+        pass