@@ -5,11 +5,19 @@ const {
5
5
get_user,
6
6
generate_system_fsentries,
7
7
invalidate_cached_user,
8
+ deleteUser,
8
9
} = require ( '../../../packages/backend/src/helpers' ) ;
9
- // const { HLWrite } = require('../../../packages/backend/src/filesystem/hl_operations/hl_write');
10
+ const { HLWrite } = require ( '../../../packages/backend/src/filesystem/hl_operations/hl_write' ) ;
11
+ const { LLRead } = require ( '../../../packages/backend/src/filesystem/ll_operations/ll_read' ) ;
10
12
const { Actor, UserActorType }
11
13
= require ( '../../../packages/backend/src/services/auth/Actor' ) ;
12
14
const { DB_WRITE } = require ( '../../../packages/backend/src/services/database/consts' ) ;
15
+ const {
16
+ RootNodeSelector,
17
+ NodeChildSelector,
18
+ NodePathSelector,
19
+ } = require ( '../../../packages/backend/src/filesystem/node/selectors' ) ;
20
+ const { Context } = require ( '../../../packages/backend/src/util/context' ) ;
13
21
14
22
15
23
class ShareTestService extends use . Service {
@@ -33,7 +41,20 @@ class ShareTestService extends use.Service {
33
41
id : 'start' ,
34
42
description : '' ,
35
43
handler : async ( _ , log ) => {
36
- this . runit ( ) ;
44
+ const results = await this . runit ( ) ;
45
+
46
+ for ( const result of results ) {
47
+ log . log ( `=== ${ result . title } ===` ) ;
48
+ if ( ! result . report ) {
49
+ log . log ( `\x1B[32;1mSUCCESS\x1B[0m` ) ;
50
+ continue ;
51
+ }
52
+ log . log (
53
+ `\x1B[31;1mSTOPPED\x1B[0m at ` +
54
+ `${ result . report . step } : ` +
55
+ result . report . report . message ,
56
+ ) ;
57
+ }
37
58
}
38
59
}
39
60
] ) ;
@@ -43,11 +64,21 @@ class ShareTestService extends use.Service {
43
64
await this . teardown_ ( ) ;
44
65
await this . setup_ ( ) ;
45
66
67
+ const results = [ ] ;
68
+
46
69
for ( const scenario of this . scenarios ) {
47
- this . run_scenario_ ( scenario ) ;
70
+ if ( ! scenario . title ) {
71
+ scenario . title = scenario . sequence . map (
72
+ step => step . title ) . join ( '; ' )
73
+ }
74
+ results . push ( {
75
+ title : scenario . title ,
76
+ report : await this . run_scenario_ ( scenario )
77
+ } ) ;
48
78
}
49
79
50
80
await this . teardown_ ( ) ;
81
+ return results ;
51
82
}
52
83
53
84
async setup_ ( ) {
@@ -57,14 +88,23 @@ class ShareTestService extends use.Service {
57
88
await this . create_test_user_ ( 'testuser_kenny' ) ;
58
89
}
59
90
async run_scenario_ ( scenario ) {
91
+ let error ;
60
92
// Run sequence
61
93
for ( const step of scenario . sequence ) {
62
94
const method = this [ `__scenario:${ step . call } ` ] ;
63
95
const user = await get_user ( { username : step . as } )
64
- const actor = Actor . create ( UserActorType , { user } ) ;
96
+ const actor = await Actor . create ( UserActorType , { user } ) ;
65
97
const generated = { user, actor } ;
66
- await method . call ( this , generated , scenario . with ) ;
98
+ const report = await Context . get ( ) . sub ( { user, actor } )
99
+ . arun ( async ( ) => {
100
+ return await method . call ( this , generated , step . with ) ;
101
+ } ) ;
102
+ if ( report ) {
103
+ error = { step : step . title , report } ;
104
+ break ;
105
+ }
67
106
}
107
+ return error ;
68
108
}
69
109
async teardown_ ( ) {
70
110
await this . delete_test_user_ ( 'testuser_eric' ) ;
@@ -94,33 +134,56 @@ class ShareTestService extends use.Service {
94
134
}
95
135
96
136
async delete_test_user_ ( username ) {
97
- await this . db . write (
98
- `
99
- DELETE FROM user WHERE username=? LIMIT 1
100
- ` ,
101
- [ username ] ,
102
- ) ;
137
+ const user = await get_user ( { username } ) ;
138
+ if ( ! user ) return ;
139
+ await deleteUser ( user . id ) ;
103
140
}
104
141
105
142
// API for scenarios
106
143
async [ '__scenario:create-example-file' ] (
107
- { user } ,
144
+ { actor , user } ,
108
145
{ name, contents } ,
109
146
) {
147
+ const svc_fs = this . services . get ( 'filesystem' ) ;
148
+ const parent = await svc_fs . node ( new NodePathSelector (
149
+ `/${ user . username } /Desktop`
150
+ ) ) ;
110
151
console . log ( 'test -> create-example-file' ,
111
152
user , name , contents ) ;
112
- // const hl_write = new HLWrite();
113
- // await hl_write.run({
114
- // destination_or_parent: '/'+user.username+'/Desktop',
115
- // specified_name: name,
116
-
117
- // });
153
+ const buffer = Buffer . from ( contents ) ;
154
+ const file = {
155
+ size : buffer . length ,
156
+ name : name ,
157
+ type : 'application/octet-stream' ,
158
+ buffer,
159
+ } ;
160
+ const hl_write = new HLWrite ( ) ;
161
+ await hl_write . run ( {
162
+ actor,
163
+ user,
164
+ destination_or_parent : parent ,
165
+ specified_name : name ,
166
+ file,
167
+ } ) ;
118
168
}
119
169
async [ '__scenario:assert-no-access' ] (
120
- { user } ,
170
+ { actor , user } ,
121
171
{ path } ,
122
172
) {
123
- console . log ( 'test -> assert-no-access' , user , path ) ;
173
+ const svc_fs = this . services . get ( 'filesystem' ) ;
174
+ const node = await svc_fs . node ( new NodePathSelector ( path ) ) ;
175
+ const ll_read = new LLRead ( ) ;
176
+ let expected_e ; try {
177
+ const stream = await ll_read . run ( {
178
+ fsNode : node ,
179
+ actor,
180
+ } )
181
+ } catch ( e ) {
182
+ expected_e = e ;
183
+ }
184
+ if ( ! expected_e ) {
185
+ return { message : 'expected error, got none' } ;
186
+ }
124
187
}
125
188
}
126
189
0 commit comments