Skip to content

Commit

Permalink
Merge pull request bisq-network#822 from alvasw/electrum_extractor_sw…
Browse files Browse the repository at this point in the history
…itch_to_zip_file_extractor

ElectrumExtractor: Switch to ZipFileExtractor
  • Loading branch information
alvasw committed May 3, 2023
2 parents 1f017f9 + c74fdd7 commit bbdc388
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,18 @@

package bisq.wallets.electrum;

import bisq.common.archive.ZipFileExtractor;
import bisq.common.util.FileUtils;
import bisq.common.util.OsUtils;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

@Slf4j
public class ElectrumBinaryExtractor {
Expand All @@ -47,18 +45,18 @@ public ElectrumBinaryExtractor(Path destDirPath) {
this.destDir = destDirPath.toFile();
}

public Path extractFileWithSuffix(String fileNameSuffix) {
public void extractArchive() {
try {
createDestDirIfNotPresent();

try (InputStream inputStream = openBinariesZipAsStream()) {
if (OsUtils.isMac()) {
extractElectrumAppFileToDataDir(inputStream);
return destDir.toPath().resolve("Electrum.app");

} else {
File extractedFile = extractFileWithSuffixFromStream(inputStream, fileNameSuffix);
return extractedFile.toPath();
try (ZipFileExtractor zipFileExtractor = new ZipFileExtractor(inputStream, destDir)) {
zipFileExtractor.extractArchive();
}
}
}

Expand Down Expand Up @@ -91,27 +89,6 @@ private void extractElectrumAppFileToDataDir(InputStream inputStream) {
unpackZipFileWithUnzipCommand();
}

private File extractFileWithSuffixFromStream(InputStream inputStream, String fileSuffix) {
try (ZipInputStream zipInputStream = new ZipInputStream(inputStream)) {
byte[] buffer = new byte[1024];
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {

String fileName = zipEntry.getName();
if (fileName.endsWith(fileSuffix)) {
return writeStreamToFile(buffer, zipInputStream, fileName);
}

zipEntry = zipInputStream.getNextEntry();
}
zipInputStream.closeEntry();

} catch (IOException e) {
throw new ElectrumExtractionFailedException("Couldn't extract Electrum binary.", e);
}
throw new ElectrumExtractionFailedException("Couldn't extract Electrum binary.");
}

private void deleteElectrumAppFileIfExisting() {
File electrumAppInDataDir = new File(destDir, "Electrum.app");
if (electrumAppInDataDir.exists()) {
Expand Down Expand Up @@ -150,18 +127,4 @@ private void unpackZipFileWithUnzipCommand() {
throw new ElectrumExtractionFailedException("Could not copy Electrum.app to data directory.");
}
}

private File writeStreamToFile(byte[] buffer, InputStream inputStream, String fileName) {
File destFile = new File(destDir, fileName);
try (FileOutputStream outputStream = new FileOutputStream(destFile)) {
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}

return destFile;
} catch (IOException e) {
throw new ElectrumExtractionFailedException("Couldn't write to stream to: " + destFile);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,7 @@ public void shutdown() {
private void unpackArchive() {
Path destDirPath = electrumRootDataDir.resolve("bin");
var binaryExtractor = new ElectrumBinaryExtractor(destDirPath);
String binarySuffix = getBinarySuffix();
binaryExtractor.extractFileWithSuffix(binarySuffix);
binaryExtractor.extractArchive();
}

private void createAndStartProcess() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,22 @@
import static org.assertj.core.api.Assertions.assertThat;

public class ElectrumBinaryExtractorTest {
private final ElectrumBinaryExtractor binaryExtractor;
private final Path destDirPath = FileUtils.createTempDir();
private final ElectrumBinaryExtractor binaryExtractor = new ElectrumBinaryExtractor(destDirPath);

public ElectrumBinaryExtractorTest() throws IOException {
Path destDirPath = FileUtils.createTempDir();
binaryExtractor = new ElectrumBinaryExtractor(destDirPath);
}

@Test
void extractBinaries() {
String binarySuffix = ElectrumProcess.getBinarySuffix();
Path electrumBinaryPath = binaryExtractor.extractFileWithSuffix(binarySuffix);
File electrumBinary = electrumBinaryPath.toFile();
binaryExtractor.extractArchive();

File[] filesInDir = destDirPath.toFile().listFiles();
assertThat(filesInDir).isNotEmpty();

assertThat(electrumBinary.exists())
.isTrue();
assertThat(electrumBinary.length())
.isGreaterThan(0);
File extractedFile = filesInDir[0];
String binarySuffix = ElectrumProcess.getBinarySuffix();
assertThat(extractedFile.getName())
.endsWith(binarySuffix);
}
}

0 comments on commit bbdc388

Please sign in to comment.