lnd 0.1.4

Utility to run a regtest lnd process connected to a given bitcoind instance, useful in integration testing environment.
Documentation
# Lnd
> Mostly a copy of [`electrsd`]https://github.com/RCasatta/electrsd & [`bitcoind`]https://github.com/rust-bitcoin/bitcoind fit for LND.

Utility to run a regtest [LND](https://github.com/lightningnetwork/lnd) process connected to a given [bitcoind](https://github.com/RCasatta/bitcoind) instance, 
useful in integration testing environment.

```rust
// Create a bitcoind instance
let mut bitcoin_conf = bitcoind::Conf::default();
bitcoin_conf.enable_zmq = true;

let bitcoind = bitcoind::BitcoinD::with_conf("/usr/local/bin/bitcoind", &bitcoin_conf).unwrap();

// Pass the binary path, bitcoind, and ZMQ ports
let mut lnd = lnd::Lnd::new("<path to lnd>", &bitcoind);

let node = lnd.client.lightning().get_info(GetInfoRequest {}).await; 

assert!(node.is_ok());
```

## Automatic binaries download

In your project Cargo.toml, activate the following features

```yml
lnd = { version = "*", features = ["download"] }
```

To use it:

```rust
let bitcoind_exe = bitcoind::downloaded_exe_path().expect("bitcoind version feature must be enabled");
let bitcoind = bitcoind::BitcoinD::new(bitcoind_exe).unwrap();
let lnd_exe = lnd::downloaded_exe_path().expect("lnd version feature must be enabled");
let lnd = lnd::Lnd::new(lnd_exe, bitcoind).unwrap();
```

When the `LND_DOWNLOAD_ENDPOINT`/`BITCOIND_DOWNLOAD_ENDPOINT` environment variables are set,
`lnd`/`bitcoind` will try to download the binaries from the given endpoints.

When you don't use the auto-download feature you have the following options:

- have `lnd` executable in the `PATH`
- provide the `lnd` executable via the `LND_EXEC` env var

```rust
if let Ok(exe_path) = lnd::exe_path() {
  let lnd = lnd::Lnd::new(exe_path, &bitcoind).unwrap();
}
```
## Features

  * lnd use a temporary directory as db dir
  * A free port is asked to the OS (a very low probability race condition is still possible) 
  * The process is killed when the struct goes out of scope no matter how the test finishes

Thanks to these features every `#[test]` could easily run isolated with its own environment