diff --git a/src/services/main/settings.ts b/src/services/main/settings.ts index ab04890ae..e7164967e 100644 --- a/src/services/main/settings.ts +++ b/src/services/main/settings.ts @@ -22,6 +22,12 @@ export type MainSettings = { skipSanityCheck: boolean disableExternalPayments: boolean } +export type BitcoinCoreSettings = { + port: number + user: string + pass: string +} +export type TestSettings = MainSettings & { lndSettings: { otherNode: NodeSettings, thirdNode: NodeSettings, fourthNode: NodeSettings }, bitcoinCoreSettings: BitcoinCoreSettings } export const LoadMainSettingsFromEnv = (): MainSettings => { return { watchDogSettings: LoadWatchdogSettingsFromEnv(), @@ -44,7 +50,7 @@ export const LoadMainSettingsFromEnv = (): MainSettings => { } } -export const LoadTestSettingsFromEnv = (): MainSettings & { lndSettings: { otherNode: NodeSettings, thirdNode: NodeSettings } } => { +export const LoadTestSettingsFromEnv = (): TestSettings => { const eventLogPath = `logs/eventLogV2Test${Date.now()}.csv` const settings = LoadMainSettingsFromEnv() return { @@ -61,8 +67,18 @@ export const LoadTestSettingsFromEnv = (): MainSettings & { lndSettings: { other lndAddr: EnvMustBeNonEmptyString("LND_THIRD_ADDR"), lndCertPath: EnvMustBeNonEmptyString("LND_THIRD_CERT_PATH"), lndMacaroonPath: EnvMustBeNonEmptyString("LND_THIRD_MACAROON_PATH") + }, + fourthNode: { + lndAddr: EnvMustBeNonEmptyString("LND_FOURTH_ADDR"), + lndCertPath: EnvMustBeNonEmptyString("LND_FOURTH_CERT_PATH"), + lndMacaroonPath: EnvMustBeNonEmptyString("LND_FOURTH_MACAROON_PATH") } }, - skipSanityCheck: true + skipSanityCheck: true, + bitcoinCoreSettings: { + port: EnvMustBeInteger("BITCOIN_CORE_PORT"), + user: EnvMustBeNonEmptyString("BITCOIN_CORE_USER"), + pass: EnvMustBeNonEmptyString("BITCOIN_CORE_PASS") + } } } \ No newline at end of file diff --git a/src/tests/.env.test b/src/tests/.env.test index 0e610e5fe..1b2ad6955 100644 --- a/src/tests/.env.test +++ b/src/tests/.env.test @@ -1,5 +1,5 @@ -LND_ADDRESS=127.0.0.1:10001 -LND_CERT_PATH=alice-tls.cert +LND_ADDRESS=127.0.0.1:10001 #alice +LND_CERT_PATH=alice-tls.cert #alice LND_MACAROON_PATH=alice-admin.macaroon DATABASE_FILE=db.sqlite JWT_SECRET=bigsecrethere @@ -22,12 +22,19 @@ METRICS_DATABASE_FILE=metrics.sqlite WATCHDOG_MAX_DIFF_BPS=100 WATCHDOG_MAX_DIFF_SATS=10000 - +# dave <--> alice <--> carol <--> bob LND_OTHER_ADDR=127.0.0.1:10002 LND_OTHER_CERT_PATH=bob-tls.cert LND_OTHER_MACAROON_PATH=bob-admin.macaroon -LND_THIRD_ADDR=127.0.0.1:10004 -LND_THIRD_CERT_PATH=dave-tls.cert -LND_THIRD_MACAROON_PATH=dave-admin.macaroon +LND_THIRD_ADDR=127.0.0.1:10003 +LND_THIRD_CERT_PATH=carol-tls.cert +LND_THIRD_MACAROON_PATH=carol-admin.macaroon + +LND_FOURTH_ADDR=127.0.0.1:10004 +LND_FOURTH_CERT_PATH=dave-tls.cert +LND_FOURTH_MACAROON_PATH=dave-admin.macaroon +BITCOIN_CORE_PORT=18443 +BITCOIN_CORE_USER=polaruser +BITCOIN_CORE_PASS=polarpass \ No newline at end of file diff --git a/src/tests/networkSetup.ts b/src/tests/networkSetup.ts new file mode 100644 index 000000000..c1bf2fafa --- /dev/null +++ b/src/tests/networkSetup.ts @@ -0,0 +1,43 @@ +import BitcoinCore from 'bitcoin-core'; +import { LoadTestSettingsFromEnv, TestSettings } from "../services/main/settings.js" +import LND from '../services/lnd/lnd.js' +// dave <--> alice <--> carol <--> bob +export const setupNetwork = async () => { + const settings = LoadTestSettingsFromEnv() + const core = await initBitcoinCore(settings) + const { alice, bob, carol, dave } = await initLndInstances(settings) +} + +const initLndInstances = async (settings: TestSettings) => { + const alice = new LND(settings.lndSettings, console.log, console.log, () => { }, () => { }) + await alice.Warmup() + + const bobSettings = { ...settings.lndSettings, mainNode: settings.lndSettings.otherNode } + const bob = new LND(bobSettings, console.log, console.log, () => { }, () => { }) + await bob.Warmup() + + const carolSettings = { ...settings.lndSettings, mainNode: settings.lndSettings.thirdNode } + const carol = new LND(carolSettings, console.log, console.log, () => { }, () => { }) + await carol.Warmup() + + const daveSettings = { ...settings.lndSettings, mainNode: settings.lndSettings.fourthNode } + const dave = new LND(daveSettings, console.log, console.log, () => { }, () => { }) + await dave.Warmup() + return { alice, bob, carol, dave } +} + +const initBitcoinCore = async (settings: TestSettings) => { + const core = new BitcoinCore({ + //network: 'regtest', + host: '127.0.0.1', + port: `${settings.bitcoinCoreSettings.port}`, + username: settings.bitcoinCoreSettings.user, + password: settings.bitcoinCoreSettings.pass, + // use a long timeout due to the time it takes to mine a lot of blocks + timeout: 5 * 60 * 1000, + }) + const wallet = await core.createWallet(''); + console.log({ wallet }) + const address = await core.getNewAddress() + console.log({ address }) +} \ No newline at end of file diff --git a/src/tests/testRunner.ts b/src/tests/testRunner.ts index 5bf830b65..a42b80233 100644 --- a/src/tests/testRunner.ts +++ b/src/tests/testRunner.ts @@ -1,4 +1,5 @@ import { globby } from 'globby' +import { setupNetwork } from './networkSetup.js' import { Describe, SetupTest, teardown, TestBase } from './testBase.js' @@ -19,7 +20,9 @@ const getDescribe = (fileName: string): Describe => { } } const start = async () => { - + if (process.argv[2] === 'setup_network') { + await setupNetwork() + } const files = await globby(["**/*.spec.js", "!**/node_modules/**"]) const modules: { file: string, module: TestModule }[] = [] let devModule = -1