Skip to content

Commit 531ee12

Browse files
authored
Handle handler error during initialisation (#1440)
* Handle handler error during initialisation Signed-off-by: Chris Jackson <[email protected]> * Fix tests Signed-off-by: Chris Jackson <[email protected]> --------- Signed-off-by: Chris Jackson <[email protected]>
1 parent c038c6f commit 531ee12

File tree

3 files changed

+84
-3
lines changed

3 files changed

+84
-3
lines changed

com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzsp.java

+20-2
Original file line numberDiff line numberDiff line change
@@ -457,22 +457,40 @@ public ZigBeeStatus initialize() {
457457
stackConfigurer.setPolicy(stackPolicies);
458458
policies = stackConfigurer.getPolicy(stackPolicies.keySet());
459459
for (Entry<EzspPolicyId, Integer> policy : policies.entrySet()) {
460-
EzspDecisionId decisionId = EzspDecisionId.getEzspDecisionId(policy.getValue());
460+
EzspDecisionId decisionId = null;
461+
try {
462+
decisionId = EzspDecisionId.getEzspDecisionId(policy.getValue());
463+
} catch (Exception e) {
464+
// Eat me!
465+
// This is only for logging.
466+
}
461467
logger.debug("Policy state {} = {} [{}]", policy.getKey(), decisionId,
462468
String.format("%02X", policy.getValue()));
463469
}
464470

465471
EmberNcp ncp = getEmberNcp();
466472

467473
// Get the current network parameters so that any configuration updates start from here
468-
networkParameters = ncp.getNetworkParameters().getParameters();
474+
EzspGetNetworkParametersResponse networkParametersResponse = ncp.getNetworkParameters();
475+
if (networkParametersResponse == null) {
476+
return ZigBeeStatus.COMMUNICATION_ERROR;
477+
}
478+
EmberNetworkParameters localNetworkParameters = networkParametersResponse.getParameters();
479+
if (localNetworkParameters != null) {
480+
networkParameters = localNetworkParameters;
481+
}
469482
logger.debug("Ember initial network parameters are {}", networkParameters);
470483

471484
ieeeAddress = ncp.getIeeeAddress();
472485
logger.debug("Ember local IEEE Address is {}", ieeeAddress);
473486

474487
ncp.getNetworkParameters();
475488

489+
if (!frameHandler.isAlive()) {
490+
logger.error("Ember frame handler is not alive after initialize!");
491+
return ZigBeeStatus.COMMUNICATION_ERROR;
492+
}
493+
476494
isConfigured = true;
477495
logger.debug("EZSP Dongle: initialize done");
478496

com.zsmartsystems.zigbee.dongle.ember/src/test/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzspTest.java

+51
Original file line numberDiff line numberDiff line change
@@ -728,4 +728,55 @@ public EmberNcp getEmberNcp() {
728728
assertNull(dongle.getTcLinkKey());
729729
assertNotNull(dongle.getZigBeeNetworkKey());
730730
}
731+
732+
@Test
733+
public void initializeNoNetorkParameters() {
734+
System.out.println("--- " + Thread.currentThread().getStackTrace()[1].getMethodName());
735+
final EmberNcp ncp = Mockito.mock(EmberNcp.class);
736+
final EzspVersionResponse version = Mockito.mock(EzspVersionResponse.class);
737+
Mockito.when(version.getProtocolVersion()).thenReturn(4);
738+
739+
Mockito.when(ncp.getVersion()).thenReturn(version);
740+
741+
final ZigBeePort port = Mockito.mock(ZigBeePort.class);
742+
Mockito.when(port.open()).thenReturn(true);
743+
744+
ZigBeeDongleEzsp dongle = new ZigBeeDongleEzsp(port) {
745+
@Override
746+
public EmberNcp getEmberNcp() {
747+
return ncp;
748+
}
749+
};
750+
751+
final ZigBeeTransportReceive receiver = Mockito.mock(ZigBeeTransportReceive.class);
752+
753+
dongle.setZigBeeTransportReceive(receiver);
754+
assertEquals(ZigBeeStatus.COMMUNICATION_ERROR, dongle.initialize());
755+
}
756+
757+
@Test
758+
public void initializeSuccess() {
759+
System.out.println("--- " + Thread.currentThread().getStackTrace()[1].getMethodName());
760+
final EmberNcp ncp = Mockito.mock(EmberNcp.class);
761+
final EzspVersionResponse version = Mockito.mock(EzspVersionResponse.class);
762+
Mockito.when(version.getProtocolVersion()).thenReturn(4);
763+
764+
Mockito.when(ncp.getVersion()).thenReturn(version);
765+
Mockito.when(ncp.getNetworkParameters()).thenReturn(Mockito.mock(EzspGetNetworkParametersResponse.class));
766+
767+
final ZigBeePort port = Mockito.mock(ZigBeePort.class);
768+
Mockito.when(port.open()).thenReturn(true);
769+
770+
ZigBeeDongleEzsp dongle = new ZigBeeDongleEzsp(port) {
771+
@Override
772+
public EmberNcp getEmberNcp() {
773+
return ncp;
774+
}
775+
};
776+
777+
final ZigBeeTransportReceive receiver = Mockito.mock(ZigBeeTransportReceive.class);
778+
779+
dongle.setZigBeeTransportReceive(receiver);
780+
assertEquals(ZigBeeStatus.SUCCESS, dongle.initialize());
781+
}
731782
}

com.zsmartsystems.zigbee.dongle.ember/src/test/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeTransportTransmitTest.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.zsmartsystems.zigbee.TestUtilities;
1616
import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspGetNetworkParametersResponse;
1717
import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspGetParentChildParametersResponse;
18+
import com.zsmartsystems.zigbee.dongle.ember.ezsp.command.EzspVersionResponse;
1819
import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberCurrentSecurityState;
1920
import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberNetworkParameters;
2021
import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EmberNetworkStatus;
@@ -24,6 +25,7 @@
2425
import com.zsmartsystems.zigbee.dongle.ember.ezsp.structure.EzspStatus;
2526
import com.zsmartsystems.zigbee.dongle.ember.internal.EzspProtocolHandler;
2627
import com.zsmartsystems.zigbee.transport.ZigBeePort;
28+
import com.zsmartsystems.zigbee.transport.ZigBeeTransportReceive;
2729
import com.zsmartsystems.zigbee.transport.ZigBeeTransportTransmitAbstractTest;
2830

2931
/**
@@ -52,6 +54,11 @@ public void initialiseTransport() throws Exception {
5254
Mockito.when(ncp.setRadioPower(ArgumentMatchers.anyInt())).thenReturn(EmberStatus.EMBER_SUCCESS);
5355
Mockito.when(ncp.getNwkAddress()).thenReturn(Integer.valueOf(0));
5456
Mockito.when(ncp.getIeeeAddress()).thenReturn(new IeeeAddress("1234567890ABCDEF"));
57+
final EzspVersionResponse version = Mockito.mock(EzspVersionResponse.class);
58+
Mockito.when(version.getProtocolVersion()).thenReturn(4);
59+
60+
Mockito.when(ncp.getVersion()).thenReturn(version);
61+
Mockito.when(ncp.getNetworkParameters()).thenReturn(Mockito.mock(EzspGetNetworkParametersResponse.class));
5562

5663
ZigBeePort port = Mockito.mock(ZigBeePort.class);
5764
Mockito.when(port.open()).thenReturn(Boolean.TRUE);
@@ -62,8 +69,13 @@ public EmberNcp getEmberNcp() {
6269
return ncp;
6370
}
6471
};
72+
EzspProtocolHandler frameHandler = Mockito.mock(EzspProtocolHandler.class);
73+
Mockito.when(frameHandler.isAlive()).thenReturn(Boolean.TRUE);
74+
TestUtilities.setField(ZigBeeDongleEzsp.class, dongle, "frameHandler", frameHandler);
75+
76+
final ZigBeeTransportReceive receiver = Mockito.mock(ZigBeeTransportReceive.class);
6577

66-
TestUtilities.setField(ZigBeeDongleEzsp.class, dongle, "frameHandler", Mockito.mock(EzspProtocolHandler.class));
78+
dongle.setZigBeeTransportReceive(receiver);
6779

6880
transport = dongle;
6981
}

0 commit comments

Comments
 (0)