@@ -12,10 +12,123 @@ export interface Lock
12
12
root : string
13
13
}
14
14
15
+ export function methodTesterNotBlocking ( info : TestInfo , isValid : TestCallback , callbackLocked : ( port : number , user2 : string , cb : ( ) => void ) => void ) : void
16
+ {
17
+ const server1 = info . init ( 3 ) ;
18
+
19
+ starter ( server1 , info , isValid , 'folder/folder2/folder3/folder4/file' , 0 , true , ( lock , user1 , user2 ) => {
20
+ callbackLocked ( server1 . options . port , user2 , ( ) => {
21
+ isValid ( true ) ;
22
+ } )
23
+ } )
24
+
25
+ const server2 = info . startServer ( ) ;
26
+ starter ( server2 , info , isValid , 'folder' , - 1 , true , ( lock , user1 , user2 ) => {
27
+ callbackLocked ( server2 . options . port , user2 , ( ) => {
28
+ isValid ( true ) ;
29
+ } )
30
+ } )
31
+
32
+ const server3 = info . startServer ( ) ;
33
+ starter ( server3 , info , isValid , 'folder/folder2/folder3/folder4' , 1 , true , ( lock , user1 , user2 ) => {
34
+ callbackLocked ( server3 . options . port , user2 , ( ) => {
35
+ isValid ( true ) ;
36
+ } )
37
+ } )
38
+ }
39
+
40
+ export function methodTesterBlocking ( info : TestInfo , isValid : TestCallback , callbackLocked : ( port : number , user1 : string , user2 : string , cb : ( ) => void ) => void , callbackUnlocked ?: ( port : number , user2 : string ) => void , isFolder ?: boolean ) : void
41
+ {
42
+ isFolder = isFolder === undefined ? false : isFolder ;
43
+
44
+ const server1 = info . init ( 2 + ( isFolder ? 0 : 1 ) ) ;
45
+
46
+ if ( ! isFolder )
47
+ {
48
+ starter ( server1 , info , isValid , 'folder/folder2/folder3/folder4/file' , 0 , true , ( lock , user1 , user2 ) => {
49
+ callbackLocked ( server1 . options . port , user1 , user2 , ( ) => {
50
+ if ( ! callbackUnlocked )
51
+ return isValid ( true ) ;
52
+
53
+ unlockResource ( server1 , info , isValid , user1 , 'folder/folder2/folder3/folder4/file' , lock . uuid , ( ) => {
54
+ callbackUnlocked ( server1 . options . port , user2 ) ;
55
+ } )
56
+ } )
57
+ } )
58
+ }
59
+
60
+ const server2 = info . startServer ( ) ;
61
+ starter ( server2 , info , isValid , 'folder' , - 1 , true , ( lock , user1 , user2 ) => {
62
+ callbackLocked ( server2 . options . port , user1 , user2 , ( ) => {
63
+ if ( ! callbackUnlocked )
64
+ return isValid ( true ) ;
65
+
66
+ unlockResource ( server2 , info , isValid , user1 , 'folder' , lock . uuid , ( ) => {
67
+ callbackUnlocked ( server2 . options . port , user2 ) ;
68
+ } )
69
+ } )
70
+ } )
71
+
72
+ const server3 = info . startServer ( ) ;
73
+ starter ( server3 , info , isValid , 'folder/folder2/folder3/folder4' , 1 , true , ( lock , user1 , user2 ) => {
74
+ callbackLocked ( server3 . options . port , user1 , user2 , ( ) => {
75
+ if ( ! callbackUnlocked )
76
+ return isValid ( true ) ;
77
+
78
+ unlockResource ( server3 , info , isValid , user1 , 'folder/folder2/folder3/folder4' , lock . uuid , ( ) => {
79
+ callbackUnlocked ( server3 . options . port , user2 ) ;
80
+ } )
81
+ } )
82
+ } )
83
+ }
84
+
85
+ export function unlockResource (
86
+ server : v2 . WebDAVServer ,
87
+ info : TestInfo ,
88
+ isValid : TestCallback ,
89
+ user : string ,
90
+ pathNameToUnlock : string ,
91
+ lockToken : string ,
92
+ callback : ( ) => void ) : void
93
+ export function unlockResource (
94
+ server : v2 . WebDAVServer ,
95
+ info : TestInfo ,
96
+ isValid : TestCallback ,
97
+ user : string ,
98
+ pathNameToUnlock : string ,
99
+ lockToken : string ,
100
+ expectedResponseCode : number ,
101
+ callback : ( ) => void ) : void
102
+ export function unlockResource (
103
+ server : v2 . WebDAVServer ,
104
+ info : TestInfo ,
105
+ isValid : TestCallback ,
106
+ user : string ,
107
+ pathNameToUnlock : string ,
108
+ lockToken : string ,
109
+ _expectedResponseCode : number | ( ( ) => void ) ,
110
+ _callback ?: ( ) => void ) : void
111
+ {
112
+ const expectedResponseCode = _callback ? _expectedResponseCode as number : v2 . HTTPCodes . NoContent ;
113
+ const callback = _callback ? _callback : _expectedResponseCode as ( ) => void ;
114
+
115
+ info . req ( {
116
+ url : 'http://localhost:' + server . options . port + '/' + pathNameToUnlock ,
117
+ method : 'UNLOCK' ,
118
+ headers : {
119
+ 'Lock-Token' : '<' + lockToken + '>' ,
120
+ Authorization : 'Basic ' + user
121
+ }
122
+ } , expectedResponseCode , ( ) => {
123
+ callback ( ) ;
124
+ } )
125
+ }
126
+
15
127
export function lockResource (
16
128
server : v2 . WebDAVServer ,
17
129
info : TestInfo ,
18
130
isValid : TestCallback ,
131
+ user : string ,
19
132
pathNameToLock : string ,
20
133
depth : number ,
21
134
isExclusive : boolean ,
@@ -24,6 +137,7 @@ export function lockResource(
24
137
server : v2 . WebDAVServer ,
25
138
info : TestInfo ,
26
139
isValid : TestCallback ,
140
+ user : string ,
27
141
pathNameToLock : string ,
28
142
depth : number ,
29
143
isExclusive : boolean ,
@@ -33,6 +147,7 @@ export function lockResource(
33
147
server : v2 . WebDAVServer ,
34
148
info : TestInfo ,
35
149
isValid : TestCallback ,
150
+ user : string ,
36
151
pathNameToLock : string ,
37
152
depth : number ,
38
153
isExclusive : boolean ,
@@ -46,7 +161,8 @@ export function lockResource(
46
161
url : 'http://localhost:' + server . options . port + '/' + pathNameToLock ,
47
162
method : 'LOCK' ,
48
163
headers : {
49
- depth : depth === - 1 ? 'Infinity' : depth . toString ( )
164
+ Depth : depth === - 1 ? 'Infinity' : depth . toString ( ) ,
165
+ Authorization : 'Basic ' + user
50
166
} ,
51
167
body : '<?xml version="1.0" encoding="utf-8" ?><D:lockinfo xmlns:D="DAV:"><D:lockscope><D:' + ( isExclusive ? 'exclusive' : 'shared' ) + '/></D:lockscope><D:locktype><D:write/></D:locktype><D:owner><D:href>http://example.org/~ejw/contact.html</D:href></D:owner></D:lockinfo>'
52
168
} , expectedResponseCode , ( res , xml ) => {
@@ -102,7 +218,7 @@ export function starter(
102
218
pathNameToLock : string ,
103
219
depth : number ,
104
220
isExclusive : boolean ,
105
- callback : ( lock : Lock ) => void ) : void
221
+ callback : ( lock : Lock , user1 : string , user2 : string ) => void ) : void
106
222
export function starter (
107
223
server : v2 . WebDAVServer ,
108
224
info : TestInfo ,
@@ -111,21 +227,26 @@ export function starter(
111
227
depth : number ,
112
228
isExclusive : boolean ,
113
229
expectedResponseCode : number ,
114
- callback : ( lock : Lock ) => void ) : void
230
+ callback : ( lock : Lock , user1 : string , user2 : string ) => void ) : void
115
231
export function starter (
116
232
server : v2 . WebDAVServer ,
117
233
info : TestInfo ,
118
234
isValid : TestCallback ,
119
235
pathNameToLock : string ,
120
236
depth : number ,
121
237
isExclusive : boolean ,
122
- _expectedResponseCode : number | ( ( lock : Lock ) => void ) ,
123
- _callback ?: ( lock : Lock ) => void ) : void
238
+ _expectedResponseCode : number | ( ( lock : Lock , user1 : string , user2 : string ) => void ) ,
239
+ _callback ?: ( lock : Lock , user1 : string , user2 : string ) => void ) : void
124
240
{
125
241
const expectedResponseCode = _callback ? _expectedResponseCode as number : v2 . HTTPCodes . OK ;
126
- const callback = _callback ? _callback : _expectedResponseCode as ( lock : Lock ) => void ;
242
+ const callback = _callback ? _callback : _expectedResponseCode as ( lock : Lock , user1 : string , user2 : string ) => void ;
127
243
128
- server . rootFileSystem ( ) . addSubTree ( info . ctx , {
244
+ const um = new v2 . SimpleUserManager ( ) ;
245
+ um . addUser ( 'user1' , 'password1' ) ; // dXNlcjE6cGFzc3dvcmQx
246
+ um . addUser ( 'user2' , 'password2' ) ; // dXNlcjI6cGFzc3dvcmQy
247
+ server . httpAuthentication = new v2 . HTTPBasicAuthentication ( um , 'Test realm' ) ;
248
+ server . options . httpAuthentication = server . httpAuthentication ;
249
+ server . rootFileSystem ( ) . addSubTree ( v2 . RequestContext . createExternal ( server ) , {
129
250
'folder' : {
130
251
'folder2' : {
131
252
'folder3' : {
@@ -141,6 +262,8 @@ export function starter(
141
262
} , ( e ) => {
142
263
if ( e ) return isValid ( false , 'Cannot call "addSubTree(...)".' , e ) ;
143
264
144
- lockResource ( server , info , isValid , pathNameToLock , depth , isExclusive , expectedResponseCode , callback ) ;
265
+ lockResource ( server , info , isValid , 'dXNlcjE6cGFzc3dvcmQx' , pathNameToLock , depth , isExclusive , expectedResponseCode , ( lock ) => {
266
+ callback ( lock , 'dXNlcjE6cGFzc3dvcmQx' , 'dXNlcjI6cGFzc3dvcmQy' ) ;
267
+ } ) ;
145
268
} )
146
269
}
0 commit comments