@@ -37,6 +37,44 @@ const mockLogger = {
37
37
error : vi . fn ( ) ,
38
38
} ;
39
39
40
+ const mockDummyBackup : Models . Backup = {
41
+ networkOptions : {
42
+ panId : 6755 ,
43
+ extendedPanId : Buffer . from ( 'deadbeef01020304' , 'hex' ) ,
44
+ channelList : [ 11 ] ,
45
+ networkKey : Buffer . from ( 'a1a2a3a4a5a6a7a8b1b2b3b4b5b6b7b8' , 'hex' ) ,
46
+ networkKeyDistribute : false ,
47
+ } ,
48
+ coordinatorIeeeAddress : Buffer . from ( '0102030405060708' , 'hex' ) ,
49
+ logicalChannel : 11 ,
50
+ networkUpdateId : 0 ,
51
+ securityLevel : 5 ,
52
+ znp : {
53
+ version : 1 ,
54
+ } ,
55
+ networkKeyInfo : {
56
+ sequenceNumber : 0 ,
57
+ frameCounter : 10000 ,
58
+ } ,
59
+ devices : [
60
+ {
61
+ networkAddress : 1001 ,
62
+ ieeeAddress : Buffer . from ( 'c1c2c3c4c5c6c7c8' , 'hex' ) ,
63
+ isDirectChild : false ,
64
+ } ,
65
+ {
66
+ networkAddress : 1002 ,
67
+ ieeeAddress : Buffer . from ( 'd1d2d3d4d5d6d7d8' , 'hex' ) ,
68
+ isDirectChild : false ,
69
+ linkKey : {
70
+ key : Buffer . from ( 'f8f7f6f5f4f3f2f1e1e2e3e4e5e6e7e8' , 'hex' ) ,
71
+ rxCounter : 10000 ,
72
+ txCounter : 5000 ,
73
+ } ,
74
+ } ,
75
+ ] ,
76
+ } ;
77
+
40
78
const mockAdapterEvents = { } ;
41
79
const mockAdapterWaitFor = vi . fn ( ) ;
42
80
const mockAdapterSupportsDiscoverRoute = vi . fn ( ) ;
@@ -51,11 +89,12 @@ const mockAdapterReset = vi.fn();
51
89
const mockAdapterStop = vi . fn ( ) ;
52
90
const mockAdapterStart = vi . fn ( ) . mockReturnValue ( 'resumed' ) ;
53
91
const mockAdapterGetCoordinatorIEEE = vi . fn ( ) . mockReturnValue ( '0x0000012300000000' ) ;
54
- const mockAdapterGetNetworkParameters = vi . fn ( ) . mockReturnValue ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 15 } ) ;
92
+ const mockAdapterGetNetworkParameters = vi . fn ( ) . mockReturnValue ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 15 , nwkUpdateID : 0 } ) ;
55
93
const mocksendZclFrameToGroup = vi . fn ( ) ;
56
94
const mocksendZclFrameToAll = vi . fn ( ) ;
57
95
const mockAddInstallCode = vi . fn ( ) ;
58
96
const mocksendZclFrameToEndpoint = vi . fn ( ) ;
97
+ const mockApaterBackup = vi . fn ( ( ) => Promise . resolve ( mockDummyBackup ) ) ;
59
98
let sendZdoResponseStatus = Zdo . Status . SUCCESS ;
60
99
const mockAdapterSendZdo = vi
61
100
. fn ( )
@@ -318,44 +357,6 @@ const getCluster = (key) => {
318
357
return cluster ;
319
358
} ;
320
359
321
- const mockDummyBackup : Models . Backup = {
322
- networkOptions : {
323
- panId : 6755 ,
324
- extendedPanId : Buffer . from ( 'deadbeef01020304' , 'hex' ) ,
325
- channelList : [ 11 ] ,
326
- networkKey : Buffer . from ( 'a1a2a3a4a5a6a7a8b1b2b3b4b5b6b7b8' , 'hex' ) ,
327
- networkKeyDistribute : false ,
328
- } ,
329
- coordinatorIeeeAddress : Buffer . from ( '0102030405060708' , 'hex' ) ,
330
- logicalChannel : 11 ,
331
- networkUpdateId : 0 ,
332
- securityLevel : 5 ,
333
- znp : {
334
- version : 1 ,
335
- } ,
336
- networkKeyInfo : {
337
- sequenceNumber : 0 ,
338
- frameCounter : 10000 ,
339
- } ,
340
- devices : [
341
- {
342
- networkAddress : 1001 ,
343
- ieeeAddress : Buffer . from ( 'c1c2c3c4c5c6c7c8' , 'hex' ) ,
344
- isDirectChild : false ,
345
- } ,
346
- {
347
- networkAddress : 1002 ,
348
- ieeeAddress : Buffer . from ( 'd1d2d3d4d5d6d7d8' , 'hex' ) ,
349
- isDirectChild : false ,
350
- linkKey : {
351
- key : Buffer . from ( 'f8f7f6f5f4f3f2f1e1e2e3e4e5e6e7e8' , 'hex' ) ,
352
- rxCounter : 10000 ,
353
- txCounter : 5000 ,
354
- } ,
355
- } ,
356
- ] ,
357
- } ;
358
-
359
360
let dummyBackup ;
360
361
361
362
vi . mock ( '../src/adapter/z-stack/adapter/zStackAdapter' , ( ) => ( {
@@ -368,9 +369,7 @@ vi.mock('../src/adapter/z-stack/adapter/zStackAdapter', () => ({
368
369
getCoordinatorIEEE : mockAdapterGetCoordinatorIEEE ,
369
370
reset : mockAdapterReset ,
370
371
supportsBackup : mockAdapterSupportsBackup ,
371
- backup : ( ) => {
372
- return mockDummyBackup ;
373
- } ,
372
+ backup : mockApaterBackup ,
374
373
getCoordinatorVersion : ( ) => {
375
374
return { type : 'zStack' , meta : { version : 1 } } ;
376
375
} ,
@@ -1117,7 +1116,27 @@ describe('Controller', () => {
1117
1116
1118
1117
it ( 'Change channel on start' , async ( ) => {
1119
1118
mockAdapterStart . mockReturnValueOnce ( 'resumed' ) ;
1120
- mockAdapterGetNetworkParameters . mockReturnValueOnce ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 25 } ) ;
1119
+ mockAdapterGetNetworkParameters . mockReturnValueOnce ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 25 , nwkUpdateID : 0 } ) ;
1120
+ // @ts -expect-error private
1121
+ const changeChannelSpy = vi . spyOn ( controller , 'changeChannel' ) ;
1122
+ await controller . start ( ) ;
1123
+ expect ( mockAdapterGetNetworkParameters ) . toHaveBeenCalledTimes ( 1 ) ;
1124
+ const zdoPayload = Zdo . Buffalo . buildRequest ( false , Zdo . ClusterId . NWK_UPDATE_REQUEST , [ 15 ] , 0xfe , undefined , 1 , undefined ) ;
1125
+ expect ( mockAdapterSendZdo ) . toHaveBeenCalledWith (
1126
+ ZSpec . BLANK_EUI64 ,
1127
+ ZSpec . BroadcastAddress . SLEEPY ,
1128
+ Zdo . ClusterId . NWK_UPDATE_REQUEST ,
1129
+ zdoPayload ,
1130
+ true ,
1131
+ ) ;
1132
+ mockAdapterGetNetworkParameters . mockReturnValueOnce ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 15 , nwkUpdateID : 1 } ) ;
1133
+ expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' , nwkUpdateID : 1 } ) ;
1134
+ expect ( changeChannelSpy ) . toHaveBeenCalledTimes ( 1 ) ;
1135
+ } ) ;
1136
+
1137
+ it ( 'Change channel on start when nwkUpdateID is 0xff' , async ( ) => {
1138
+ mockAdapterStart . mockReturnValueOnce ( 'resumed' ) ;
1139
+ mockAdapterGetNetworkParameters . mockReturnValueOnce ( { panID : 1 , extendedPanID : '0x64c5fd698daf0c00' , channel : 25 , nwkUpdateID : 0xff } ) ;
1121
1140
// @ts -expect-error private
1122
1141
const changeChannelSpy = vi . spyOn ( controller , 'changeChannel' ) ;
1123
1142
await controller . start ( ) ;
@@ -1130,7 +1149,7 @@ describe('Controller', () => {
1130
1149
zdoPayload ,
1131
1150
true ,
1132
1151
) ;
1133
- expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' } ) ;
1152
+ expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' , nwkUpdateID : 0 } ) ;
1134
1153
expect ( changeChannelSpy ) . toHaveBeenCalledTimes ( 1 ) ;
1135
1154
} ) ;
1136
1155
@@ -1150,9 +1169,9 @@ describe('Controller', () => {
1150
1169
1151
1170
it ( 'Get network parameters' , async ( ) => {
1152
1171
await controller . start ( ) ;
1153
- expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' } ) ;
1172
+ expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' , nwkUpdateID : 0 } ) ;
1154
1173
// cached
1155
- expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' } ) ;
1174
+ expect ( await controller . getNetworkParameters ( ) ) . toEqual ( { panID : 1 , channel : 15 , extendedPanID : '0x64c5fd698daf0c00' , nwkUpdateID : 0 } ) ;
1156
1175
expect ( mockAdapterGetNetworkParameters ) . toHaveBeenCalledTimes ( 1 ) ;
1157
1176
} ) ;
1158
1177
0 commit comments