From 8f1101df131a4d3e03b377738507d88b745831c0 Mon Sep 17 00:00:00 2001 From: "Yiting.Li" Date: Tue, 22 Dec 2015 17:11:12 -0800 Subject: Upload the contribution of vstf as bottleneck network framework. End to End Performance test JIRA:BOTTLENECK-29 Change-Id: Ib2c553c8b60d6cda9e7a7b52b737c9139f706ebd Signed-off-by: Yiting.Li --- vstf/vstf/controller/unittest/test_perf.py | 120 +++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100755 vstf/vstf/controller/unittest/test_perf.py (limited to 'vstf/vstf/controller/unittest/test_perf.py') diff --git a/vstf/vstf/controller/unittest/test_perf.py b/vstf/vstf/controller/unittest/test_perf.py new file mode 100755 index 00000000..5a54b826 --- /dev/null +++ b/vstf/vstf/controller/unittest/test_perf.py @@ -0,0 +1,120 @@ +#!/usr/bin/python +# -*- coding: utf8 -*- +# author: wly +# date: 2015-10-30 +# see license for license details + +import unittest +import os +import logging + +from vstf.controller.unittest import model +from vstf.controller.settings.flows_settings import FlowsSettings +from vstf.controller.settings.tool_settings import ToolSettings +from vstf.controller.settings.perf_settings import PerfSettings +from vstf.controller.sw_perf.perf_provider import PerfProvider +from vstf.controller.sw_perf.flow_producer import FlowsProducer +from vstf.controller.settings.tester_settings import TesterSettings +from vstf.controller.env_build.env_build import EnvBuildApi as Builder +from vstf.common.log import setup_logging +import vstf.controller.sw_perf.performance as pf + +LOG = logging.getLogger(__name__) + + +class TestPerf(model.Test): + + def setUp(self): + LOG.info("start performance unit test.") + super(TestPerf, self).setUp() + self.dir = os.path.dirname(__file__) + self.perf_path = os.path.join(self.dir, '../../../etc/vstf/perf') + self.base_path = os.path.join(self.dir, '../../../etc/vstf/env') + + def teardown(self): + LOG.info("stop performance unit test.") + + @unittest.skip('for now') + def test_batch_perf(self): + + LOG.info(self.perf_path) + LOG.info(self.base_path) + perf_settings = PerfSettings(path=self.perf_path) + flows_settings = FlowsSettings(path=self.perf_path) + tool_settings = ToolSettings(path=self.base_path) + tester_settings = TesterSettings(path=self.base_path) + flow_producer = FlowsProducer(self.conn, flows_settings) + provider = PerfProvider(flows_settings.settings, tool_settings.settings, tester_settings.settings) + perf = pf.Performance(self.conn, provider) + tests = perf_settings.settings + for scenario, cases in tests.items(): + if not cases: + continue + + config_file = os.path.join(self.base_path, scenario + '.json') + + LOG.info(config_file) + + env = Builder(self.conn, config_file) + env.build() + + for case in cases: + casetag = case['case'] + tool = case['tool'] + protocol = case['protocol'] + profile = case['profile'] + ttype = case['type'] + sizes = case['sizes'] + + flow_producer.create(scenario, casetag) + result = perf.run(tool, protocol, ttype, sizes) + self.assertEqual(True, isinstance(result, dict)) + LOG.info(result) + + @unittest.skip('for now') + def test_perf_settings(self): + perf_settings = PerfSettings() + self.assertEqual(True, perf_settings.input()) + + def test_tool_settings(self): + tool_settings = ToolSettings() + value = { + "time": 20, + "threads": 1 + } + tool_settings.set_pktgen(value) + tool_settings.set_netperf(value) + tool_settings.set_iperf(value) + tool_settings.set_qperf(value) + LOG.info(tool_settings.settings) + + def test_flow_settings(self): + tests = { + "Tn": ["Tn-1", "Tn-2", "Tn-3", "Tn-4"], + "Tnv": ["Tnv-1", "Tnv-2", "Tnv-3", "Tnv-4"], + "Ti": ["Ti-1", "Ti-2", "Ti-3", "Ti-4", "Ti-5", "Ti-6"], + "Tu": ["Tu-1", "Tu-2", "Tu-3", "Tu-4", "Tu-5", "Tu-6"] + } + flows_settings = FlowsSettings(path=self.perf_path) + flow_producer = FlowsProducer(self.conn, flows_settings) + + for scenario, cases in tests.items(): + if not cases: + continue + + config_file = os.path.join(self.base_path, scenario + '.json') + + LOG.info(config_file) + + env = Builder(self.conn, config_file) + env.build() + + for case in cases: + LOG.info(case) + flow_producer.create(scenario, case) + LOG.info(flows_settings.settings) + + +if __name__ == "__main__": + setup_logging(level=logging.INFO, log_file="/var/log/vstf/vstf-unit-test.log", clevel=logging.INFO) + unittest.main() \ No newline at end of file -- cgit 1.2.3-korg