Skip to content

Commit 87064a8

Browse files
committed
Create/Update route options
Refactor _RouteOptions class to handle added options in future
1 parent a8f7c09 commit 87064a8

File tree

5 files changed

+108
-5
lines changed

5 files changed

+108
-5
lines changed

cloudfoundry-client/src/main/java/org/cloudfoundry/client/v3/routes/_CreateRouteRequest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ abstract class _CreateRouteRequest {
2727
@JsonProperty("metadata")
2828
abstract Metadata getMetadata();
2929

30+
/**
31+
* Route options
32+
*/
33+
@Nullable
34+
@JsonProperty("options")
35+
abstract RouteOptions getOptions();
36+
3037
/**
3138
* The path
3239
*/
Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
package org.cloudfoundry.client.v3.routes;
22

3+
import java.util.Map;
4+
import java.util.Optional;
5+
6+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
7+
import com.fasterxml.jackson.annotation.JsonIgnore;
8+
import com.fasterxml.jackson.annotation.JsonInclude;
39
import com.fasterxml.jackson.annotation.JsonProperty;
410
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5-
import org.cloudfoundry.Nullable;
11+
import org.cloudfoundry.AllowNulls;
612
import org.immutables.value.Value;
713

814
/**
@@ -13,10 +19,40 @@
1319
abstract class _RouteOptions {
1420

1521
/**
16-
* The loadbalancing
22+
* All route options, including unknown future keys.
1723
*/
18-
@JsonProperty("loadbalancing")
19-
@Nullable
20-
public abstract String getLoadbalancing();
24+
@JsonAnyGetter
25+
@JsonProperty("options")
26+
@JsonInclude(value = JsonInclude.Include.ALWAYS)
27+
@AllowNulls
28+
public abstract Map<String, Object> getValues();
29+
30+
@JsonIgnore
31+
@Value.Derived
32+
public Optional<String> getLoadbalancing() {
33+
return getString("loadbalancing");
34+
}
35+
36+
@JsonIgnore
37+
@Value.Derived
38+
public Optional<String> getHashHeader() {
39+
return getString("hash_header");
40+
}
41+
42+
@JsonIgnore
43+
@Value.Derived
44+
public Optional<String> getHashBalance() {
45+
return getString("hash_balance");
46+
}
47+
48+
@JsonIgnore
49+
public Optional<Object> get(String key) {
50+
return Optional.ofNullable(getValues().get(key));
51+
}
52+
53+
private Optional<String> getString(String key) {
54+
Object value = getValues().get(key);
55+
return value instanceof String ? Optional.of((String) value) : Optional.empty();
56+
}
2157

2258
}

cloudfoundry-client/src/main/java/org/cloudfoundry/client/v3/routes/_UpdateRouteRequest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ abstract class _UpdateRouteRequest {
2121
@Nullable
2222
abstract Metadata getMetadata();
2323

24+
/**
25+
* Route options
26+
*/
27+
@JsonProperty("options")
28+
@Nullable
29+
abstract RouteOptions getOptions();
30+
2431
/**
2532
* The route id
2633
*/

cloudfoundry-client/src/test/java/org/cloudfoundry/client/v3/routes/CreateRouteRequestTest.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.cloudfoundry.client.v3.routes;
1818

19+
import static org.junit.jupiter.api.Assertions.assertEquals;
1920
import static org.junit.jupiter.api.Assertions.assertThrows;
2021

2122
import org.cloudfoundry.client.v3.Relationship;
@@ -94,4 +95,37 @@ void valid() {
9495
.build())
9596
.build());
9697
}
98+
99+
@Test
100+
void validWithRouteOptions() {
101+
CreateRouteRequest request = CreateRouteRequest.builder()
102+
.relationships(
103+
RouteRelationships.builder()
104+
.domain(
105+
ToOneRelationship.builder()
106+
.data(
107+
Relationship.builder()
108+
.id("test-domain-id")
109+
.build())
110+
.build())
111+
.space(
112+
ToOneRelationship.builder()
113+
.data(
114+
Relationship.builder()
115+
.id("test-space-id")
116+
.build())
117+
.build())
118+
.build())
119+
.options(
120+
RouteOptions.builder()
121+
.value("loadbalancing", "hash")
122+
.value("hash_header", "X-Hash")
123+
.value("hash_balance", "90")
124+
.build())
125+
.build();
126+
127+
assertEquals("hash", request.getOptions().getLoadbalancing().get());
128+
assertEquals("X-Hash", request.getOptions().getHashHeader().get());
129+
assertEquals("90", request.getOptions().getHashBalance().get());
130+
}
97131
}

cloudfoundry-client/src/test/java/org/cloudfoundry/client/v3/routes/UpdateRouteRequestTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.cloudfoundry.client.v3.routes;
1818

19+
import static org.junit.jupiter.api.Assertions.assertEquals;
1920
import static org.junit.jupiter.api.Assertions.assertThrows;
2021

2122
import org.cloudfoundry.client.v3.Metadata;
@@ -39,4 +40,22 @@ void valid() {
3940
.routeId("test-route-id")
4041
.build();
4142
}
43+
44+
@Test
45+
void validWithRouteOptions() {
46+
UpdateRouteRequest request = UpdateRouteRequest.builder()
47+
.metadata(Metadata.builder().label("test-key", "test-value").build())
48+
.options(
49+
RouteOptions.builder()
50+
.value("loadbalancing", "hash")
51+
.value("hash_header", "X-Hash")
52+
.value("hash_balance", "90")
53+
.build())
54+
.routeId("test-route-id")
55+
.build();
56+
57+
assertEquals("hash", request.getOptions().getLoadbalancing().get());
58+
assertEquals("X-Hash", request.getOptions().getHashHeader().get());
59+
assertEquals("90", request.getOptions().getHashBalance().get());
60+
}
4261
}

0 commit comments

Comments
 (0)