X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FDropRateSearch.py;h=6346125592cf69d273a7109ec1029bb5a80b1183;hp=8f8e371adde70faaad406f08ec938f34697acaee;hb=490256818796108eb9fc169fc477517c490c5d6a;hpb=3be854caa158bd5f150b6e0f50981ec2da73473a diff --git a/resources/libraries/python/DropRateSearch.py b/resources/libraries/python/DropRateSearch.py index 8f8e371add..6346125592 100644 --- a/resources/libraries/python/DropRateSearch.py +++ b/resources/libraries/python/DropRateSearch.py @@ -98,6 +98,15 @@ class DropRateSearch(object): self._search_result = None self._search_result_rate = None + @abstractmethod + def get_latency(self): + """Return min/avg/max latency. + + :return: Latency stats. + :rtype: list + """ + pass + @abstractmethod def measure_loss(self, rate, frame_size, loss_acceptance, loss_acceptance_type, traffic_type): @@ -135,6 +144,49 @@ class DropRateSearch(object): self._rate_max = float(max_rate) self._rate_min = float(min_rate) + def set_loss_acceptance(self, loss_acceptance): + """Set loss acceptance treshold for PDR search. + + :param loss_acceptance: Loss acceptance treshold for PDR search. + :type loss_acceptance: str + :return: nothing + """ + if float(loss_acceptance) < 0: + raise ValueError("Loss acceptance must be higher or equal 0") + else: + self._loss_acceptance = float(loss_acceptance) + + def get_loss_acceptance(self): + """Return configured loss acceptance treshold. + + :return: Loss acceptance treshold. + :rtype: float + """ + return self._loss_acceptance + + def set_loss_acceptance_type_percentage(self): + """Set loss acceptance treshold type to percentage. + + :return: nothing + """ + self._loss_acceptance_type = LossAcceptanceType.PERCENTAGE + + def set_loss_acceptance_type_frames(self): + """Set loss acceptance treshold type to frames. + + :return: nothing + """ + self._loss_acceptance_type = LossAcceptanceType.FRAMES + + def loss_acceptance_type_is_percentage(self): + """Return true if loss acceptance treshold type is percentage, + false otherwise. + + :return: True if loss acceptance treshold type is percentage. + :rtype: boolean + """ + return self._loss_acceptance_type == LossAcceptanceType.PERCENTAGE + def set_search_linear_step(self, step_rate): """Set step size for linear search. @@ -410,14 +462,14 @@ class DropRateSearch(object): def verify_search_result(self): """Fail if search was not successful. - :return: Result rate. - :rtype: float + :return: Result rate and latency stats. + :rtype: tuple """ if self._search_result == SearchResults.FAILURE: raise Exception('Search FAILED') elif self._search_result in [SearchResults.SUCCESS, SearchResults.SUSPICIOUS]: - return self._search_result_rate + return self._search_result_rate, self.get_latency() def binary_search(self, b_min, b_max, traffic_type, skip_max_rate=False): """Binary search of rate with loss below acceptance criteria.