Skip to content

Commit 4f3d192

Browse files
refactor: simplify exec in electrum container
1 parent 57b7471 commit 4f3d192

File tree

1 file changed

+32
-47
lines changed

1 file changed

+32
-47
lines changed

spring-testcontainer/spring-testcontainer-electrum-daemon-starter/src/main/java/org/tbk/spring/testcontainer/electrumd/config/SimpleElectrumDaemonContainerFactory.java

Lines changed: 32 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717

1818
import java.io.IOException;
1919
import java.time.Duration;
20+
import java.util.Arrays;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.Optional;
2324
import java.util.concurrent.atomic.AtomicLong;
2425
import java.util.function.Consumer;
2526
import java.util.function.Supplier;
27+
import java.util.stream.Stream;
2628

2729
import static org.tbk.spring.testcontainer.core.MoreTestcontainers.buildInternalContainerUrlWithoutProtocol;
2830
import static org.tbk.spring.testcontainer.electrumd.config.ElectrumDaemonContainerProperties.ELECTRUM_NETWORK_ENV_NAME;
@@ -33,8 +35,6 @@ public final class SimpleElectrumDaemonContainerFactory {
3335
@Value
3436
@Builder
3537
public static class ElectrumDaemonContainerConfig {
36-
static final String ELECTRUM_NETWORK_ENV_NAME = "ELECTRUM_NETWORK";
37-
3838
private static final Map<String, String> defaultEnvironment = ImmutableMap.<String, String>builder()
3939
.put(ELECTRUM_NETWORK_ENV_NAME, "regtest")
4040
.build();
@@ -125,7 +125,7 @@ private String dockerContainerName() {
125125
.replace("/", "-");
126126
}
127127

128-
private void copyWalletToContainerIfNecessary(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> electrumDaemonContainer) {
128+
private void copyWalletToContainerIfNecessary(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> container) {
129129
Optional<MountableFile> mountableWalletOrEmpty = config.getDefaultWallet()
130130
.map(MountableFile::forClasspathResource);
131131

@@ -150,23 +150,23 @@ private void copyWalletToContainerIfNecessary(ElectrumDaemonContainerConfig conf
150150
log.debug("copy file to container: {} -> {}", filesystemPath, containerWalletFilePath);
151151
}
152152

153-
electrumDaemonContainer.withCopyFileToContainer(mountableWallet, containerWalletFilePath);
153+
container.withCopyFileToContainer(mountableWallet, containerWalletFilePath);
154154
}
155155
}
156156

157-
private void restartDaemonWithCustomizedSettings(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> electrumDaemonContainer, Supplier<Optional<String>> serverUrlSupplier) {
158-
daemonStop(electrumDaemonContainer);
157+
private void restartDaemonWithCustomizedSettings(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> container, Supplier<Optional<String>> serverUrlSupplier) {
158+
daemonStop(container);
159159

160-
setupDefaultConfigValuesHack(electrumDaemonContainer);
160+
setupDefaultConfigValuesHack(container);
161161

162162
serverUrlSupplier.get().ifPresent(serverUrl -> {
163-
setupConnectingToServerHack(electrumDaemonContainer, serverUrl);
163+
setupConnectingToServerHack(container, serverUrl);
164164
});
165165

166-
daemonStart(electrumDaemonContainer);
166+
daemonStart(container);
167167

168168
// let the daemon some time to startup; 5000ms seems to be enough
169-
loadWalletIfNecessary(config, electrumDaemonContainer, Duration.ofMillis(5_000));
169+
loadWalletIfNecessary(config, container, Duration.ofMillis(5_000));
170170
}
171171

172172
/**
@@ -176,16 +176,16 @@ private void restartDaemonWithCustomizedSettings(ElectrumDaemonContainerConfig c
176176
* the proper settings.
177177
* TODO: try to make the docker setup more customizable e.g. like lnzap/docker-lnd does.
178178
*/
179-
private void setupConnectingToServerHack(ElectrumDaemonContainer<?> electrumDaemonContainer, String serverUrl) {
180-
updateElectrumConfigHack(electrumDaemonContainer, "server", serverUrl);
181-
updateElectrumConfigHack(electrumDaemonContainer, "oneserver", "true");
179+
private void setupConnectingToServerHack(ElectrumDaemonContainer<?> container, String serverUrl) {
180+
updateElectrumConfigHack(container, "server", serverUrl);
181+
updateElectrumConfigHack(container, "oneserver", "true");
182182
}
183183

184-
private void setupDefaultConfigValuesHack(ElectrumDaemonContainer<?> electrumDaemonContainer) {
185-
updateElectrumConfigHack(electrumDaemonContainer, "auto_connect", "true");
186-
updateElectrumConfigHack(electrumDaemonContainer, "log_to_file", "true");
187-
updateElectrumConfigHack(electrumDaemonContainer, "check_updates", "false");
188-
updateElectrumConfigHack(electrumDaemonContainer, "dont_show_testnet_warning", "true");
184+
private void setupDefaultConfigValuesHack(ElectrumDaemonContainer<?> container) {
185+
updateElectrumConfigHack(container, "auto_connect", "true");
186+
updateElectrumConfigHack(container, "log_to_file", "true");
187+
updateElectrumConfigHack(container, "check_updates", "false");
188+
updateElectrumConfigHack(container, "dont_show_testnet_warning", "true");
189189
}
190190

191191
private Optional<String> networkFlag(ElectrumDaemonContainer<?> container) {
@@ -196,55 +196,40 @@ private Optional<String> networkFlag(ElectrumDaemonContainer<?> container) {
196196
}
197197

198198
private void daemonStart(ElectrumDaemonContainer<?> electrumDaemonContainer) {
199-
daemonExec(electrumDaemonContainer, "daemon");
199+
daemonExec(electrumDaemonContainer, "daemon", "-d");
200200
}
201201

202202
private void daemonStop(ElectrumDaemonContainer<?> electrumDaemonContainer) {
203203
daemonExec(electrumDaemonContainer, "stop");
204204
}
205205

206-
private void loadWalletIfNecessary(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> electrumDaemonContainer, Duration timeout) {
206+
private void loadWalletIfNecessary(ElectrumDaemonContainerConfig config, ElectrumDaemonContainer<?> container, Duration timeout) {
207207
if (config.getDefaultWallet().isPresent()) {
208208
try {
209209
Thread.sleep(timeout.toMillis());
210210

211-
daemonExec(electrumDaemonContainer, "load_wallet");
211+
daemonExec(container, "load_wallet");
212212
} catch (InterruptedException e) {
213213
throw new RuntimeException("Error while adapting electrum-daemon: restart with auto-loading wallet failed", e);
214214
}
215215
}
216216
}
217217

218-
private Container.ExecResult daemonExec(ElectrumDaemonContainer<?> electrumDaemonContainer, String command) {
219-
try {
220-
Optional<String> networkFlag = networkFlag(electrumDaemonContainer);
221-
222-
if (networkFlag.isEmpty()) {
223-
return electrumDaemonContainer.execInContainer("electrum", command);
224-
} else {
225-
if ("daemon".equals(command)) {
226-
return electrumDaemonContainer.execInContainer("electrum", networkFlag.get(), command, "-d");
227-
} else {
228-
return electrumDaemonContainer.execInContainer("electrum", networkFlag.get(), command);
229-
}
230-
}
231-
} catch (InterruptedException | IOException e) {
232-
String errorMessage = String.format("Error while executing `electrum daemon %s`", command);
233-
throw new RuntimeException(errorMessage, e);
234-
}
218+
private Container.ExecResult updateElectrumConfigHack(ElectrumDaemonContainer<?> container, String key, String value) {
219+
return daemonExec(container, "--offline", "setconfig", key, value);
235220
}
236221

237-
private void updateElectrumConfigHack(ElectrumDaemonContainer<?> electrumDaemonContainer, String key, String value) {
238-
try {
239-
Optional<String> networkFlag = networkFlag(electrumDaemonContainer);
222+
private Container.ExecResult daemonExec(ElectrumDaemonContainer<?> container, String... commands) {
223+
Optional<String> networkFlag = networkFlag(container);
240224

241-
if (networkFlag.isEmpty()) {
242-
electrumDaemonContainer.execInContainer("electrum", "--offline", "setconfig", key, value);
243-
} else {
244-
electrumDaemonContainer.execInContainer("electrum", "--offline", networkFlag.get(), "setconfig", key, value);
245-
}
225+
String[] command = Stream.concat(Stream.of("electrum", networkFlag.orElse("")), Stream.of(commands))
226+
.filter(it -> !it.isEmpty())
227+
.toArray(String[]::new);
228+
229+
try {
230+
return container.execInContainer(command);
246231
} catch (InterruptedException | IOException e) {
247-
String errorMessage = String.format("Error while executing `electrum setconfig %s %s`", key, value);
232+
String errorMessage = String.format("Error while executing `%s`", String.join(" ", command));
248233
throw new RuntimeException(errorMessage, e);
249234
}
250235
}

0 commit comments

Comments
 (0)