From 54c3f77f8ee94b8b8d7565067febc0a8395a70da Mon Sep 17 00:00:00 2001 From: benthecarman Date: Wed, 1 Jun 2022 14:28:35 -0500 Subject: [PATCH] Improve lnd test suite reliability (#4361) --- .../org/bitcoins/lnd/rpc/LndRpcClient.scala | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala b/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala index 714949c672..314054c669 100644 --- a/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala +++ b/lnd-rpc/src/main/scala/org/bitcoins/lnd/rpc/LndRpcClient.scala @@ -106,11 +106,15 @@ class LndRpcClient(val instance: LndInstance, binaryOpt: Option[File] = None)( applier: CallCredentials.MetadataApplier ): Unit = { appExecutor.execute(() => { - val metadata = new Metadata() - val key = - Metadata.Key.of(macaroonKey, Metadata.ASCII_STRING_MARSHALLER) - metadata.put(key, instance.macaroon) - applier(metadata) + // Wrap in a try, in case the macaroon hasn't been created yet. + Try { + val metadata = new Metadata() + val key = + Metadata.Key.of(macaroonKey, Metadata.ASCII_STRING_MARSHALLER) + metadata.put(key, instance.macaroon) + applier(metadata) + } + () }) } @@ -141,6 +145,7 @@ class LndRpcClient(val instance: LndInstance, binaryOpt: Option[File] = None)( lazy val signer: SignerClient = SignerClient(clientSettings) lazy val router: RouterClient = RouterClient(clientSettings) lazy val invoices: InvoicesClient = InvoicesClient(clientSettings) + lazy val stateClient: StateClient = StateClient(clientSettings) def genSeed(): Future[GenSeedResponse] = { logger.trace("lnd calling genseed") @@ -973,9 +978,16 @@ class LndRpcClient(val instance: LndInstance, binaryOpt: Option[File] = None)( def isStarted: Future[Boolean] = { val p = Promise[Boolean]() - Try(getInfo.onComplete { - case Success(_) => - p.success(true) + Try(stateClient.getState(GetStateRequest()).onComplete { + case Success(state) => + state.state match { + case WalletState.RPC_ACTIVE | WalletState.SERVER_ACTIVE => + p.success(true) + case _: WalletState.Unrecognized | + WalletState.WAITING_TO_START | WalletState.UNLOCKED | + WalletState.LOCKED | WalletState.NON_EXISTING => + p.success(false) + } case Failure(_) => p.success(false) })