@@ -64,6 +64,7 @@ fn adding_resource_to_storage_by_admin_succeeds() {
64
64
assert ! ( run_result. contains( & ( ADMIN_ID , expected_response) ) ) ;
65
65
66
66
let expected_event = [
67
+ resources:: RESOURCE_SERVICE_NAME . encode ( ) . as_slice ( ) ,
67
68
"ResourceAdded" . encode ( ) . as_slice ( ) ,
68
69
& ResourceStorageEvent :: ResourceAdded {
69
70
resource_id : RESOURCE_ID ,
@@ -196,53 +197,91 @@ fn adding_non_existing_part_to_resource_fails() {
196
197
197
198
struct Fixture < ' a > {
198
199
admin_id : u64 ,
199
- net_client : GTestRemoting ,
200
+ program_space : GTestRemoting ,
200
201
catalog_program : OnceCell < Program < ' a > > ,
201
202
resource_program : OnceCell < Program < ' a > > ,
202
203
}
203
204
204
205
impl < ' a > Fixture < ' a > {
205
206
fn new ( admin_id : u64 ) -> Self {
206
- let net_client = GTestRemoting :: new ( ) ;
207
- net_client . system ( ) . init_logger ( ) ;
207
+ let program_space = GTestRemoting :: new ( ) ;
208
+ program_space . system ( ) . init_logger ( ) ;
208
209
209
210
Self {
210
211
admin_id,
211
- net_client ,
212
+ program_space ,
212
213
catalog_program : OnceCell :: new ( ) ,
213
214
resource_program : OnceCell :: new ( ) ,
214
215
}
215
216
}
216
217
217
- fn net_client ( & self ) -> & GTestRemoting {
218
- & self . net_client
218
+ fn program_space ( & self ) -> & GTestRemoting {
219
+ & self . program_space
219
220
}
220
221
221
222
fn catalog_program ( & ' a self ) -> & Program < ' a > {
222
223
self . catalog_program . get_or_init ( || {
223
- let program = Program :: from_file ( self . net_client . system ( ) , CATALOG_PROGRAM_WASM_PATH ) ;
224
+ let program =
225
+ Program :: from_file ( self . program_space . system ( ) , CATALOG_PROGRAM_WASM_PATH ) ;
224
226
let encoded_request = catalog:: CTOR_FUNC_NAME . encode ( ) ;
225
227
program. send_bytes ( self . admin_id , encoded_request) ;
226
228
program
227
229
} )
228
230
}
229
231
230
- fn resource_program ( & ' a self ) -> & Program < ' a > {
232
+ fn resource_program_for_async ( & ' a self ) -> & Program < ' a > {
233
+ println ! ( "For async" ) ;
231
234
self . resource_program . get_or_init ( || {
232
- let program = Program :: from_file ( self . net_client . system ( ) , RESOURCE_PROGRAM_WASM_PATH ) ;
235
+ let program =
236
+ Program :: from_file ( self . program_space . system ( ) , RESOURCE_PROGRAM_WASM_PATH ) ;
233
237
let encoded_request = resources:: CTOR_FUNC_NAME . encode ( ) ;
234
238
program. send_bytes ( self . admin_id , encoded_request) ;
235
239
program
236
240
} )
237
241
}
238
242
243
+ fn resource_program_for_sync ( & ' a self ) -> & Program < ' a > {
244
+ println ! ( "For sync" ) ;
245
+ self . resource_program . get_or_init ( || {
246
+ tokio:: runtime:: Builder :: new_current_thread ( )
247
+ . enable_all ( )
248
+ . build ( )
249
+ . unwrap ( )
250
+ . block_on ( async {
251
+ self . __spin_up_program (
252
+ RESOURCE_PROGRAM_WASM_PATH ,
253
+ & resources:: CTOR_FUNC_NAME . encode ( ) ,
254
+ )
255
+ . await
256
+ } )
257
+ } )
258
+ }
259
+
260
+ async fn __spin_up_program ( & ' a self , program_path : & str , payload : & [ u8 ] ) -> Program < ' a > {
261
+ let code_id = self . program_space ( ) . system ( ) . submit_code ( program_path) ;
262
+ let program_space = self . program_space ( ) . clone ( ) ;
263
+ let reply = program_space
264
+ . activate (
265
+ code_id. as_ref ( ) . into ( ) ,
266
+ "123" ,
267
+ payload,
268
+ 0 ,
269
+ GTestArgs :: new ( self . admin_id . into ( ) ) ,
270
+ )
271
+ . await
272
+ . unwrap ( ) ;
273
+ self . program_space ( )
274
+ . system ( )
275
+ . get_program ( * reply. await . unwrap ( ) . 0 . as_ref ( ) )
276
+ }
277
+
239
278
fn add_resource (
240
279
& ' a self ,
241
280
actor_id : u64 ,
242
281
resource_id : ResourceId ,
243
282
resource : & Resource ,
244
283
) -> RunResult {
245
- let program = self . resource_program ( ) ;
284
+ let program = self . resource_program_for_sync ( ) ;
246
285
let encoded_request = [
247
286
resources:: RESOURCE_SERVICE_NAME . encode ( ) ,
248
287
resources:: ADD_RESOURCE_ENTRY_FUNC_NAME . encode ( ) ,
@@ -266,10 +305,10 @@ impl<'a> Fixture<'a> {
266
305
resource. encode ( ) ,
267
306
]
268
307
. concat ( ) ;
269
- let net_client = self . net_client ( ) . clone ( ) ;
270
- let reply = net_client
308
+ let program_space = self . program_space ( ) . clone ( ) ;
309
+ let reply = program_space
271
310
. message (
272
- self . resource_program ( ) . id ( ) . as_ref ( ) . into ( ) ,
311
+ self . resource_program_for_async ( ) . id ( ) . as_ref ( ) . into ( ) ,
273
312
encoded_request,
274
313
0 ,
275
314
GTestArgs :: new ( actor_id. into ( ) ) ,
@@ -284,7 +323,7 @@ impl<'a> Fixture<'a> {
284
323
resource_id : ResourceId ,
285
324
part_id : PartId ,
286
325
) -> RunResult {
287
- let program = self . resource_program ( ) ;
326
+ let program = self . resource_program_for_sync ( ) ;
288
327
let encoded_request = [
289
328
resources:: RESOURCE_SERVICE_NAME . encode ( ) ,
290
329
resources:: ADD_PART_TO_RESOURCE_FUNC_NAME . encode ( ) ,
@@ -300,7 +339,7 @@ impl<'a> Fixture<'a> {
300
339
actor_id : u64 ,
301
340
resource_id : ResourceId ,
302
341
) -> Option < ResourceStorageResult < Resource > > {
303
- let program = self . resource_program ( ) ;
342
+ let program = self . resource_program_for_sync ( ) ;
304
343
let encoded_service_name = resources:: RESOURCE_SERVICE_NAME . encode ( ) ;
305
344
let encoded_func_name = resources:: RESOURCE_FUNC_NAME . encode ( ) ;
306
345
let encoded_request = [
0 commit comments