Exemplo n.º 1
0
def test_slotid_binary_parsing():
    """Make sure we can generate and parse binary descriptors."""

    slot_id = SlotIdentifier.FromString('slot 1')
    assert SlotIdentifier.FromEncoded(slot_id.encode()) == slot_id

    con = SlotIdentifier.FromString('controller')
    assert SlotIdentifier.FromEncoded(con.encode()) == con
Exemplo n.º 2
0
    def start_config_var_entry(self, var_id, encoded_selector):
        """Start a new config variable entry."""

        selector = SlotIdentifier.FromEncoded(encoded_selector)

        err = self.config_database.start_entry(selector, var_id)
        return [err]
Exemplo n.º 3
0
    def FromBinary(cls, record_data, record_count=1):
        """Create an UpdateRecord subclass from binary record data.

        This is a multi-action record that matches a pattern of error checking
        RPC calls:
        begin config
        push config data
        <possibly multiple>
        end config

        Args:
            record_data (bytearray): The raw record data that we wish to parse.
            record_count (int): The number of records included in record_data.

        Raises:
            ArgumentError: If the record_data is malformed and cannot be parsed.

        Returns:
            SetConfigRecord: The decoded tile records.
        """

        rpcs = SendErrorCheckingRPCRecord.parse_multiple_rpcs(record_data)

        start_rpc = rpcs[0]
        push_rpcs = rpcs[1:-1]

        try:
            config_id, raw_target = struct.unpack("<H8s", start_rpc.payload)
            target = SlotIdentifier.FromEncoded(raw_target)
        except ValueError:
            raise ArgumentError("Could not parse payload on begin config rpc",
                                payload=start_rpc.payload)

        payload = bytearray()
        for rpc in push_rpcs:
            payload += rpc.payload

        return SetConfigRecord(target, config_id, payload)