Skip to content

Commit 88d6bee

Browse files
committed
feat: get first test working on share-test service
1 parent 9ad04cd commit 88d6bee

File tree

2 files changed

+85
-21
lines changed

2 files changed

+85
-21
lines changed

mods/mods_available/kdmod/ShareTestService.js

+83-20
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,19 @@ const {
55
get_user,
66
generate_system_fsentries,
77
invalidate_cached_user,
8+
deleteUser,
89
} = 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');
1012
const { Actor, UserActorType }
1113
= require('../../../packages/backend/src/services/auth/Actor');
1214
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');
1321

1422

1523
class ShareTestService extends use.Service {
@@ -33,7 +41,20 @@ class ShareTestService extends use.Service {
3341
id: 'start',
3442
description: '',
3543
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+
}
3758
}
3859
}
3960
]);
@@ -43,11 +64,21 @@ class ShareTestService extends use.Service {
4364
await this.teardown_();
4465
await this.setup_();
4566

67+
const results = [];
68+
4669
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+
});
4878
}
4979

5080
await this.teardown_();
81+
return results;
5182
}
5283

5384
async setup_ () {
@@ -57,14 +88,23 @@ class ShareTestService extends use.Service {
5788
await this.create_test_user_('testuser_kenny');
5889
}
5990
async run_scenario_ (scenario) {
91+
let error;
6092
// Run sequence
6193
for ( const step of scenario.sequence ) {
6294
const method = this[`__scenario:${step.call}`];
6395
const user = await get_user({ username: step.as })
64-
const actor = Actor.create(UserActorType, { user });
96+
const actor = await Actor.create(UserActorType, { user });
6597
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+
}
67106
}
107+
return error;
68108
}
69109
async teardown_ () {
70110
await this.delete_test_user_('testuser_eric');
@@ -94,33 +134,56 @@ class ShareTestService extends use.Service {
94134
}
95135

96136
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);
103140
}
104141

105142
// API for scenarios
106143
async ['__scenario:create-example-file'] (
107-
{ user },
144+
{ actor, user },
108145
{ name, contents },
109146
) {
147+
const svc_fs = this.services.get('filesystem');
148+
const parent = await svc_fs.node(new NodePathSelector(
149+
`/${user.username}/Desktop`
150+
));
110151
console.log('test -> create-example-file',
111152
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+
});
118168
}
119169
async ['__scenario:assert-no-access'] (
120-
{ user },
170+
{ actor, user },
121171
{ path },
122172
) {
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+
}
124187
}
125188
}
126189

mods/mods_available/kdmod/data/sharetest_scenarios.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module.exports = [
22
{
3-
title: `Kyle creates a file; Eric tries access read it`,
43
sequence: [
54
{
5+
title: 'Kyle creates a file',
66
call: 'create-example-file',
77
as: 'testuser_kyle',
88
with: {
@@ -11,6 +11,7 @@ module.exports = [
1111
}
1212
},
1313
{
14+
title: 'Eric tries to access it',
1415
call: 'assert-no-access',
1516
as: 'testuser_eric',
1617
with: {

0 commit comments

Comments
 (0)