File tree Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Expand file tree Collapse file tree 2 files changed +23
-0
lines changed Original file line number Diff line number Diff line change 1+ import { cache } from "../common/decorators" ;
2+
13export class IPService implements IIPService {
24 private static GET_IP_TIMEOUT = 1000 ;
35 constructor ( private $config : IConfiguration ,
46 private $httpClient : Server . IHttpClient ,
57 private $logger : ILogger ) { }
68
9+ @cache ( )
710 public async getCurrentIPv4Address ( ) : Promise < string > {
811 const ipAddress = await this . getIPAddressFromServiceReturningJSONWithIPProperty ( this . $config . WHOAMI_URL_ENDPOINT ) ||
912 await this . getIPAddressFromServiceReturningJSONWithIPProperty ( "https://api.myip.com" ) ||
Original file line number Diff line number Diff line change @@ -135,5 +135,25 @@ describe("ipService", () => {
135135 assert . isTrue ( logger . traceOutput . indexOf ( errMsgForMyipCom ) !== - 1 , `Trace output\n'${ logger . traceOutput } '\ndoes not contain expected message:\n${ errMsgForMyipCom } ` ) ;
136136 assert . isTrue ( logger . traceOutput . indexOf ( errMsgForIpifyOrg ) !== - 1 , `Trace output\n'${ logger . traceOutput } '\ndoes not contain expected message:\n${ errMsgForMyipCom } ` ) ;
137137 } ) ;
138+
139+ it ( "is called only once per process" , async ( ) => {
140+ const testInjector = createTestInjector ( ) ;
141+ const httpClient = testInjector . resolve < Server . IHttpClient > ( "httpClient" ) ;
142+ let httpRequestCounter = 0 ;
143+ httpClient . httpRequest = async ( options : any , proxySettings ?: IProxySettings ) : Promise < Server . IResponse > => {
144+ httpRequestCounter ++ ;
145+ return < any > { body : JSON . stringify ( { ip } ) } ;
146+ } ;
147+
148+ const ipService = testInjector . resolve < IIPService > ( "ipService" ) ;
149+
150+ const ipAddress = await ipService . getCurrentIPv4Address ( ) ;
151+ assert . equal ( httpRequestCounter , 1 ) ;
152+ assert . equal ( ipAddress , ip ) ;
153+
154+ const ipAddress2 = await ipService . getCurrentIPv4Address ( ) ;
155+ assert . equal ( httpRequestCounter , 1 ) ;
156+ assert . equal ( ipAddress2 , ip ) ;
157+ } ) ;
138158 } ) ;
139159} ) ;
You can’t perform that action at this time.
0 commit comments