[thci] fix wrong call to .lstrip('0x') (#4383)

Wpanctl THCI might return the wrong RLOC address when RLOC16 == 0 due
to incorrect call to .lstrip('0x').  We use .lstrip('0x') to strip
'0x' at the beginning of a hex string, however this is not correct
when the hex string is '0x0', because '0x0'.lstrip('0x') == ''

This commit fixes all incorrect calls to .lstrip('0x'). There are 3
different kinds of fix:

- s.lstrip('0x') replaced by self.__lstrip0x(s) (lstrip_0x is a
  correct implementation of stripping '0x' at the beginning of a
  string)

- hex(v).rstrip('L').lstrip('0x') replaced by '%x' % v

- hex(v).lstrip('0x').zfill(4) replaced by '%04x' % v
This commit is contained in:
Simon Lin
2019-12-10 08:56:52 -08:00
committed by Jonathan Hui
parent eb2c2dfb26
commit 6275173bab
2 changed files with 48 additions and 28 deletions
+22 -7
View File
@@ -503,7 +503,7 @@ class OpenThread(IThci):
IPv6 address dotted-quad format
"""
prefix1 = strIp6Prefix.rstrip('L')
prefix2 = prefix1.lstrip('0x')
prefix2 = self.__lstrip0x(prefix1)
hexPrefix = str(prefix2).ljust(16, '0')
hexIter = iter(hexPrefix)
finalMac = ':'.join(
@@ -1432,7 +1432,7 @@ class OpenThread(IThci):
euiStr = euiStr.rstrip('L')
address64 = ''
if '0x' in euiStr:
address64 = euiStr.lstrip('0x')
address64 = self.__lstrip0x(euiStr)
# prepend 0 at the beginning
if len(address64) < 16:
address64 = address64.zfill(16)
@@ -2410,7 +2410,7 @@ class OpenThread(IThci):
cmd += Addr
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
cmd += ' binary '
cmd += tlvs
@@ -2509,7 +2509,7 @@ class OpenThread(IThci):
ModuleHelper.Default_XpanId,
ModuleHelper.Default_NwkName,
)
pskc = hex(stretchedPskc).rstrip('L').lstrip('0x')
pskc = '%x' % stretchedPskc
if len(pskc) < 32:
pskc = pskc.zfill(32)
@@ -2605,7 +2605,7 @@ class OpenThread(IThci):
cmd += Addr
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
cmd += ' binary '
cmd += tlvs
@@ -2707,7 +2707,7 @@ class OpenThread(IThci):
cmd = 'commissioner mgmtget'
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
cmd += ' binary '
cmd += tlvs
@@ -2761,7 +2761,7 @@ class OpenThread(IThci):
if xChannelTlv is not None:
cmd += ' binary '
cmd += '000300' + hex(xChannelTlv).lstrip('0x').zfill(4)
cmd += '000300' + '%04x' % xChannelTlv
print(cmd)
@@ -2869,3 +2869,18 @@ class OpenThread(IThci):
return True
else:
return False
@staticmethod
def __lstrip0x(s):
"""strip 0x at the beginning of a hex string if it exists
Args:
s: hex string
Returns:
hex string with leading 0x stripped
"""
if s.startswith('0x'):
s = s[2:]
return s
+26 -21
View File
@@ -663,7 +663,7 @@ class OpenThread_WpanCtl(IThci):
IPv6 address dotted-quad format
"""
prefix1 = strIp6Prefix.rstrip('L')
prefix2 = prefix1.lstrip('0x')
prefix2 = self.__lstrip0x(prefix1)
hexPrefix = str(prefix2).ljust(16, '0')
hexIter = iter(hexPrefix)
finalMac = ':'.join(
@@ -1104,9 +1104,7 @@ class OpenThread_WpanCtl(IThci):
)[0]
)
mlprefix = prefix.split('/')[0]
rloc16 = self.__sendCommand(WPANCTL_CMD + 'getprop -v Thread:RLOC16')[
0
].lstrip('0x')
rloc16 = self.__lstrip0x(self.__sendCommand(WPANCTL_CMD + 'getprop -v Thread:RLOC16')[0])
print('prefix: %s' % prefix)
print('mlprefix: %s ' % mlprefix)
print('rloc16: %s' % rloc16)
@@ -2617,7 +2615,7 @@ class OpenThread_WpanCtl(IThci):
cmd = WPANCTL_CMD + 'dataset mgmt-get-active'
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
setTLVCmd = WPANCTL_CMD + 'setprop Dataset:RawTlvs ' + tlvs
if self.__sendCommand(setTLVCmd)[0] == 'Fail':
return False
@@ -2678,9 +2676,7 @@ class OpenThread_WpanCtl(IThci):
return False
if listActiveTimestamp is not None:
sActiveTimestamp = str(hex(listActiveTimestamp[0]))
if len(sActiveTimestamp) < 18:
sActiveTimestamp = sActiveTimestamp.lstrip('0x').zfill(16)
sActiveTimestamp = '%016x' % listActiveTimestamp[0]
setActiveTimeCmd = (
WPANCTL_CMD
+ 'setprop Dataset:ActiveTimestamp '
@@ -2767,7 +2763,7 @@ class OpenThread_WpanCtl(IThci):
ModuleHelper.Default_XpanId,
ModuleHelper.Default_NwkName,
)
pskc = hex(stretchedPskc).rstrip('L').lstrip('0x')
pskc = '%x' % stretchedPskc
if len(pskc) < 32:
pskc = pskc.zfill(32)
@@ -2863,7 +2859,7 @@ class OpenThread_WpanCtl(IThci):
cmd = WPANCTL_CMD + 'dataset mgmt-get-pending'
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
setTLVCmd = WPANCTL_CMD + 'setprop Dataset:RawTlvs ' + tlvs
if self.__sendCommand(setTLVCmd)[0] == 'Fail':
return False
@@ -2916,9 +2912,7 @@ class OpenThread_WpanCtl(IThci):
return False
if listPendingTimestamp is not None:
sActiveTimestamp = str(hex(listPendingTimestamp[0]))
if len(sActiveTimestamp) < 18:
sActiveTimestamp = sActiveTimestamp.lstrip('0x').zfill(16)
sActiveTimestamp = '%016x' % listPendingTimestamp[0]
setPendingTimeCmd = (
WPANCTL_CMD
+ 'setprop Dataset:PendingTimestamp '
@@ -2928,9 +2922,7 @@ class OpenThread_WpanCtl(IThci):
return False
if listActiveTimestamp is not None:
sActiveTimestamp = str(hex(listActiveTimestamp[0]))
if len(sActiveTimestamp) < 18:
sActiveTimestamp = sActiveTimestamp.lstrip('0x').zfill(16)
sActiveTimestamp = '%016x' % listActiveTimestamp[0]
setActiveTimeCmd = (
WPANCTL_CMD
+ 'setprop Dataset:ActiveTimestamp '
@@ -3012,7 +3004,7 @@ class OpenThread_WpanCtl(IThci):
print(TLVs)
if len(TLVs) != 0:
tlvs = ''.join(hex(tlv).lstrip('0x').zfill(2) for tlv in TLVs)
tlvs = ''.join('%02x' % tlv for tlv in TLVs)
cmd += tlvs
print(cmd)
@@ -3057,9 +3049,7 @@ class OpenThread_WpanCtl(IThci):
elif xCommissionerSessionID is None:
# use original session id
if self.isActiveCommissioner is True:
cmd += '0b02' + self.__getCommissionerSessionId().lstrip(
'0x'
)
cmd += '0b02' + self.__lstrip0x(self.__getCommissionerSessionId())
else:
pass
@@ -3074,7 +3064,7 @@ class OpenThread_WpanCtl(IThci):
cmd += '0902' + str(hex(xBorderRouterLocator))
if xChannelTlv is not None:
cmd += '000300' + hex(xChannelTlv).lstrip('0x').zfill(4)
cmd += '000300' + '%04x' % xChannelTlv
print(cmd)
@@ -3177,3 +3167,18 @@ class OpenThread_WpanCtl(IThci):
return True
else:
return False
@staticmethod
def __lstrip0x(s):
"""strip 0x at the beginning of a hex string if it exists
Args:
s: hex string
Returns:
hex string with leading 0x stripped
"""
if s.startswith('0x'):
s = s[2:]
return s