Ejemplo n.º 1
0
def testArgDefn():
    name = 'SEQ_ENABLE_DISABLE'
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.bytes == [0, 1]
    assert arg.desc == None
    assert arg.enum == None
    assert arg.fixed == False
    assert arg.name == 'sequence_id'
    assert arg.nbytes == 2
    assert arg.range == None
    assert arg.slice() == slice(0, 2)
    assert arg.type == dtype.get('MSB_U16')
    assert arg.units == None
    assert arg.value == None

    assert type(repr(arg)) is str

    arg = defn.argdefns[1]
    assert arg.bytes == 2
    assert arg.desc == None
    assert arg.enum == {'DISABLED': 0, 'ENABLED': 1}
    assert arg.fixed == False
    assert arg.name == 'enable'
    assert arg.nbytes == 1
    assert arg.range == None
    assert arg.slice() == slice(2, 3)
    assert arg.type == dtype.get('U8')
    assert arg.units == None
    assert arg.value == None

    assert type(repr(arg)) is str
Ejemplo n.º 2
0
def testCmdDefn():
    name = 'SEQ_ENABLE_DISABLE'
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    assert defn.name == name
    assert defn.opcode == 0x0042
    assert defn.nargs == 2
Ejemplo n.º 3
0
def testArgDefn():
    name = "SEQ_ENABLE_DISABLE"
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.bytes == [0, 1]
    assert arg.desc == None
    assert arg.enum == None
    assert arg.fixed == False
    assert arg.name == "sequence_id"
    assert arg.nbytes == 2
    assert arg.range == None
    assert arg.slice() == slice(0, 2)
    assert arg.type == dtype.get("MSB_U16")
    assert arg.units == None
    assert arg.value == None

    assert type(repr(arg)) is str

    arg = defn.argdefns[1]
    assert arg.bytes == 2
    assert arg.desc == None
    assert arg.enum == {"DISABLED": 0, "ENABLED": 1}
    assert arg.fixed == False
    assert arg.name == "enable"
    assert arg.nbytes == 1
    assert arg.range == None
    assert arg.slice() == slice(2, 3)
    assert arg.type == dtype.get("U8")
    assert arg.units == None
    assert arg.value == None

    assert type(repr(arg)) is str
Ejemplo n.º 4
0
def testArgDefnEncode():
    name = 'SEQ_ENABLE_DISABLE'
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.encode(1234) == struct.pack('>H', 1234)

    arg = defn.argdefns[1]
    assert arg.encode('DISABLED') == struct.pack('>B', 0)
    assert arg.encode('ENABLED') == struct.pack('>B', 1)
    assert arg.encode(2) == struct.pack('>B', 2)
Ejemplo n.º 5
0
def testArgDefnDecode():
    name = 'SEQ_ENABLE_DISABLE'
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.decode(struct.pack('>H', 1234)) == 1234

    arg = defn.argdefns[1]
    assert arg.decode(struct.pack('>B', 0)) == 'DISABLED'
    assert arg.decode(struct.pack('>B', 1)) == 'ENABLED'
    assert arg.decode(struct.pack('>B', 2)) == 2
Ejemplo n.º 6
0
def testArgDefnEncode():
    name = "SEQ_ENABLE_DISABLE"
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.encode(1234) == struct.pack(">H", 1234)

    arg = defn.argdefns[1]
    assert arg.encode("DISABLED") == struct.pack(">B", 0)
    assert arg.encode("ENABLED") == struct.pack(">B", 1)
    assert arg.encode(2) == struct.pack(">B", 2)
Ejemplo n.º 7
0
def testArgDefnDecode():
    name = "SEQ_ENABLE_DISABLE"
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.decode(struct.pack(">H", 1234)) == 1234

    arg = defn.argdefns[1]
    assert arg.decode(struct.pack(">B", 0)) == "DISABLED"
    assert arg.decode(struct.pack(">B", 1)) == "ENABLED"
    assert arg.decode(struct.pack(">B", 2)) == 2
