Merge "docs: Update install and release docs for DPDK migration support"
[samplevnf.git] / VNFs / DPPD-PROX / helper-scripts / dpi / testerset.py
1 #!/bin/env python
2
3 ##
4 ## Copyright (c) 2010-2017 Intel Corporation
5 ##
6 ## Licensed under the Apache License, Version 2.0 (the "License");
7 ## you may not use this file except in compliance with the License.
8 ## You may obtain a copy of the License at
9 ##
10 ##     http://www.apache.org/licenses/LICENSE-2.0
11 ##
12 ## Unless required by applicable law or agreed to in writing, software
13 ## distributed under the License is distributed on an "AS IS" BASIS,
14 ## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 ## See the License for the specific language governing permissions and
16 ## limitations under the License.
17 ##
18
19 from proxdpitester import *
20
21 class testerSet:
22     def __init__(self, test_systems, maxRate, testParam):
23         self._test_systems = [];
24         self._reason = ""
25         self._maxRate = maxRate
26
27         testParamPerSystem = testParam.getPerSystem(len(test_systems));
28
29         for i in range(len(test_systems)):
30             ts = test_systems[i];
31             to_add = ProxDpiTester(ts, testParamPerSystem, i);
32             self.add_test_system(to_add);
33
34     def getCount(self):
35         return len(self._test_systems);
36
37     def add_test_system(self, test_system):
38         self._test_systems.append(test_system);
39
40     def startFork(self):
41         print "Starting test systems:"
42         for ts in self._test_systems:
43             print "\t" + str(ts.getIP())
44             ts.startFork();
45
46     def startJoin(self):
47         for ts in self._test_systems:
48             elapsed = ts.startJoin();
49             if (elapsed == None):
50                 print "Failed to start on " + str(ts.getIP())
51             else:
52                 print "Started on " + str(ts.getIP())
53         sleep(1);
54
55     def startForkJoin(self):
56         self.startFork();
57         self.startJoin();
58
59     def update_stats(self):
60         for ts in self._test_systems:
61             ts.update_stats();
62
63     def wait_links_up(self):
64         for ts in self._test_systems:
65             ts.waitAllLinksUp();
66         sleep(1);
67
68     def start_cores(self):
69         for ts in self._test_systems:
70             ts.start_all_ld();
71             ts.waitCmdFinished();
72         for ts in self._test_systems:
73             ts.start_all_workers();
74         for ts in self._test_systems:
75             ts.waitCmdFinished();
76
77     def stop_cores(self):
78         for ts in self._test_systems:
79             ts.stop_all_workers();
80             ts.stop_all_ld();
81
82         for ts in self._test_systems:
83             ts.waitCmdFinished();
84
85     def getTsc(self):
86         ret = []
87         for ts in self._test_systems:
88             ret += [ts.getTsc()]
89         return ret;
90
91     def get_setup_rate(self):
92         total = 0;
93         for ts in self._test_systems:
94             total += ts.getCurrentSetupRate();
95         return total
96
97     def get_total_connections(self):
98         total = 0;
99         for ts in self._test_systems:
100             ts_tot_conn = ts.get_total_connections();
101             total += ts_tot_conn
102
103         return total;
104
105     def get_total_retx(self):
106         total = 0;
107         for ts in self._test_systems:
108             total += ts.get_total_retx();
109         return total;
110
111     def getIerrors(self):
112         total = 0;
113         for ts in self._test_systems:
114             total += ts.getIerrorsCached();
115         return total;
116
117     def get_rates(self):
118         rates = [];
119         for ts in self._test_systems:
120             rates += ts.get_rates_client_ports();
121         return rates;
122
123     def tx_rate_meassurement(self):
124         rates = []
125         for ts in self._test_systems:
126             rates += ts.tx_rate_meassurement();
127         return rates;
128
129     def scpStatsDump(self, dst):
130         ret = []
131         for i in range(len(self._test_systems)):
132             dstFileName = dst + str(i);
133             ret.append(dstFileName);
134             self._test_systems[i].scpStatsDump(dstFileName)
135         return ret;
136
137     def conditionsGood(self):
138         tot_retx = self.get_total_retx();
139         rates = self.get_rates();
140         ierrors = self.getIerrors();
141
142         if (tot_retx > 100):
143             self._reason = "Too many reTX (" + str(tot_retx) + ")"
144             return False;
145         if (ierrors > 0):
146             self._reason = "Too many ierrors (" + str(ierrors) + ")"
147             return False;
148         for i in range(0, len(rates)):
149             if (rates[i] > self._maxRate):
150                 self._setReason(i, rates)
151                 return False;
152         return True;
153
154     def _setReason(self, port, rates):
155         portStr = str(port);
156         rateStr = str(rates[port])
157         maxRateStr = str(self._maxRate);
158         allRatesStr = str(rates);
159
160         fmt = "Rate on port %s = %s > %s, rate on all = %s"
161         self._reason = fmt % (portStr, rateStr, maxRateStr, allRatesStr)
162
163     def getReason(self):
164         return self._reason;
165
166     def quitProx(self):
167         for ts in self._test_systems:
168             ts.quitProx();
169
170     def killProx(self):
171         for ts in self._test_systems:
172             ts.stop_all_workers();
173         for ts in self._test_systems:
174             ts.stop_all_ld();
175         for ts in self._test_systems:
176             ts.killProx();