5 changed files with 181 additions and 53 deletions
@ -1,21 +0,0 @@
@@ -1,21 +0,0 @@
|
||||
package org.springframework.boot.context.config; |
||||
|
||||
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; |
||||
import org.springframework.boot.diagnostics.FailureAnalysis; |
||||
|
||||
/** |
||||
* |
||||
* An implementation of {@link AbstractFailureAnalyzer} to analyze failures caused by |
||||
* {@link ConfigDataLocationNotFoundException}. |
||||
* |
||||
* @author Michal Mlak |
||||
*/ |
||||
public class ConfigDataLocationNotFoundExceptionFailureAnalyzer |
||||
extends AbstractFailureAnalyzer<ConfigDataLocationNotFoundException> { |
||||
|
||||
@Override |
||||
protected FailureAnalysis analyze(Throwable rootFailure, ConfigDataLocationNotFoundException cause) { |
||||
return new FailureAnalysis(cause.getMessage(), null, cause); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,62 @@
@@ -0,0 +1,62 @@
|
||||
/* |
||||
* Copyright 2012-2020 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.context.config; |
||||
|
||||
import org.springframework.boot.diagnostics.AbstractFailureAnalyzer; |
||||
import org.springframework.boot.diagnostics.FailureAnalysis; |
||||
import org.springframework.boot.origin.Origin; |
||||
|
||||
/** |
||||
* An implementation of {@link AbstractFailureAnalyzer} to analyze failures caused by |
||||
* {@link ConfigDataNotFoundException}. |
||||
* |
||||
* @author Michal Mlak |
||||
* @author Phillip Webb |
||||
*/ |
||||
class ConfigDataNotFoundFailureAnalyzer extends AbstractFailureAnalyzer<ConfigDataNotFoundException> { |
||||
|
||||
@Override |
||||
protected FailureAnalysis analyze(Throwable rootFailure, ConfigDataNotFoundException cause) { |
||||
ConfigDataLocation location = getLocation(cause); |
||||
Origin origin = Origin.from(location); |
||||
StringBuilder message = new StringBuilder( |
||||
String.format("Config data %s does not exist", cause.getReferenceDescription())); |
||||
StringBuilder action = new StringBuilder("Check that the value "); |
||||
if (location != null) { |
||||
action.append(String.format("'%s' ", location)); |
||||
} |
||||
if (origin != null) { |
||||
action.append(String.format("at %s ", origin)); |
||||
} |
||||
action.append("is correct"); |
||||
if (location != null && !location.isOptional()) { |
||||
action.append(String.format(", or prefix it with '%s'", ConfigDataLocation.OPTIONAL_PREFIX)); |
||||
} |
||||
return new FailureAnalysis(message.toString(), action.toString(), cause); |
||||
} |
||||
|
||||
private ConfigDataLocation getLocation(ConfigDataNotFoundException cause) { |
||||
if (cause instanceof ConfigDataLocationNotFoundException) { |
||||
return ((ConfigDataLocationNotFoundException) cause).getLocation(); |
||||
} |
||||
if (cause instanceof ConfigDataResourceNotFoundException) { |
||||
return ((ConfigDataResourceNotFoundException) cause).getLocation(); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
} |
||||
@ -1,30 +0,0 @@
@@ -1,30 +0,0 @@
|
||||
package org.springframework.boot.context.config; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
import org.springframework.boot.diagnostics.FailureAnalysis; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
import static org.mockito.Mockito.mock; |
||||
|
||||
/** |
||||
* |
||||
* Tests for {@link ConfigDataLocationNotFoundExceptionFailureAnalyzer} |
||||
* |
||||
* @author Michal Mlak |
||||
*/ |
||||
class ConfigDataLocationNotFoundExceptionFailureAnalyzerTests { |
||||
|
||||
private final ConfigDataLocationNotFoundExceptionFailureAnalyzer analyzer = new ConfigDataLocationNotFoundExceptionFailureAnalyzer(); |
||||
|
||||
@Test |
||||
void failureAnalysisForConfigDataLocationNotFound() { |
||||
ConfigDataLocation location = mock(ConfigDataLocation.class); |
||||
ConfigDataLocationNotFoundException exception = new ConfigDataLocationNotFoundException(location); |
||||
|
||||
FailureAnalysis result = analyzer.analyze(exception); |
||||
|
||||
assertThat(result.getDescription()).isEqualTo("Config data location '" + location + "' does not exist"); |
||||
assertThat(result.getAction()).isNull(); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,117 @@
@@ -0,0 +1,117 @@
|
||||
/* |
||||
* Copyright 2012-2020 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.context.config; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.boot.diagnostics.FailureAnalysis; |
||||
import org.springframework.boot.origin.Origin; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ConfigDataNotFoundFailureAnalyzer} |
||||
* |
||||
* @author Michal Mlak |
||||
* @author Phillip Webb |
||||
*/ |
||||
class ConfigDataNotFoundFailureAnalyzerTests { |
||||
|
||||
private final ConfigDataNotFoundFailureAnalyzer analyzer = new ConfigDataNotFoundFailureAnalyzer(); |
||||
|
||||
@Test |
||||
void analyzeWhenConfigDataLocationNotFoundException() { |
||||
ConfigDataLocation location = ConfigDataLocation.of("test"); |
||||
ConfigDataLocationNotFoundException exception = new ConfigDataLocationNotFoundException(location); |
||||
FailureAnalysis result = this.analyzer.analyze(exception); |
||||
assertThat(result.getDescription()).isEqualTo("Config data location 'test' does not exist"); |
||||
assertThat(result.getAction()) |
||||
.isEqualTo("Check that the value 'test' is correct, or prefix it with 'optional:'"); |
||||
} |
||||
|
||||
@Test |
||||
void analyzeWhenOptionalConfigDataLocationNotFoundException() { |
||||
ConfigDataLocation location = ConfigDataLocation.of("optional:test"); |
||||
ConfigDataLocationNotFoundException exception = new ConfigDataLocationNotFoundException(location); |
||||
FailureAnalysis result = this.analyzer.analyze(exception); |
||||
assertThat(result.getDescription()).isEqualTo("Config data location 'optional:test' does not exist"); |
||||
assertThat(result.getAction()).isEqualTo("Check that the value 'optional:test' is correct"); |
||||
} |
||||
|
||||
@Test |
||||
void analyzeWhenConfigDataLocationWithOriginNotFoundException() { |
||||
ConfigDataLocation location = ConfigDataLocation.of("test").withOrigin(new TestOrigin("origin")); |
||||
ConfigDataLocationNotFoundException exception = new ConfigDataLocationNotFoundException(location); |
||||
FailureAnalysis result = this.analyzer.analyze(exception); |
||||
assertThat(result.getDescription()).isEqualTo("Config data location 'test' does not exist"); |
||||
assertThat(result.getAction()) |
||||
.isEqualTo("Check that the value 'test' at origin is correct, or prefix it with 'optional:'"); |
||||
} |
||||
|
||||
@Test |
||||
void analyzeWhenConfigDataResourceNotFoundException() { |
||||
ConfigDataResource resource = new TestConfigDataResource("myresource"); |
||||
ConfigDataResourceNotFoundException exception = new ConfigDataResourceNotFoundException(resource); |
||||
FailureAnalysis result = this.analyzer.analyze(exception); |
||||
assertThat(result.getDescription()).isEqualTo("Config data resource 'myresource' does not exist"); |
||||
assertThat(result.getAction()).isEqualTo("Check that the value is correct"); |
||||
} |
||||
|
||||
@Test |
||||
void analyzeWhenConfigDataResourceWithLocationNotFoundException() { |
||||
ConfigDataLocation location = ConfigDataLocation.of("test"); |
||||
ConfigDataResource resource = new TestConfigDataResource("myresource"); |
||||
ConfigDataResourceNotFoundException exception = new ConfigDataResourceNotFoundException(resource) |
||||
.withLocation(location); |
||||
FailureAnalysis result = this.analyzer.analyze(exception); |
||||
assertThat(result.getDescription()) |
||||
.isEqualTo("Config data resource 'myresource' via location 'test' does not exist"); |
||||
assertThat(result.getAction()) |
||||
.isEqualTo("Check that the value 'test' is correct, or prefix it with 'optional:'"); |
||||
} |
||||
|
||||
static class TestOrigin implements Origin { |
||||
|
||||
private final String string; |
||||
|
||||
TestOrigin(String string) { |
||||
this.string = string; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return this.string; |
||||
} |
||||
|
||||
} |
||||
|
||||
static class TestConfigDataResource extends ConfigDataResource { |
||||
|
||||
private final String string; |
||||
|
||||
TestConfigDataResource(String string) { |
||||
this.string = string; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return this.string; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue