99
1010import static org .junit .Assert .assertEquals ;
1111
12- import java .lang .reflect .Field ;
13- import java .lang .reflect .Modifier ;
1412import java .util .Map ;
1513import java .util .concurrent .ConcurrentHashMap ;
1614
2018
2119import com .zsmartsystems .zigbee .ExtendedPanId ;
2220import com .zsmartsystems .zigbee .IeeeAddress ;
21+ import com .zsmartsystems .zigbee .TestUtilities ;
22+ import com .zsmartsystems .zigbee .ZigBeeApsFrame ;
2323import com .zsmartsystems .zigbee .ZigBeeNodeStatus ;
24+ import com .zsmartsystems .zigbee .ZigBeeNwkAddressMode ;
25+ import com .zsmartsystems .zigbee .ZigBeeProfileType ;
26+ import com .zsmartsystems .zigbee .dongle .telegesis .internal .TelegesisFrameHandler ;
2427import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisAckMessageEvent ;
2528import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisDeviceJoinedNetworkEvent ;
2629import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisDeviceLeftNetworkEvent ;
2730import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisNackMessageEvent ;
2831import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisNetworkJoinedEvent ;
2932import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisNetworkLeftEvent ;
3033import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisNetworkLostEvent ;
34+ import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisSendMulticastCommand ;
35+ import com .zsmartsystems .zigbee .dongle .telegesis .internal .protocol .TelegesisSendUnicastCommand ;
3136import com .zsmartsystems .zigbee .transport .ZigBeeTransportProgressState ;
3237import com .zsmartsystems .zigbee .transport .ZigBeeTransportReceive ;
3338import com .zsmartsystems .zigbee .transport .ZigBeeTransportState ;
4146public class ZigBeeDongleTelegesisTest {
4247 private static int TIMEOUT = 5000 ;
4348
44- protected void setField (Class clazz , Object object , String fieldName , Object newValue ) throws Exception {
45- Field field = clazz .getDeclaredField (fieldName );
46- field .setAccessible (true );
47- Field modifiersField = Field .class .getDeclaredField ("modifiers" );
48- modifiersField .setAccessible (true );
49- modifiersField .setInt (field , field .getModifiers () & ~Modifier .FINAL );
50- field .set (object , newValue );
51- }
52-
5349 @ Test
5450 public void setZigBeeExtendedPanId () {
5551 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
@@ -87,7 +83,7 @@ public void testTelegesisAckMessageEvent() throws Exception {
8783 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
8884 dongle .setZigBeeTransportReceive (transport );
8985
90- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
86+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
9187
9288 TelegesisAckMessageEvent response = Mockito .mock (TelegesisAckMessageEvent .class );
9389 Mockito .when (response .getMessageId ()).thenReturn (123 );
@@ -98,7 +94,7 @@ public void testTelegesisAckMessageEvent() throws Exception {
9894
9995 Map <Integer , Integer > messageIdMap = new ConcurrentHashMap <>();
10096 messageIdMap .put (123 , 44 );
101- setField (ZigBeeDongleTelegesis .class , dongle , "messageIdMap" , messageIdMap );
97+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "messageIdMap" , messageIdMap );
10298
10399 dongle .telegesisEventReceived (response );
104100 Mockito .verify (transport , Mockito .timeout (TIMEOUT )).receiveCommandStatus (44 ,
@@ -112,7 +108,7 @@ public void testTelegesisNackMessageEvent() throws Exception {
112108 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
113109 dongle .setZigBeeTransportReceive (transport );
114110
115- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
111+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
116112
117113 TelegesisNackMessageEvent response = Mockito .mock (TelegesisNackMessageEvent .class );
118114 Mockito .when (response .getMessageId ()).thenReturn (123 );
@@ -123,7 +119,7 @@ public void testTelegesisNackMessageEvent() throws Exception {
123119
124120 Map <Integer , Integer > messageIdMap = new ConcurrentHashMap <>();
125121 messageIdMap .put (123 , 44 );
126- setField (ZigBeeDongleTelegesis .class , dongle , "messageIdMap" , messageIdMap );
122+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "messageIdMap" , messageIdMap );
127123
128124 dongle .telegesisEventReceived (response );
129125 Mockito .verify (transport , Mockito .timeout (TIMEOUT )).receiveCommandStatus (44 ,
@@ -137,7 +133,7 @@ public void testTelegesisDeviceJoinedNetworkEvent() throws Exception {
137133 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
138134 dongle .setZigBeeTransportReceive (transport );
139135
140- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
136+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
141137
142138 TelegesisDeviceJoinedNetworkEvent response = Mockito .mock (TelegesisDeviceJoinedNetworkEvent .class );
143139 Mockito .when (response .getNetworkAddress ()).thenReturn (123 );
@@ -155,7 +151,7 @@ public void testTelegesisDeviceLeftNetworkEvent() throws Exception {
155151 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
156152 dongle .setZigBeeTransportReceive (transport );
157153
158- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
154+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
159155
160156 TelegesisDeviceLeftNetworkEvent response = Mockito .mock (TelegesisDeviceLeftNetworkEvent .class );
161157 Mockito .when (response .getNetworkAddress ()).thenReturn (123 );
@@ -173,7 +169,7 @@ public void testTelegesisNetworkLeftEvent() throws Exception {
173169 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
174170 dongle .setZigBeeTransportReceive (transport );
175171
176- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
172+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
177173
178174 TelegesisNetworkLeftEvent response = Mockito .mock (TelegesisNetworkLeftEvent .class );
179175 dongle .telegesisEventReceived (response );
@@ -188,7 +184,7 @@ public void testTelegesisNetworkLostEvent() throws Exception {
188184 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
189185 dongle .setZigBeeTransportReceive (transport );
190186
191- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
187+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
192188
193189 TelegesisNetworkLostEvent response = Mockito .mock (TelegesisNetworkLostEvent .class );
194190 dongle .telegesisEventReceived (response );
@@ -203,11 +199,53 @@ public void testTelegesisNetworkJoinedEvent() throws Exception {
203199 ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
204200 dongle .setZigBeeTransportReceive (transport );
205201
206- setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
202+ TestUtilities . setField (ZigBeeDongleTelegesis .class , dongle , "startupComplete" , true );
207203
208204 TelegesisNetworkJoinedEvent response = Mockito .mock (TelegesisNetworkJoinedEvent .class );
209205 dongle .telegesisEventReceived (response );
210206
211207 Mockito .verify (transport , Mockito .timeout (TIMEOUT )).setNetworkState (ZigBeeTransportState .ONLINE );
212208 }
209+
210+ @ Test
211+ public void sendCommandUnicast () throws Exception {
212+ ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
213+ TelegesisFrameHandler handler = Mockito .mock (TelegesisFrameHandler .class );
214+
215+ TestUtilities .setField (ZigBeeDongleTelegesis .class , dongle , "frameHandler" , handler );
216+
217+ ZigBeeApsFrame apsFrame = new ZigBeeApsFrame ();
218+ apsFrame .setCluster (0 );
219+ apsFrame .setProfile (ZigBeeProfileType .ZIGBEE_HOME_AUTOMATION .getKey ());
220+ apsFrame .setAddressMode (ZigBeeNwkAddressMode .DEVICE );
221+ apsFrame .setDestinationAddress (1234 );
222+ apsFrame .setApsCounter (1 );
223+ apsFrame .setRadius (30 );
224+ apsFrame .setPayload (new int [] {});
225+
226+ dongle .sendCommand (apsFrame );
227+ Mockito .verify (handler , Mockito .timeout (TIMEOUT ).times (1 ))
228+ .sendRequest (ArgumentMatchers .any (TelegesisSendUnicastCommand .class ));
229+ }
230+
231+ @ Test
232+ public void sendCommandBroadcast () throws Exception {
233+ ZigBeeDongleTelegesis dongle = new ZigBeeDongleTelegesis (null );
234+ TelegesisFrameHandler handler = Mockito .mock (TelegesisFrameHandler .class );
235+
236+ TestUtilities .setField (ZigBeeDongleTelegesis .class , dongle , "frameHandler" , handler );
237+
238+ ZigBeeApsFrame apsFrame = new ZigBeeApsFrame ();
239+ apsFrame .setCluster (0 );
240+ apsFrame .setProfile (ZigBeeProfileType .ZIGBEE_HOME_AUTOMATION .getKey ());
241+ apsFrame .setAddressMode (ZigBeeNwkAddressMode .DEVICE );
242+ apsFrame .setDestinationAddress (0xfff9 );
243+ apsFrame .setApsCounter (1 );
244+ apsFrame .setRadius (30 );
245+ apsFrame .setPayload (new int [] {});
246+
247+ dongle .sendCommand (apsFrame );
248+ Mockito .verify (handler , Mockito .timeout (TIMEOUT ).times (1 ))
249+ .sendRequest (ArgumentMatchers .any (TelegesisSendMulticastCommand .class ));
250+ }
213251}
0 commit comments