Ejemplo n.º 8
0
def testArgDefnValidate():
    name = 'SEQ_ENABLE_DISABLE'
    defn = cmd.CmdDict(CMDDICT_TEST)[name]

    arg = defn.argdefns[0]
    assert arg.validate(1) == True
    assert arg.validate(1.2) == False

    arg.range = [0, 2]
    assert arg.validate(0) == True
    assert arg.validate(1) == True
    assert arg.validate(2) == True
    assert arg.validate(3) == False

    arg = defn.argdefns[1]
    assert arg.validate('ENABLED') == True
    assert arg.validate('DISABLED') == True
    assert arg.validate('FOOBAR') == False

    msgs = []
    assert arg.validate('FOOBAR', msgs) == False
    assert len(msgs) > 0
Ejemplo n.º 9
0
    def content_val(self, ymldata=None, messages=None):
        """Validates the Command Dictionary to ensure the contents for each of the fields
        meets specific criteria regarding the expected types, byte ranges, etc."""

        self._ymlproc = YAMLProcessor(self._ymlfile, False)

        # Turn off the YAML Processor
        log.debug("BEGIN: Content-based validation of Command dictionary")
        if ymldata is not None:
            cmddict = ymldata
        else:
            cmddict = cmd.CmdDict(self._ymlfile)

        try:
            # instantiate the document number. this will increment in order to
            # track the line numbers and section where validation fails
            docnum = 0

            # boolean to hold argument validity
            argsvalid = True

            # list of rules to validate against
            rules = []

            # set the command rules
            #
            # set uniqueness rule for command names
            rules.append(
                UniquenessRule("name", "Duplicate command name: %s", messages))

            # set uniqueness rule for opcodes
            rules.append(
                UniquenessRule("opcode", "Duplicate opcode: %s", messages))

            for key in cmddict.keys():
                cmddefn = cmddict[key]
                for rule in rules:
                    rule.check(cmddefn)

                # list of argument rules to validate against
                argrules = []

                # set rules for command arguments
                #
                # set uniqueness rule for opcodes
                argrules.append(
                    UniquenessRule(
                        "name",
                        "Duplicate argument name: " + cmddefn.name + ".%s",
                        messages,
                    ))

                # set type rule for arg.type
                argrules.append(
                    TypeRule(
                        "type",
                        "Invalid argument type for argument: " + cmddefn.name +
                        ".%s",
                        messages,
                    ))

                # set argument size rule for arg.type.nbytes
                argrules.append(
                    TypeSizeRule(
                        "nbytes",
                        "Invalid argument size for argument: " + cmddefn.name +
                        ".%s",
                        messages,
                    ))

                # set argument enumerations rule to check no enumerations contain un-quoted YAML special variables
                argrules.append(
                    EnumRule(
                        "enum",
                        "Invalid enum value for argument: " + cmddefn.name +
                        ".%s",
                        messages,
                    ))

                # set byte order rule to ensure proper ordering of aruguments
                argrules.append(
                    ByteOrderRule(
                        "bytes",
                        "Invalid byte order for argument: " + cmddefn.name +
                        ".%s",
                        messages,
                    ))
                #
                ###

                argdefns = cmddefn.argdefns
                for arg in argdefns:
                    # check argument rules
                    for rule in argrules:
                        rule.check(arg)

                # check if argument rule failed, if so set the validity to False
                if not all(r.valid is True for r in argrules):
                    argsvalid = False

            log.debug("END: Content-based validation complete for '%s'",
                      self._ymlfile)

            # check validity of all command rules and argument validity
            return all(rule.valid is True for rule in rules) and argsvalid

        except util.YAMLValidationError as e:
            # Display the error message
            if messages is not None:
                if len(e.message) < 128:
                    msg = ("Validation Failed for YAML file '" +
                           self._ymlfile + "': '" + str(e.message) + "'")
                else:
                    msg = "Validation Failed for YAML file '" + self._ymlfile + "'"

                log.error(msg)
                self.ehandler.process(docnum, self.ehandler.doclines, e,
                                      messages)
                return False