Skip to content
Snippets Groups Projects
Commit d751dbea authored by Martin Vogel's avatar Martin Vogel
Browse files

refactor(config): print error with all available environments if the...

refactor(config): print error with all available environments if the configured active environment is missing
parent 7286be35
No related branches found
No related tags found
No related merge requests found
package de.fitko.fitconnect.api.config; package de.fitko.fitconnect.api.config;
import de.fitko.fitconnect.api.exceptions.InitializationException;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Data @Data
@Builder @Builder
...@@ -15,24 +17,35 @@ public class ApplicationConfig { ...@@ -15,24 +17,35 @@ public class ApplicationConfig {
@Builder.Default @Builder.Default
private String httpProxyHost = ""; private String httpProxyHost = "";
@Builder.Default @Builder.Default
private Integer httpProxyPort = 0; private Integer httpProxyPort = 0;
@Builder.Default
@Builder.Default
private Integer requestTimeoutInSeconds = 30; private Integer requestTimeoutInSeconds = 30;
private String metadataSchemaPath;
private String privateSigningKeyPath; @Builder.Default
private String metadataSchemaPath = "";
@Builder.Default
private String privateSigningKeyPath = "";
private SenderConfig senderConfig; private SenderConfig senderConfig;
private SubscriberConfig subscriberConfig; private SubscriberConfig subscriberConfig;
private Map<EnvironmentName, Environment> environments; private Map<EnvironmentName, Environment> environments;
private EnvironmentName activeEnvironment; private EnvironmentName activeEnvironment;
private ResourcePaths resourcePaths; private ResourcePaths resourcePaths;
public Environment getEnvironmentByName(final EnvironmentName environmentName) { public Environment getEnvironmentByName(final EnvironmentName environmentName) {
return environments.get(environmentName); if (environments.containsKey(environmentName)) {
return environments.get(environmentName);
} else {
throw new InitializationException("No environment with name '" + environmentName.getName() + "' found. Available environments are: " + getAvailableEnvironmentNames());
}
} }
public Environment getCurrentEnvironment() { public Environment getCurrentEnvironment() {
...@@ -70,5 +83,12 @@ public class ApplicationConfig { ...@@ -70,5 +83,12 @@ public class ApplicationConfig {
private String getSubmissionBaseUrl() { private String getSubmissionBaseUrl() {
return getCurrentEnvironment().getSubmissionBaseUrl(); return getCurrentEnvironment().getSubmissionBaseUrl();
} }
private String getAvailableEnvironmentNames() {
return environments.keySet()
.stream()
.map(EnvironmentName::getName)
.collect(Collectors.joining(" | "));
}
} }
...@@ -3,6 +3,7 @@ package de.fitko.fitconnect.client.factory; ...@@ -3,6 +3,7 @@ package de.fitko.fitconnect.client.factory;
import de.fitko.fitconnect.api.config.ApplicationConfig; import de.fitko.fitconnect.api.config.ApplicationConfig;
import de.fitko.fitconnect.api.config.Environment; import de.fitko.fitconnect.api.config.Environment;
import de.fitko.fitconnect.api.config.SenderConfig; import de.fitko.fitconnect.api.config.SenderConfig;
import de.fitko.fitconnect.api.exceptions.InitializationException;
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -13,16 +14,31 @@ import java.nio.file.Path; ...@@ -13,16 +14,31 @@ import java.nio.file.Path;
import java.util.Objects; import java.util.Objects;
import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
class ApplicationConfigLoaderTest { class ApplicationConfigLoaderTest {
@Test @Test
void testLoadMissingConfigFile(){ void testLoadMissingConfigFile() {
Assertions.assertThrows(IOException.class, () -> ApplicationConfigLoader.loadConfig(Path.of("/no/path"))); Assertions.assertThrows(IOException.class, () -> ApplicationConfigLoader.loadConfig(Path.of("/no/path")));
} }
@Test
void testEnvironmentNotAvailable() throws IOException {
// Given
final String testConfigYaml = getResourceAsString("test-config-with-missing-env.yml");
final ApplicationConfig config = ApplicationConfigLoader.loadConfig(testConfigYaml);
//When
final InitializationException exception = Assertions.assertThrowsExactly(InitializationException.class, () -> config.getCurrentEnvironment());
//Then
assertThat(exception.getMessage(), containsString("Available environments are: prod | staging | dev | testing | local"));
}
@Test @Test
void testLoadTestConfigFromString() throws IOException { void testLoadTestConfigFromString() throws IOException {
......
# Proxy config for http api calls
httpProxyHost: ""
httpProxyPort: 0
requestTimeoutInSeconds: 30
# Name/key of the used environment (from environments config below)
activeEnvironment: foo
# Path that references the metadata schema
metadataSchemaPath: "client/src/test/java/resources/metadata_schema.json"
# Path that references the signing key file
privateSigningKeyPath: "client/src/test/java/resources/private_test_signing_key.json"
senderConfig:
clientId: "1"
clientSecret: "123"
subscriberConfig:
clientId: "2"
clientSecret: "456"
# Path that references the private key file
privateDecryptionKeyPath: "client/src/test/java/resources/private_decryption_test_key.json"
securityEventTokenSchemaPath: ""
# Configured environments for all api-urls
environments:
prod:
authBaseUrl: "https://auth-prod.fit-connect.fitko.dev"
submissionBaseUrl: "https://submission-api-prod.fit-connect.fitko.dev"
silentKeyValidation: false
staging:
authBaseUrl: "https://auth-prod.fit-connect.fitko.dev"
submissionBaseUrl: "https://submission-api-prod.fit-connect.fitko.dev"
silentKeyValidation: false
dev:
authBaseUrl: "https://auth-testing.fit-connect.fitko.dev"
submissionBaseUrl: "https://submission-api-testing.fit-connect.fitko.dev"
silentKeyValidation: true
testing:
authBaseUrl: "https://auth-test.fit-connect.fitko.dev"
submissionBaseUrl: "https://submission-api-testing.fit-connect.fitko.dev"
silentKeyValidation: true
local:
authBaseUrl: "https://auth-test.fit-connect.fitko.dev"
submissionBaseUrl: "https://submission-api-testing.fit-connect.fitko.dev"
silentKeyValidation: true
# REST Endpoints for FIT-Connect resources
resourcePaths:
authTokenPath: "/token"
destinationPath: "/v1/destinations/{destinationId}"
destinationKeyPath: "/v1/destinations/{destinationId}/keys/{kid}"
eventLogPath: "/v1/cases/{caseId}/events"
submissionPath: "/v1/submissions/{submissionId}"
submissionsPath: "/v1/submissions"
submissionAttachmentPath: "/v1/submissions/{submissionId}/attachments/{attachmentId}"
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment