From 760710869405dbc3b5dadd6ce06015c72ea2ca44 Mon Sep 17 00:00:00 2001 From: Dan Klein Date: Sun, 30 Aug 2015 13:59:07 +0300 Subject: another stateless progress --- .../client_utils/packet_builder.py | 61 +++++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/scripts/automation/trex_control_plane/client_utils/packet_builder.py b/scripts/automation/trex_control_plane/client_utils/packet_builder.py index 172dcda2..0d31f28e 100644 --- a/scripts/automation/trex_control_plane/client_utils/packet_builder.py +++ b/scripts/automation/trex_control_plane/client_utils/packet_builder.py @@ -79,6 +79,13 @@ class CTRexPktBuilder(object): def add_vm_variable(self, name): if name not in self.vm_variables.keys(): self.vm_variables[name] = self.CTRexVMVariable(name) + else: + raise CTRexPktBuilder.VMVarNameExistsError(name) + + def set_vm_var_field(self, var_name, field_name, val): + pass + return self.vm_variables[var_name].set_field(field_name, val) + def fix_checksum_ipv4(self): pass @@ -91,8 +98,7 @@ class CTRexPktBuilder(object): def dump(self): return [var.dump() - for var in self.vm_variables - if var.is_validty()] + for var in self.vm_variables] class CTRexVMVariable(object): VALID_SIZE = [1, 2, 4, 8] @@ -110,6 +116,25 @@ class CTRexPktBuilder(object): self.min_addr = str(self.init_addr) self.max_addr = str(self.init_addr) + def set_field(self, field_name, val): + if field_name == "size": + if type(val) != int: + raise CTRexPktBuilder.VMVarFieldTypeError("size", int) + elif val not in self.VALID_SIZE: + raise CTRexPktBuilder.VMVarValueError("size", self.VALID_SIZE) + elif field_name == "type": + if type(val) != str: + raise CTRexPktBuilder.VMVarFieldTypeError("type", str) + elif val not in self.VALID_TYPE: + raise CTRexPktBuilder.VMVarValueError("type", self.VALID_TYPE) + elif field_name == "core_mask": + if type(val) != str: + raise CTRexPktBuilder.VMVarFieldTypeError("core_mask", str) + elif val not in self.VALID_TYPE: + raise CTRexPktBuilder.VMVarValueError("core_mask", self.VALID_CORE_MASK) + # update field value on success + setattr(self, field_name, val) + def is_valid(self): if self.size not in self.VALID_SIZE: return False @@ -152,6 +177,38 @@ class CTRexPktBuilder(object): self.message = message or self._default_message super(CTRexPktBuilder.IPAddressError, self).__init__(-11, self.message) + class VMVarNameExistsError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, message=''): + self._default_message = 'The given VM name ({0})already exists as part of the stream.'.format(name) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-21, self.message) + + class VMVarFieldTypeError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, ok_type, message=''): + self._default_message = 'The desired value of field {field_name} is of type {field_type}, \ + and not of the allowed {allowed_type}.'.format(field_name=name, + field_type=type(name).__name__, + allowed_type=ok_type.__name__) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarNameExistsError, self).__init__(-31, self.message) + + class VMVarValueError(CPacketBuildException): + """ + This exception is used to indicate an error on the IP addressing part of the packet. + """ + def __init__(self, name, ok_opts, message=''): + self._default_message = 'The desired value of field {field_name} is illegal.\n \ + The only allowed options are: {allowed_opts}.'.format(field_name=name, + allowed_opts=ok_opts) + self.message = message or self._default_message + super(CTRexPktBuilder.VMVarValueError, self).__init__(-32, self.message) + if __name__ == "__main__": pass -- cgit 1.2.3-korg