[cert-test] support parsing multiple keys (#11618)

This commit is contained in:
Yakun Xu
2025-06-30 23:48:40 +08:00
committed by GitHub
parent 516a95fca9
commit 38cfb2fddc
26 changed files with 142 additions and 104 deletions
@@ -65,12 +65,12 @@ class Cert_8_1_01_Commissioning(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER: {
'name': 'JOINER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -44,12 +44,12 @@ class Cert_8_1_02_Commissioning(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER: {
'name': 'JOINER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -65,11 +65,11 @@ class Cert_8_1_06_Commissioning(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER: {
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -45,17 +45,17 @@ class Cert_8_2_01_JoinerRouter(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER_ROUTER: {
'name': 'JOINER_ROUTER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
JOINER: {
'name': 'JOINER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -45,17 +45,17 @@ class Cert_8_2_02_JoinerRouter(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER_ROUTER: {
'name': 'JOINER_ROUTER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
JOINER: {
'name': 'JOINER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -71,17 +71,17 @@ class Cert_8_2_05_JoinerRouter(thread_cert.TestCase):
TOPOLOGY = {
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
JOINER_ROUTER: {
'name': 'JOINER_ROUTER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
JOINER: {
'name': 'JOINER',
'networkkey': 'deadbeefdeadbeefdeadbeefdeadbeef',
'network_key': 'deadbeefdeadbeefdeadbeefdeadbeef',
'mode': 'rdn',
},
}
@@ -66,12 +66,12 @@ class Cert_8_3_01_CommissionerPetition(thread_cert.TestCase):
TOPOLOGY = {
LEADER: {
'name': 'LEADER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
COMMISSIONER: {
'name': 'COMMISSIONER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
}
@@ -116,7 +116,7 @@ class Cert_9_2_11_NetworkKey(thread_cert.TestCase):
'name': 'ED',
'channel': CHANNEL_INIT,
'is_mtd': True,
'networkkey': KEY1,
'network_key': KEY1,
'mode': 'rn',
'panid': PANID_INIT,
'allowlist': [ROUTER1]
@@ -125,7 +125,7 @@ class Cert_9_2_11_NetworkKey(thread_cert.TestCase):
'name': 'SED',
'channel': CHANNEL_INIT,
'is_mtd': True,
'networkkey': KEY1,
'network_key': KEY1,
'mode': '-',
'panid': PANID_INIT,
'timeout': config.DEFAULT_CHILD_TIMEOUT,
@@ -92,7 +92,7 @@ class Cert_9_2_18_RollBackActiveTimestamp(thread_cert.TestCase):
'name': 'ED',
'channel': CHANNEL_INIT,
'is_mtd': True,
'networkkey': KEY1,
'network_key': KEY1,
'mode': 'rn',
'panid': PANID_INIT,
'allowlist': [ROUTER1]
@@ -101,7 +101,7 @@ class Cert_9_2_18_RollBackActiveTimestamp(thread_cert.TestCase):
'name': 'SED',
'channel': CHANNEL_INIT,
'is_mtd': True,
'networkkey': KEY1,
'network_key': KEY1,
'mode': '-',
'panid': PANID_INIT,
'timeout': config.DEFAULT_CHILD_TIMEOUT,
@@ -183,7 +183,7 @@ class PublishMeshCopService(thread_cert.TestCase):
'channel_mask': config.CHANNEL_MASK,
'extended_panid': config.EXTENDED_PANID,
'mesh_local_prefix': config.MESH_LOCAL_PREFIX.split('/')[0],
'network_key': binascii.hexlify(config.DEFAULT_NETWORK_KEY).decode(),
'network_key': config.DEFAULT_NETWORK_KEY,
'network_name': 'ot-br-1-3',
'panid': config.PANID,
'pskc': config.PSKC,
+25 -40
View File
@@ -85,24 +85,7 @@ ONLINK_GUA_PREFIX = '2021::/64'
# Any address starts with 'fd' are considered on-link address.
ONLINK_PREFIX_REGEX_PATTERN = '^fd'
DEFAULT_NETWORK_KEY = bytearray([
0x00,
0x11,
0x22,
0x33,
0x44,
0x55,
0x66,
0x77,
0x88,
0x99,
0xaa,
0xbb,
0xcc,
0xdd,
0xee,
0xff,
])
DEFAULT_NETWORK_KEY = '00112233445566778899aabbccddeeff'
class ADDRESS_TYPE(Enum):
@@ -309,15 +292,13 @@ def create_default_mle_tlvs_factories():
}
def create_default_mle_crypto_engine(network_key):
return net_crypto.CryptoEngine(crypto_material_creator=net_crypto.MleCryptoMaterialCreator(network_key))
def create_default_mle_message_factory(network_key):
def create_default_mle_message_factory(key_manager=None):
key_manager = key_manager or create_default_thread_key_manager()
key_manager.add_key(bytes.fromhex(DEFAULT_NETWORK_KEY))
return mle.MleMessageFactory(
aux_sec_hdr_factory=net_crypto.AuxiliarySecurityHeaderFactory(),
mle_command_factory=mle.MleCommandFactory(tlvs_factories=create_default_mle_tlvs_factories()),
crypto_engine=create_default_mle_crypto_engine(network_key),
crypto_engines=key_manager.mle_crypto_engines,
)
@@ -469,8 +450,8 @@ def create_default_ipv6_hop_by_hop_options_factory():
return ipv6.HopByHopOptionsFactory(options_factories=create_default_ipv6_hop_by_hop_options_factories())
def create_default_based_on_src_dst_ports_udp_payload_factory(network_key):
mle_message_factory = create_default_mle_message_factory(network_key)
def create_default_based_on_src_dst_ports_udp_payload_factory(key_manager):
mle_message_factory = create_default_mle_message_factory(key_manager)
coap_message_factory = create_default_coap_message_factory()
dtls_message_factory = create_default_dtls_message_factory()
@@ -497,12 +478,12 @@ def create_default_ipv6_icmp_body_factories():
}
def create_default_ipv6_upper_layer_factories(network_key):
def create_default_ipv6_upper_layer_factories(key_manager):
return {
ipv6.IPV6_NEXT_HEADER_UDP:
ipv6.UDPDatagramFactory(
udp_header_factory=ipv6.UDPHeaderFactory(),
udp_payload_factory=create_default_based_on_src_dst_ports_udp_payload_factory(network_key),
udp_payload_factory=create_default_based_on_src_dst_ports_udp_payload_factory(key_manager),
),
ipv6.IPV6_NEXT_HEADER_ICMP:
ipv6.ICMPv6Factory(body_factories=create_default_ipv6_icmp_body_factories()),
@@ -523,10 +504,10 @@ def create_default_ipv6_extension_headers_factories():
}
def create_default_ipv6_packet_factory(network_key):
def create_default_ipv6_packet_factory(key_manager):
return ipv6.IPv6PacketFactory(
ehf=create_default_ipv6_extension_headers_factories(),
ulpf=create_default_ipv6_upper_layer_factories(network_key),
ulpf=create_default_ipv6_upper_layer_factories(key_manager),
)
@@ -546,27 +527,31 @@ def create_default_thread_context_manager():
return context_manager
def create_default_lowpan_parser(context_manager, network_key=DEFAULT_NETWORK_KEY):
def create_default_lowpan_parser(context_manager, key_manager):
return lowpan.LowpanParser(
lowpan_mesh_header_factory=lowpan.LowpanMeshHeaderFactory(),
lowpan_decompressor=create_default_lowpan_decompressor(context_manager),
lowpan_fragements_buffers_manager=lowpan.LowpanFragmentsBuffersManager(),
ipv6_packet_factory=create_default_ipv6_packet_factory(network_key),
ipv6_packet_factory=create_default_ipv6_packet_factory(key_manager),
)
def create_default_thread_message_factory(network_key=DEFAULT_NETWORK_KEY):
def create_default_thread_key_manager():
return message.KeyManager()
def create_default_thread_message_factory(key_manager):
context_manager = create_default_thread_context_manager()
lowpan_parser = create_default_lowpan_parser(context_manager, network_key)
lowpan_parser = create_default_lowpan_parser(context_manager, key_manager)
return message.MessageFactory(lowpan_parser=lowpan_parser)
return message.MessageFactory(lowpan_parser, key_manager)
def create_default_thread_sniffer(use_message_factory=True):
return sniffer.Sniffer(create_default_thread_message_factory() if use_message_factory else None)
def create_default_thread_sniffer(message_factory=None):
return sniffer.Sniffer(message_factory)
def create_default_simulator(use_message_factory=True):
def create_default_simulator(message_factory=None):
if VIRTUAL_TIME:
return simulator.VirtualTime(use_message_factory=use_message_factory)
return simulator.RealTime(use_message_factory=use_message_factory)
return simulator.VirtualTime(message_factory)
return simulator.RealTime(message_factory)
+15 -3
View File
@@ -165,7 +165,7 @@ class MacFrame:
IEEE802154_VERSION_2015 = 0x02
def parse(self, data):
def parse(self, data, mac_crypto_engines=set()):
"""Parse a MAC 802.15.4 frame
Format of MAC 802.15.4 Frame:
@@ -346,8 +346,20 @@ class MacFrame:
else:
message_info.source_mac_address = src_address.mac_address
sec_obj = CryptoEngine(MacCryptoMaterialCreator(config.DEFAULT_NETWORK_KEY))
self.payload = MacPayload(bytearray(open_payload) + sec_obj.decrypt(private_payload, mic, message_info))
if len(mac_crypto_engines) == 0:
mac_crypto_engines.add(
CryptoEngine(MacCryptoMaterialCreator(bytes.fromhex(config.DEFAULT_NETWORK_KEY))))
error = None
for engine in mac_crypto_engines:
try:
self.payload = MacPayload(
bytearray(open_payload) + engine.decrypt(private_payload, mic, message_info))
break
except ValueError as e:
error = e
else:
raise ValueError("Unable to decrypt MAC payload") from error
else:
self.payload = MacPayload(payload)
+20 -2
View File
@@ -38,6 +38,12 @@ import ipv6
import mac802154
import mle
from net_crypto import (
CryptoEngine,
MacCryptoMaterialCreator,
MleCryptoMaterialCreator,
)
from enum import IntEnum
@@ -554,10 +560,22 @@ class MessagesSet(object):
return str(self.messages)
class KeyManager:
def __init__(self):
self.mac_crypto_engines = set()
self.mle_crypto_engines = set()
def add_key(self, key):
self.mac_crypto_engines.add(CryptoEngine(MacCryptoMaterialCreator(key)))
self.mle_crypto_engines.add(CryptoEngine(MleCryptoMaterialCreator(key)))
class MessageFactory:
def __init__(self, lowpan_parser):
def __init__(self, lowpan_parser, key_manager):
self._lowpan_parser = lowpan_parser
self.key_manager = key_manager
def _add_device_descriptors(self, message):
for tlv in message.mle.command.tlvs:
@@ -570,7 +588,7 @@ class MessageFactory:
def _parse_mac_frame(self, data):
mac_frame = mac802154.MacFrame()
mac_frame.parse(data)
mac_frame.parse(data, self.key_manager.mac_crypto_engines)
return mac_frame
def set_lowpan_context(self, cid, prefix):
+15 -5
View File
@@ -1281,20 +1281,30 @@ class MleMessageSecured(MleMessage):
class MleMessageFactory:
def __init__(self, aux_sec_hdr_factory, mle_command_factory, crypto_engine):
def __init__(self, aux_sec_hdr_factory, mle_command_factory, crypto_engines):
self._aux_sec_hdr_factory = aux_sec_hdr_factory
self._mle_command_factory = mle_command_factory
self._crypto_engine = crypto_engine
self._crypto_engines = crypto_engines
def _create_mle_secured_message(self, data, message_info):
aux_sec_hdr = self._aux_sec_hdr_factory.parse(data, message_info)
enc_data_length = len(data.getvalue())
enc_data = bytearray(data.read(enc_data_length - data.tell() - self._crypto_engine.mic_length))
mic = bytearray(data.read())
raw = data.read(enc_data_length - data.tell())
dec_data = self._crypto_engine.decrypt(enc_data, mic, message_info)
error = None
for crypto_engine in self._crypto_engines:
enc_data = bytearray(raw[0:-crypto_engine.mic_length])
mic = bytearray(raw[-crypto_engine.mic_length:])
try:
dec_data = crypto_engine.decrypt(enc_data, mic, message_info)
break
except ValueError as e:
error = e
else:
raise ValueError("Failed to parse MLE message") from error
command = self._mle_command_factory.parse(io.BytesIO(dec_data), message_info)
+4
View File
@@ -45,6 +45,10 @@ class CryptoEngine:
"""
self._crypto_material_creator = crypto_material_creator
@property
def key(self):
return self._crypto_material_creator.network_key
@property
def mic_length(self):
return self._crypto_material_creator.mic_length
+4
View File
@@ -1737,6 +1737,7 @@ class NodeImpl:
cmd = 'networkkey %s' % networkkey
self.send_command(cmd)
self._expect_done()
self.simulator.add_network_key(network_key)
def get_key_sequence_counter(self):
self.send_command('keysequence counter')
@@ -2728,6 +2729,7 @@ class NodeImpl:
cmd = 'dataset networkkey %s' % network_key
self.send_command(cmd, go=False)
self._expect_done()
self.simulator.add_network_key(network_key)
if network_name is not None:
cmd = 'dataset networkname %s' % network_name
@@ -2863,6 +2865,7 @@ class NodeImpl:
if network_key is not None:
cmd += 'networkkey %s ' % network_key
self.simulator.add_network_key(network_key)
if mesh_local is not None:
cmd += 'localprefix %s ' % mesh_local
@@ -2940,6 +2943,7 @@ class NodeImpl:
if network_key is not None:
cmd += 'networkkey %s ' % network_key
self.simulator.add_network_key(network_key)
if mesh_local is not None:
cmd += 'localprefix %s ' % mesh_local
+12 -10
View File
@@ -52,15 +52,20 @@ def dbg_print(*args):
class BaseSimulator(object):
def __init__(self):
def __init__(self, message_factory):
self._nodes = {}
self.commissioning_messages = {}
self._payload_parse_factory = mesh_cop.MeshCopCommandFactory(mesh_cop.create_default_mesh_cop_tlv_factories())
self._mesh_cop_msg_set = mesh_cop.create_mesh_cop_message_type_set()
self._message_factory = message_factory
def __del__(self):
self._nodes = None
def add_network_key(self, network_key):
if self._message_factory:
self._message_factory.key_manager.add_key(bytes.fromhex(network_key))
def add_node(self, node):
self._nodes[node.nodeid] = node
self.commissioning_messages[node.nodeid] = []
@@ -93,9 +98,9 @@ class BaseSimulator(object):
class RealTime(BaseSimulator):
def __init__(self, use_message_factory=True):
super(RealTime, self).__init__()
self._sniffer = config.create_default_thread_sniffer(use_message_factory=use_message_factory)
def __init__(self, message_factory=None):
super().__init__(message_factory)
self._sniffer = config.create_default_thread_sniffer(message_factory)
self._sniffer.start()
def set_lowpan_context(self, cid, prefix):
@@ -158,8 +163,8 @@ class VirtualTime(BaseSimulator):
_message_factory = None
def __init__(self, use_message_factory=True):
super().__init__()
def __init__(self, message_factory=None):
super().__init__(message_factory)
self.port = self.BASE_PORT + (self.PORT_OFFSET * (self.MAX_NODES + 1))
@@ -203,10 +208,7 @@ class VirtualTime(BaseSimulator):
self.current_nodeid = None
self._pause_time = 0
if use_message_factory:
self._message_factory = config.create_default_thread_message_factory()
else:
self._message_factory = None
self._message_factory = message_factory
def __del__(self):
if self.sock:
+1 -1
View File
@@ -36,7 +36,7 @@ import thread_cert
class TestDiag(thread_cert.TestCase):
SUPPORT_NCP = False
TOPOLOGY = {1: None}
TOPOLOGY = {1: {}}
def test(self):
node = self.nodes[1]
+2 -2
View File
@@ -1723,7 +1723,7 @@ class TestMleMessageFactory(unittest.TestCase):
0x27, 0xc2, 0x96, 0xf4, 0x9c, 0x65, 0x82, 0x97, 0xcf, 0x97, 0x35, 0x89, 0xc2
])
factory = config.create_default_mle_message_factory(network_key=config.DEFAULT_NETWORK_KEY)
factory = config.create_default_mle_message_factory()
# WHEN
actual_mle_message = factory.parse(io.BytesIO(data), message_info)
@@ -1773,7 +1773,7 @@ class TestMleMessageFactory(unittest.TestCase):
0x94, 0x01, 0x6d, 0x20, 0xdf, 0x30, 0x82, 0xf8, 0xbb, 0x34, 0x47, 0x42, 0x50, 0xe9, 0x41, 0xa7, 0x33, 0xa5
])
factory = config.create_default_mle_message_factory(network_key=config.DEFAULT_NETWORK_KEY)
factory = config.create_default_mle_message_factory()
# WHEN
actual_mle_message = factory.parse(io.BytesIO(data), message_info)
@@ -64,12 +64,12 @@ class SrpClientChangeLeaseTime(thread_cert.TestCase):
TOPOLOGY = {
SERVER: {
'name': 'SRP_SERVER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
CLIENT: {
'name': 'SRP_CLIENT',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
}
@@ -59,22 +59,22 @@ class SrpAutoStartMode(thread_cert.TestCase):
TOPOLOGY = {
CLIENT: {
'name': 'SRP_CLIENT',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
SERVER1: {
'name': 'SRP_SERVER1',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rn',
},
SERVER2: {
'name': 'SRP_SERVER2',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rn',
},
SERVER3: {
'name': 'SRP_SERVER3',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rn',
},
}
+2 -2
View File
@@ -58,12 +58,12 @@ class SrpRegisterSingleService(thread_cert.TestCase):
TOPOLOGY = {
SERVER: {
'name': 'SRP_SERVER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
CLIENT: {
'name': 'SRP_CLIENT',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
}
@@ -57,17 +57,17 @@ class SrpNameConflicts(thread_cert.TestCase):
TOPOLOGY = {
SERVER: {
'name': 'SRP_SERVER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
CLIENT1: {
'name': 'SRP_CLIENT1',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
CLIENT2: {
'name': 'SRP_CLIENT2',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
}
@@ -56,12 +56,12 @@ class SrpRegisterSingleService(thread_cert.TestCase):
TOPOLOGY = {
SERVER: {
'name': 'SRP_SERVER',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
CLIENT: {
'name': 'SRP_CLIENT',
'networkkey': '00112233445566778899aabbccddeeff',
'network_key': '00112233445566778899aabbccddeeff',
'mode': 'rdn',
},
}
+8 -5
View File
@@ -97,7 +97,7 @@ class TestCase(NcpSupportMixin, unittest.TestCase):
"""
USE_MESSAGE_FACTORY = True
TOPOLOGY = None
TOPOLOGY = {}
CASE_WIRESHARK_PREFS = None
SUPPORT_THREAD_1_1 = True
PACKET_VERIFICATION = config.PACKET_VERIFICATION_DEFAULT
@@ -142,7 +142,10 @@ class TestCase(NcpSupportMixin, unittest.TestCase):
"""
self._clean_up_tmp()
self.simulator = config.create_default_simulator(use_message_factory=self.USE_MESSAGE_FACTORY)
key_manager = config.create_default_thread_key_manager()
self.simulator = config.create_default_simulator(
config.create_default_thread_message_factory(key_manager) if self.USE_MESSAGE_FACTORY else None)
self.nodes = {}
os.environ['LD_LIBRARY_PATH'] = '/tmp/thread-wireshark'
@@ -255,7 +258,7 @@ class TestCase(NcpSupportMixin, unittest.TestCase):
'channel_mask': config.CHANNEL_MASK,
'extended_panid': config.EXTENDED_PANID,
'mesh_local_prefix': config.MESH_LOCAL_PREFIX.split('/')[0],
'network_key': binascii.hexlify(config.DEFAULT_NETWORK_KEY).decode(),
'network_key': config.DEFAULT_NETWORK_KEY,
'network_name': config.NETWORK_NAME,
'panid': config.PANID,
'pskc': config.PSKC,
@@ -264,8 +267,8 @@ class TestCase(NcpSupportMixin, unittest.TestCase):
if 'channel' in params:
dataset['channel'] = params['channel']
if 'networkkey' in params:
dataset['network_key'] = params['networkkey']
if 'network_key' in params:
dataset['network_key'] = params['network_key']
if 'network_name' in params:
dataset['network_name'] = params['network_name']
if 'panid' in params:
+1 -1
View File
@@ -82,7 +82,7 @@ class TestOTCI(unittest.TestCase):
import simulator
if VIRTUAL_TIME:
sim = simulator.VirtualTime(use_message_factory=False)
sim = simulator.VirtualTime()
else:
sim = None