2024-06-26 12:21:19 +08:00
import s from 'apigo.cc/apigo/service'
import file from 'apigo.cc/apigo/plugins/file'
import runtime from 'apigo.cc/apigo/plugins/runtime'
2024-05-27 17:03:15 +08:00
import console from "console" ;
// test register api manually
2024-06-26 12:21:19 +08:00
file . write ( 'api/echo.js' , 'import service from "apigo.cc/apigo/service"\nreturn service.getArgs().data' )
2024-05-27 17:03:15 +08:00
s . register ( {
actionFile : 'api/echo.js' ,
method : 'POST' ,
path : '/echo' ,
} )
// start server asynchronously for test
let c = s . asyncStart ( )
// test /hello without access token
if ( c . get ( '/hello?name=World' , { Host : 'localhost' } ) . statusCode !== 403 ) throw new Error ( 'test hello World 403 failed' )
// test /hello without host (api limited host is localhost)
if ( c . get ( '/hello?name=World' ) . statusCode !== 404 ) throw new Error ( 'test hello World 404 failed' )
// test /hello with access token (auth level 1)
if ( c . get ( '/hello?name=World' , { Host : 'localhost' , 'Access-Token' : 'huDWA-78we2-89uji1da' } ) . string ( ) !== 'Hello World' ) throw new Error ( 'test hello World failed' )
// test /hello with access token (auth level 2)
if ( c . get ( '/hello?name=ABC' , { Host : 'localhost' , 'Access-Token' : '89dsj-aADSsn-Uds1dad' } ) . string ( ) !== 'Hello ABC' ) throw new Error ( 'test hello ABC failed' )
// test /echo by get (will response 404)
if ( c . get ( '/echo?data=World' ) . statusCode !== 404 ) throw new Error ( 'test echo over get failed' )
// test /echo by post
if ( c . post ( '/echo' , { data : 'World' } ) . string ( ) !== 'World' ) throw new Error ( 'test echo over post failed' )
// test api hot load
2024-06-26 12:21:19 +08:00
file . write ( 'api/echo.js' , 'import service from "apigo.cc/apigo/service"\nreturn service.getArgs().data+"!"' )
2024-05-27 17:03:15 +08:00
runtime . sleep ( 200 )
if ( c . post ( '/echo' , { data : 'World' } ) . string ( ) !== 'World!' ) throw new Error ( 't est echo over post failed' )
file . remove ( 'api/echo.js' )
// test websocket
let wc = c . open ( '/ws' , { Host : 'localhost' , 'Access-Token' : 'huDWA-78we2-89uji1da' } )
wc . writeJSON ( { aaa : 'hello' , bbb : 222 } )
let msg = wc . readJSON ( )
if ( msg . aaa !== 111 ) throw new Error ( 'test echo over websocket failed' )
// test discover
s . addDiscoverAppForTest ( 'test' , 'http:huDWA-78we2-89uji1da' )
s . setDiscoverNode ( 'test' , c . addr , 100 )
let caller = s . getCaller ( )
if ( caller . get ( 'test' , '/hello?name=World' , { Host : 'localhost' } ) . string ( ) !== 'Hello World' ) throw new Error ( 'test hello World 403 failed' )
// stop server
c . stop ( )
return true