rate = round(float(self.max_rate + self.min_rate)/2.0, self.RATE_ROUND)
return rate
+ def _get_framesize(self):
+ framesizes = []
+ traffic = self._get_ixia_traffic_profile(self.full_profile)
+ for v in traffic.values():
+ framesize = v['outer_l2']['framesize']
+ for size in (s for s, w in framesize.items() if int(w) != 0):
+ framesizes.append(size)
+ if len(set(framesizes)) == 0:
+ return ''
+ elif len(set(framesizes)) == 1:
+ return framesizes[0]
+ return 'IMIX'
+
def execute_traffic(self, traffic_generator, ixia_obj=None, mac=None):
mac = {} if mac is None else mac
first_run = self.first_run
else:
completed = True
+ last_rate = self.rate
next_rate = self._get_next_rate()
if abs(next_rate - self.rate) < resolution:
LOG.debug("rate=%s, next_rate=%s, resolution=%s", self.rate,
samples['latency_ns_avg'] = latency_ns_avg
samples['latency_ns_min'] = latency_ns_min
samples['latency_ns_max'] = latency_ns_max
+ samples['Rate'] = last_rate
+ samples['PktSize'] = self._get_framesize()
return completed, samples
sum_drop_percent = 100
num_ifaces = len(samples)
duration = self.config.duration
+ last_rate = self.rate
priority_stats = samples.pop('priority_stats')
priority_stats = self._get_prio_flows_drop_percentage(priority_stats)
summary_subs_stats = self._get_summary_pppoe_subs_counters(samples)
samples['latency_ns_min'] = latency_ns_min
samples['latency_ns_max'] = latency_ns_max
samples['priority'] = priority_stats
+ samples['Rate'] = last_rate
+ samples['PktSize'] = self._get_framesize()
samples.update(summary_subs_stats)
if tc_rfc2544_opts:
rfc2544_profile._update_traffic_tracking_options(mock_traffic_gen)
mock_traffic_gen.update_tracking_options.assert_called_once()
+ def test__get_framesize(self):
+ traffic_profile = {
+ 'uplink_0': {'outer_l2': {'framesize': {'64B': 100}}},
+ 'downlink_0': {'outer_l2': {'framesize': {'64B': 100}}},
+ 'uplink_1': {'outer_l2': {'framesize': {'64B': 100}}},
+ 'downlink_1': {'outer_l2': {'framesize': {'64B': 100}}}
+ }
+ rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+ with mock.patch.object(rfc2544_profile, '_get_ixia_traffic_profile') \
+ as mock_get_tp:
+ mock_get_tp.return_value = traffic_profile
+ result = rfc2544_profile._get_framesize()
+ self.assertEqual(result, '64B')
+
+ def test__get_framesize_IMIX_traffic(self):
+ traffic_profile = {
+ 'uplink_0': {'outer_l2': {'framesize': {'64B': 50,
+ '128B': 50}}},
+ 'downlink_0': {'outer_l2': {'framesize': {'64B': 50,
+ '128B': 50}}},
+ 'uplink_1': {'outer_l2': {'framesize': {'64B': 50,
+ '128B': 50}}},
+ 'downlink_1': {'outer_l2': {'framesize': {'64B': 50,
+ '128B': 50}}}
+ }
+ rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+ with mock.patch.object(rfc2544_profile, '_get_ixia_traffic_profile') \
+ as mock_get_tp:
+ mock_get_tp.return_value = traffic_profile
+ result = rfc2544_profile._get_framesize()
+ self.assertEqual(result, 'IMIX')
+
+ def test__get_framesize_zero_pkt_size_weight(self):
+ traffic_profile = {
+ 'uplink_0': {'outer_l2': {'framesize': {'64B': 0}}},
+ 'downlink_0': {'outer_l2': {'framesize': {'64B': 0}}},
+ 'uplink_1': {'outer_l2': {'framesize': {'64B': 0}}},
+ 'downlink_1': {'outer_l2': {'framesize': {'64B': 0}}}
+ }
+ rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+ with mock.patch.object(rfc2544_profile, '_get_ixia_traffic_profile') \
+ as mock_get_tp:
+ mock_get_tp.return_value = traffic_profile
+ result = rfc2544_profile._get_framesize()
+ self.assertEqual(result, '')
+
def test_execute_traffic_first_run(self):
rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
rfc2544_profile.first_run = True
'Store-Forward_Max_latency_ns': 28}
}
rfc2544_profile = ixia_rfc2544.IXIARFC2544Profile(self.TRAFFIC_PROFILE)
+ rfc2544_profile.rate = 100.0
rfc2544_profile._get_next_rate = mock.Mock(return_value=100.0)
+ rfc2544_profile._get_framesize = mock.Mock(return_value='64B')
completed, samples = rfc2544_profile.get_drop_percentage(
samples, 0, 1, 4, 0.1)
self.assertTrue(completed)
self.assertEqual(21.5, samples['latency_ns_avg'])
self.assertEqual(14.0, samples['latency_ns_min'])
self.assertEqual(26.5, samples['latency_ns_max'])
+ self.assertEqual(100.0, samples['Rate'])
+ self.assertEqual('64B', samples['PktSize'])
def test_get_drop_percentage_over_drop_percentage(self):
samples = {'iface_name_1':
def setUp(self):
self.ixia_tp = ixia_rfc2544.IXIARFC2544PppoeScenarioProfile(
self.TRAFFIC_PROFILE)
- self.ixia_tp._get_next_rate = mock.Mock(return_value=0.1)
+ self.ixia_tp.rate = 100.0
+ self.ixia_tp._get_next_rate = mock.Mock(return_value=50.0)
def test___init__(self):
self.assertIsInstance(self.ixia_tp.full_profile,
mock_get_pppoe_subs.return_value = {'sessions_up': 1}
mock_sum_prio_drop_rate.return_value = {'0': {'DropPercentage': 0.0}}
+ self.ixia_tp._get_framesize = mock.Mock(return_value='64B')
status, res = self.ixia_tp.get_drop_percentage(
samples, tol_min=0.0, tolerance=0.0001, precision=0,
resolution=0.1, first_run=True)
self.assertIsNotNone(res.get('priority'))
self.assertIsNotNone(res.get('sessions_up'))
self.assertEqual(res['DropPercentage'], 0.0)
+ self.assertEqual(res['Rate'], 100.0)
+ self.assertEqual(res['PktSize'], '64B')
self.assertTrue(status)
mock_sum_prio_drop_rate.assert_called_once()
mock_get_pppoe_subs.assert_called_once()
mock_tprofile.update_traffic_profile.assert_called_once()
def test_run_test(self):
+ expected_result = {'test': 'fake_samples', 'Iteration': 1}
mock_tprofile = mock.Mock()
mock_tprofile.config.duration = 10
- mock_tprofile.get_drop_percentage.return_value = True, 'fake_samples'
+ mock_tprofile.get_drop_percentage.return_value = \
+ True, {'test': 'fake_samples'}
ixia_rhelper = tg_rfc2544_ixia.IxiaResourceHelper(mock.Mock())
tasks_queue = mock.Mock()
tasks_queue.get.return_value = 'RUN_TRAFFIC'
mock.patch.object(utils, 'wait_until_true'):
ixia_rhelper.run_test(mock_tprofile, tasks_queue, results_queue)
- self.assertEqual('fake_samples', ixia_rhelper._queue.get())
+ self.assertEqual(expected_result, ixia_rhelper._queue.get())
mock_tprofile.update_traffic_profile.assert_called_once()
tasks_queue.task_done.assert_called_once()
results_queue.put.assert_called_once_with('COMPLETE')