aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorten Tokle <mortent@yahooinc.com>2023-08-04 12:22:50 +0200
committerMorten Tokle <mortent@yahooinc.com>2023-08-09 12:32:35 +0200
commitaae1b7b4dd03f5d06da63d1a644dd65089ce3dfc (patch)
tree2fbb2ccac17ee1e3fcbe2e44fb1f4c0976ac21d1
parent97ae03d5238964e9cdb520d03793cd2daeda5b2c (diff)
Keep original port when restricting bindings to dataplane port
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java27
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java6
4 files changed, 36 insertions, 11 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java
index feb7ce36171..f869d578dcb 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/UriBindingsValidator.java
@@ -73,7 +73,7 @@ class UriBindingsValidator extends Validator {
}
private static String createErrorMessage(BindingPattern binding, String message) {
- return String.format("For binding '%s': %s", binding.patternString(), message);
+ return String.format("For binding '%s': %s", binding.originalPatternString(), message);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java
index c3dae7e4c8a..791b59f82a6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/BindingPattern.java
@@ -63,11 +63,21 @@ public abstract class BindingPattern implements Comparable<BindingPattern> {
return builder.append(path).toString();
}
+ public String originalPatternString() {
+ StringBuilder builder = new StringBuilder(scheme).append("://").append(host);
+ originalPort().ifPresent(port -> builder.append(':').append(port));
+ return builder.append(path).toString();
+ }
+
/** Compares the underlying pattern string for equality */
public boolean hasSamePattern(BindingPattern other) { return this.patternString().equals(other.patternString()); }
/** Returns true if pattern will match any port (if present) in uri **/
- public boolean matchesAnyPort() { return port().filter(p -> !p.equals(WILDCARD_PATTERN)).isEmpty(); }
+ public boolean matchesAnyPort() { return originalPort().filter(p -> !p.equals(WILDCARD_PATTERN)).isEmpty(); }
+
+ protected Optional<String> originalPort() {
+ return port();
+ }
@Override
public boolean equals(Object o) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java b/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java
index 182eca835c1..0f2480a6812 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/component/UserBindingPattern.java
@@ -1,6 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.model.container.component;
+import java.util.Objects;
+import java.util.Optional;
+
/**
* A {@link BindingPattern} which is constructed directly from a user provided 'binding' element from services.xml.
*
@@ -8,12 +11,30 @@ package com.yahoo.vespa.model.container.component;
*/
public class UserBindingPattern extends BindingPattern {
- private UserBindingPattern(String scheme, String host, String port, String path) { super(scheme, host, port, path); }
- private UserBindingPattern(String binding) { super(binding); }
+ private final Optional<String> originalPort;
+
+ private UserBindingPattern(String scheme, String host, String port, String path) {
+ super(scheme, host, port, path);
+ this.originalPort = null;
+ }
+ private UserBindingPattern(String scheme, String host, String port, Optional<String> originalPort, String path) {
+ super(scheme, host, port, path);
+ this.originalPort = originalPort;
+ }
+ private UserBindingPattern(String binding) {
+ super(binding);
+ this.originalPort = null;
+ }
public static UserBindingPattern fromHttpPath(String path) { return new UserBindingPattern("http", "*", null, path); }
public static UserBindingPattern fromPattern(String binding) { return new UserBindingPattern(binding); }
- public UserBindingPattern withPort(int port) { return new UserBindingPattern(scheme(), host(), Integer.toString(port), path()); }
+ public UserBindingPattern withPort(int port) { return new UserBindingPattern(scheme(), host(), Integer.toString(port), port(), path()); }
+
+ protected Optional<String> originalPort() {
+ return Objects.isNull(originalPort)
+ ? port()
+ : originalPort;
+ }
@Override
public String toString() {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java
index fa359d0f2db..a56b268eeab 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/UriBindingsValidatorTest.java
@@ -57,12 +57,6 @@ public class UriBindingsValidatorTest {
runUriBindingValidator(true, createServicesXmlWithHandler("http://*/my-handler"));
}
- @Test
- void allows_portbinding_when_restricting_data_plane() throws IOException, SAXException {
- runUriBindingValidator(new TestProperties().setHostedVespa(true), createServicesXmlWithHandler("http://*:4443/my-handler"));
- }
-
- @Test
void allows_user_binding_with_wildcard_port() throws IOException, SAXException {
runUriBindingValidator(true, createServicesXmlWithHandler("http://*:*/my-handler"));
}