Skip to content
This repository was archived by the owner on Apr 10, 2024. It is now read-only.

Commit b0cb0b1

Browse files
committed
api improvements
1 parent 88467d3 commit b0cb0b1

File tree

6 files changed

+120
-53
lines changed

6 files changed

+120
-53
lines changed

src/main/java/com/csviri/jenvtest/APIServer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@ public class APIServer implements UnexpectedProcessStopHandler {
1818
private final APIServerProcessManager apiServerProcessManager;
1919

2020
public APIServer() {
21-
this(new APIServerConfig());
21+
this(APIServerConfigBuilder.anAPIServerConfig().build());
2222
}
2323

2424
public APIServer(APIServerConfig config) {
2525
this.config = config;
2626
this.binaryManager = new BinaryManager(config);
27-
this.certManager = new CertManager(config.getJenvtestDirectory());
27+
this.certManager = new CertManager(config.getJenvtestDir());
2828
this.kubeConfigManager = new KubeConfigManager(certManager, binaryManager);
2929
this.etcdProcessManager = new EtcdProcessManager(binaryManager, this);
3030
this.apiServerProcessManager = new APIServerProcessManager(certManager, binaryManager, this, config);
3131
}
3232

3333
public void start() {
34-
log.debug("Stating API Server. Using jenvtest dir: {}", config.getJenvtestDirectory());
34+
log.debug("Stating API Server. Using jenvtest dir: {}", config.getJenvtestDir());
3535
binaryManager.initAndDownloadIfRequired();
3636
certManager.createCertificatesIfNeeded();
3737
etcdProcessManager.cleanEtcdData();
Lines changed: 9 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,41 @@
11
package com.csviri.jenvtest;
22

3-
import java.io.File;
43
import java.util.Optional;
54

65
public class APIServerConfig {
76

8-
public static final String JENVTEST_DOWNLOAD_BINARIES = "JENVTEST_DOWNLOAD_BINARIES";
9-
public static final String JENVTEST_DIR_ENV_VAR = "JENVTEST_DIR";
10-
11-
public static final String DIRECTORY_NAME = ".jenvtest";
12-
13-
147
/**
158
* Set directory where binaries and other assets are present. Default is ~/.jenvtest.
169
**/
17-
private String jenvtestDir;
10+
private final String jenvtestDir;
1811

1912
/**
2013
* If not set the latest binary will be selected automatically
2114
* Sample: 1.26.1, 1.25.0.
2215
*/
23-
private String apiServerVersion;
16+
private final String apiServerVersion;
2417

2518
/**
2619
* If true, tries to download binaries. If the apiServerVersion is not set and some local binaries found
2720
* won't try to download them again.
2821
* */
29-
private boolean downloadBinaries = true;
22+
private final boolean downloadBinaries;
3023

31-
public APIServerConfig() {
32-
var jenvtestDirFromEnvVar = System.getenv(JENVTEST_DIR_ENV_VAR);
33-
if (jenvtestDirFromEnvVar != null) {
34-
this.jenvtestDir = jenvtestDirFromEnvVar;
35-
} else {
36-
this.jenvtestDir = new File(System.getProperty("user.home"), DIRECTORY_NAME).getPath();
37-
}
38-
var downloadBinariesEnvVal = System.getenv(JENVTEST_DOWNLOAD_BINARIES);
39-
if (downloadBinariesEnvVal != null) {
40-
this.downloadBinaries = Boolean.parseBoolean(downloadBinariesEnvVal);
41-
}
24+
APIServerConfig(String jenvtestDir, String apiServerVersion, boolean downloadBinaries) {
25+
this.jenvtestDir = jenvtestDir;
26+
this.apiServerVersion = apiServerVersion;
27+
this.downloadBinaries = downloadBinaries;
4228
}
4329

44-
public String getJenvtestDirectory() {
30+
public String getJenvtestDir() {
4531
return jenvtestDir;
4632
}
4733

48-
public APIServerConfig setJenvtestDir(String jenvtestDir) {
49-
this.jenvtestDir = jenvtestDir;
50-
return this;
51-
}
52-
5334
public Optional<String> getApiServerVersion() {
5435
return Optional.ofNullable(apiServerVersion);
5536
}
5637

57-
public APIServerConfig setApiServerVersion(String apiServerVersion) {
58-
this.apiServerVersion = apiServerVersion;
59-
return this;
60-
}
61-
62-
public String logDirectory() {
63-
return new File(jenvtestDir, "logs").getPath();
64-
}
65-
66-
public boolean getDownloadBinaries() {
38+
public boolean isDownloadBinaries() {
6739
return downloadBinaries;
6840
}
69-
70-
public APIServerConfig setDownloadBinaries(boolean downloadBinaries) {
71-
this.downloadBinaries = downloadBinaries;
72-
return this;
73-
}
7441
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.csviri.jenvtest;
2+
3+
import java.io.File;
4+
5+
public final class APIServerConfigBuilder {
6+
7+
public static final String JENVTEST_DOWNLOAD_BINARIES = "JENVTEST_DOWNLOAD_BINARIES";
8+
public static final String JENVTEST_DIR_ENV_VAR = "JENVTEST_DIR";
9+
public static final String JENVTEST_API_SERVER_VERSION_ENV_VAR = "JENVTEST_API_SERVER_VERSION";
10+
11+
public static final String DIRECTORY_NAME = ".jenvtest";
12+
13+
private String jenvtestDir;
14+
private String apiServerVersion;
15+
private Boolean downloadBinaries;
16+
17+
public APIServerConfigBuilder() {
18+
}
19+
20+
public static APIServerConfigBuilder anAPIServerConfig() {
21+
return new APIServerConfigBuilder();
22+
}
23+
24+
public APIServerConfigBuilder withJenvtestDir(String jenvtestDir) {
25+
this.jenvtestDir = jenvtestDir;
26+
return this;
27+
}
28+
29+
public APIServerConfigBuilder withApiServerVersion(String apiServerVersion) {
30+
this.apiServerVersion = apiServerVersion;
31+
return this;
32+
}
33+
34+
public APIServerConfigBuilder withDownloadBinaries(boolean downloadBinaries) {
35+
this.downloadBinaries = downloadBinaries;
36+
return this;
37+
}
38+
39+
public APIServerConfig build() {
40+
if (jenvtestDir == null) {
41+
var jenvtestDirFromEnvVar = System.getenv(JENVTEST_DIR_ENV_VAR);
42+
if (jenvtestDirFromEnvVar != null) {
43+
this.jenvtestDir = jenvtestDirFromEnvVar;
44+
} else {
45+
this.jenvtestDir = new File(System.getProperty("user.home"), DIRECTORY_NAME).getPath();
46+
}
47+
}
48+
if (downloadBinaries == null) {
49+
var downloadBinariesEnvVal = System.getenv(JENVTEST_DOWNLOAD_BINARIES);
50+
if (downloadBinariesEnvVal != null) {
51+
this.downloadBinaries = Boolean.parseBoolean(downloadBinariesEnvVal);
52+
} else {
53+
this.downloadBinaries = true;
54+
}
55+
}
56+
if (apiServerVersion == null) {
57+
var apiServerVersionEnvVar = System.getenv(JENVTEST_DIR_ENV_VAR);
58+
if (apiServerVersionEnvVar != null) {
59+
this.apiServerVersion = apiServerVersionEnvVar;
60+
}
61+
}
62+
return new APIServerConfig(jenvtestDir, apiServerVersion, downloadBinaries);
63+
}
64+
}

src/main/java/com/csviri/jenvtest/APIServerProcessManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void startApiServer() {
3838
}
3939

4040
apiServerProcess = new ProcessBuilder(apiServerBinary.getAbsolutePath(),
41-
"--cert-dir", config.getJenvtestDirectory(),
41+
"--cert-dir", config.getJenvtestDir(),
4242
"--etcd-servers", "http://0.0.0.0:2379",
4343
"--authorization-mode", "RBAC",
4444
"--service-account-issuer", "https://localhost",

src/main/java/com/csviri/jenvtest/binary/BinaryManager.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,21 @@ public class BinaryManager {
1818

1919
private Binaries binaries;
2020
private final APIServerConfig config;
21-
BinaryDownloader downloader;
21+
private BinaryDownloader downloader;
2222

2323
public BinaryManager(APIServerConfig config) {
2424
this.config = config;
25-
downloader = new BinaryDownloader(config.getJenvtestDirectory());
25+
downloader = new BinaryDownloader(config.getJenvtestDir());
2626
}
2727

2828
public void initAndDownloadIfRequired() {
2929
Optional<File> maybeBinaryDir = findLatestBinariesAvailable();
3030
File binaryDir = maybeBinaryDir.orElse(null);
3131

3232
if (maybeBinaryDir.isEmpty()) {
33-
if (!config.getDownloadBinaries()) {
33+
if (!config.isDownloadBinaries()) {
3434
throw new JenvtestException("Binaries cannot be found, and download is turned off");
3535
}
36-
3736
binaryDir = config.getApiServerVersion().isEmpty() ?
3837
downloader.downloadLatest()
3938
: downloader.download(config.getApiServerVersion().get());
@@ -61,15 +60,14 @@ public Binaries binaries() {
6160
throw new JenvtestException("Binaries not found.");
6261
}
6362
return binaries;
64-
6563
}
6664

6765
private Optional<File> findLatestBinariesAvailable() {
6866
if (config.getApiServerVersion().isPresent()) {
69-
return Optional.of(new File(config.getJenvtestDirectory(), BINARY_LIST_DIR
67+
return Optional.of(new File(config.getJenvtestDir(), BINARY_LIST_DIR
7068
+ File.separator + config.getApiServerVersion() + PLATFORM_SUFFIX));
7169
}
72-
File binariesListDir = new File(config.getJenvtestDirectory(), BINARY_LIST_DIR);
70+
File binariesListDir = new File(config.getJenvtestDir(), BINARY_LIST_DIR);
7371
if (!binariesListDir.exists()) {
7472
return Optional.empty();
7573
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.csviri.jenvtest;
2+
3+
import org.apache.commons.io.FileUtils;
4+
import org.junit.jupiter.api.AfterEach;
5+
import org.junit.jupiter.api.Test;
6+
7+
import java.io.File;
8+
import java.io.IOException;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
import static org.junit.jupiter.api.Assertions.*;
14+
15+
class CertManagerTest {
16+
17+
File certsDir = new File("target","certs");
18+
CertManager certManager = new CertManager(certsDir.getPath());
19+
20+
@AfterEach
21+
void cleanup() throws IOException {
22+
if (certsDir.exists()) {
23+
FileUtils.cleanDirectory(certsDir);
24+
}
25+
}
26+
27+
@Test
28+
void generatesCertificates() throws IOException {
29+
certsDir.mkdirs();
30+
FileUtils.cleanDirectory(certsDir);
31+
32+
certManager.createCertificatesIfNeeded();
33+
34+
var files = List.of(certsDir.list());
35+
assertThat(files.size()).isEqualTo(4);
36+
}
37+
38+
}

0 commit comments

Comments
 (0)