Skip to content

Commit 6c96639

Browse files
committed
Feature Flags to Reactor
This change moves the Client V2 Feature Flags to Reactor.
1 parent c3d0a57 commit 6c96639

File tree

4 files changed

+134
-111
lines changed

4 files changed

+134
-111
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Copyright 2013-2016 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.cloudfoundry.reactor.client.v2.featureflags;
18+
19+
import com.fasterxml.jackson.databind.ObjectMapper;
20+
import org.cloudfoundry.client.v2.featureflags.FeatureFlags;
21+
import org.cloudfoundry.client.v2.featureflags.GetFeatureFlagRequest;
22+
import org.cloudfoundry.client.v2.featureflags.GetFeatureFlagResponse;
23+
import org.cloudfoundry.client.v2.featureflags.ListFeatureFlagsRequest;
24+
import org.cloudfoundry.client.v2.featureflags.ListFeatureFlagsResponse;
25+
import org.cloudfoundry.client.v2.featureflags.SetFeatureFlagRequest;
26+
import org.cloudfoundry.client.v2.featureflags.SetFeatureFlagResponse;
27+
import org.cloudfoundry.reactor.client.v2.AbstractClientV2Operations;
28+
import org.cloudfoundry.reactor.util.AuthorizationProvider;
29+
import reactor.core.publisher.Mono;
30+
import reactor.io.netty.http.HttpClient;
31+
32+
import static org.cloudfoundry.util.tuple.TupleUtils.function;
33+
34+
/**
35+
* The Reactor-based implementation of {@link FeatureFlags}
36+
*/
37+
public final class ReactorFeatureFlags extends AbstractClientV2Operations implements FeatureFlags {
38+
39+
/**
40+
* Creates an instance
41+
*
42+
* @param authorizationProvider the {@link AuthorizationProvider} to use when communicating with the server
43+
* @param httpClient the {@link HttpClient} to use when communicating with the server
44+
* @param objectMapper the {@link ObjectMapper} to use when communicating with the server
45+
* @param root the root URI of the server. Typically something like {@code https://uaa.run.pivotal.io}.
46+
*/
47+
public ReactorFeatureFlags(AuthorizationProvider authorizationProvider, HttpClient httpClient, ObjectMapper objectMapper, Mono<String> root) {
48+
super(authorizationProvider, httpClient, objectMapper, root);
49+
}
50+
51+
@Override
52+
public Mono<GetFeatureFlagResponse> get(GetFeatureFlagRequest request) {
53+
return get(request, GetFeatureFlagResponse.class, function((builder, validRequest) -> builder.pathSegment("v2", "config", "feature_flags", validRequest.getName())));
54+
}
55+
56+
@Override
57+
public Mono<ListFeatureFlagsResponse> list(ListFeatureFlagsRequest request) {
58+
return get(request, ListFeatureFlagsResponse.class, function((builder, validRequest) -> builder.pathSegment("v2", "config", "feature_flags")));
59+
}
60+
61+
@Override
62+
public Mono<SetFeatureFlagResponse> set(SetFeatureFlagRequest request) {
63+
return put(request, SetFeatureFlagResponse.class, function((builder, validRequest) -> builder.pathSegment("v2", "config", "feature_flags", validRequest.getName())));
64+
}
65+
66+
}

cloudfoundry-client-spring/src/main/lombok/org/cloudfoundry/spring/client/SpringCloudFoundryClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
import org.cloudfoundry.reactor.util.DefaultConnectionContext;
7575
import org.cloudfoundry.spring.client.v2.applications.SpringApplicationsV2;
7676
import org.cloudfoundry.spring.client.v2.buildpacks.SpringBuildpacks;
77-
import org.cloudfoundry.spring.client.v2.featureflags.SpringFeatureFlags;
77+
import org.cloudfoundry.reactor.client.v2.featureflags.ReactorFeatureFlags;
7878
import org.cloudfoundry.spring.client.v2.organizationquotadefinitions.SpringOrganizationQuotaDefinitions;
7979
import org.cloudfoundry.spring.client.v2.organizations.SpringOrganizations;
8080
import org.cloudfoundry.spring.client.v2.privatedomains.SpringPrivateDomains;
@@ -214,7 +214,6 @@ public final class SpringCloudFoundryClient implements CloudFoundryClient, Conne
214214
SpringCloudFoundryClient(String host, Integer port, Boolean skipSslValidation, RestOperations restOperations, URI root, Scheduler schedulerGroup, OAuth2TokenProvider tokenProvider) {
215215
this.applicationsV2 = new SpringApplicationsV2(restOperations, root, schedulerGroup);
216216
this.buildpacks = new SpringBuildpacks(restOperations, root, schedulerGroup);
217-
this.featureFlags = new SpringFeatureFlags(restOperations, root, schedulerGroup);
218217
this.organizations = new SpringOrganizations(restOperations, root, schedulerGroup);
219218
this.organizationQuotaDefinitions = new SpringOrganizationQuotaDefinitions(restOperations, root, schedulerGroup);
220219
this.packages = new SpringPackages(restOperations, root, schedulerGroup);
@@ -257,6 +256,7 @@ public final class SpringCloudFoundryClient implements CloudFoundryClient, Conne
257256
this.domains = new ReactorDomains(authorizationProvider, httpClient, objectMapper, root2);
258257
this.droplets = new ReactorDroplets(authorizationProvider, httpClient, objectMapper, root2);
259258
this.environmentVariableGroups = new ReactorEnvironmentVariableGroups(authorizationProvider, httpClient, objectMapper, root2);
259+
this.featureFlags = new ReactorFeatureFlags(authorizationProvider, httpClient, objectMapper, root2);
260260
this.events = new ReactorEvents(authorizationProvider, httpClient, objectMapper, root2);
261261
this.info = new ReactorInfo(authorizationProvider, httpClient, objectMapper, root2);
262262
this.jobs = new ReactorJobs(authorizationProvider, httpClient, objectMapper, root2);

cloudfoundry-client-spring/src/main/lombok/org/cloudfoundry/spring/client/v2/featureflags/SpringFeatureFlags.java

Lines changed: 0 additions & 66 deletions
This file was deleted.

cloudfoundry-client-spring/src/test/java/org/cloudfoundry/spring/client/v2/featureflags/SpringFeatureFlagsTest.java renamed to cloudfoundry-client-spring/src/test/java/org/cloudfoundry/reactor/client/v2/featureflags/ReactorFeatureFlagsTest.java

Lines changed: 66 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package org.cloudfoundry.spring.client.v2.featureflags;
17+
package org.cloudfoundry.reactor.client.v2.featureflags;
1818

1919
import org.cloudfoundry.client.v2.featureflags.FeatureFlagEntity;
2020
import org.cloudfoundry.client.v2.featureflags.GetFeatureFlagRequest;
@@ -23,32 +23,40 @@
2323
import org.cloudfoundry.client.v2.featureflags.ListFeatureFlagsResponse;
2424
import org.cloudfoundry.client.v2.featureflags.SetFeatureFlagRequest;
2525
import org.cloudfoundry.client.v2.featureflags.SetFeatureFlagResponse;
26-
import org.cloudfoundry.spring.AbstractApiTest;
26+
import org.cloudfoundry.reactor.InteractionContext;
27+
import org.cloudfoundry.reactor.TestRequest;
28+
import org.cloudfoundry.reactor.TestResponse;
29+
import org.cloudfoundry.reactor.client.AbstractClientApiTest;
2730
import reactor.core.publisher.Mono;
2831

29-
import static org.springframework.http.HttpMethod.GET;
30-
import static org.springframework.http.HttpMethod.PUT;
31-
import static org.springframework.http.HttpStatus.OK;
32+
import static io.netty.handler.codec.http.HttpMethod.GET;
33+
import static io.netty.handler.codec.http.HttpMethod.PUT;
34+
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
3235

3336

34-
public final class SpringFeatureFlagsTest {
37+
public final class ReactorFeatureFlagsTest {
3538

36-
public static final class GetAppScaling extends AbstractApiTest<GetFeatureFlagRequest, GetFeatureFlagResponse> {
39+
public static final class GetAppScaling extends AbstractClientApiTest<GetFeatureFlagRequest, GetFeatureFlagResponse> {
3740

38-
private final SpringFeatureFlags featureFlags = new SpringFeatureFlags(this.restTemplate, this.root, PROCESSOR_GROUP);
41+
private final ReactorFeatureFlags featureFlags = new ReactorFeatureFlags(this.authorizationProvider, HTTP_CLIENT, OBJECT_MAPPER, this.root);
3942

4043
@Override
41-
protected GetFeatureFlagRequest getInvalidRequest() {
42-
return GetFeatureFlagRequest.builder()
44+
protected InteractionContext getInteractionContext() {
45+
return InteractionContext.builder()
46+
.request(TestRequest.builder()
47+
.method(GET).path("/v2/config/feature_flags/app_scaling")
48+
.build())
49+
.response(TestResponse.builder()
50+
.status(OK)
51+
.payload("fixtures/client/v2/feature_flags/GET_app_scaling_flag_response.json")
52+
.build())
4353
.build();
4454
}
4555

4656
@Override
47-
protected RequestContext getRequestContext() {
48-
return new RequestContext()
49-
.method(GET).path("/v2/config/feature_flags/app_scaling")
50-
.status(OK)
51-
.responsePayload("fixtures/client/v2/feature_flags/GET_app_scaling_flag_response.json");
57+
protected GetFeatureFlagRequest getInvalidRequest() {
58+
return GetFeatureFlagRequest.builder()
59+
.build();
5260
}
5361

5462
@Override
@@ -74,22 +82,27 @@ protected Mono<GetFeatureFlagResponse> invoke(GetFeatureFlagRequest request) {
7482

7583
}
7684

77-
public static final class GetUserRoles extends AbstractApiTest<GetFeatureFlagRequest, GetFeatureFlagResponse> {
85+
public static final class GetUserRoles extends AbstractClientApiTest<GetFeatureFlagRequest, GetFeatureFlagResponse> {
7886

79-
private final SpringFeatureFlags featureFlags = new SpringFeatureFlags(this.restTemplate, this.root, PROCESSOR_GROUP);
87+
private final ReactorFeatureFlags featureFlags = new ReactorFeatureFlags(this.authorizationProvider, HTTP_CLIENT, OBJECT_MAPPER, this.root);
8088

8189
@Override
82-
protected GetFeatureFlagRequest getInvalidRequest() {
83-
return GetFeatureFlagRequest.builder()
90+
protected InteractionContext getInteractionContext() {
91+
return InteractionContext.builder()
92+
.request(TestRequest.builder()
93+
.method(GET).path("/v2/config/feature_flags/set_roles_by_username")
94+
.build())
95+
.response(TestResponse.builder()
96+
.status(OK)
97+
.payload("fixtures/client/v2/feature_flags/GET_set_user_roles_flag_response.json")
98+
.build())
8499
.build();
85100
}
86101

87102
@Override
88-
protected RequestContext getRequestContext() {
89-
return new RequestContext()
90-
.method(GET).path("/v2/config/feature_flags/set_roles_by_username")
91-
.status(OK)
92-
.responsePayload("fixtures/client/v2/feature_flags/GET_set_user_roles_flag_response.json");
103+
protected GetFeatureFlagRequest getInvalidRequest() {
104+
return GetFeatureFlagRequest.builder()
105+
.build();
93106
}
94107

95108
@Override
@@ -115,21 +128,26 @@ protected Mono<GetFeatureFlagResponse> invoke(GetFeatureFlagRequest request) {
115128

116129
}
117130

118-
public static final class List extends AbstractApiTest<ListFeatureFlagsRequest, ListFeatureFlagsResponse> {
131+
public static final class List extends AbstractClientApiTest<ListFeatureFlagsRequest, ListFeatureFlagsResponse> {
119132

120-
private SpringFeatureFlags featureFlags = new SpringFeatureFlags(this.restTemplate, this.root, PROCESSOR_GROUP);
133+
private final ReactorFeatureFlags featureFlags = new ReactorFeatureFlags(this.authorizationProvider, HTTP_CLIENT, OBJECT_MAPPER, this.root);
121134

122135
@Override
123-
protected ListFeatureFlagsRequest getInvalidRequest() {
124-
return null;
136+
protected InteractionContext getInteractionContext() {
137+
return InteractionContext.builder()
138+
.request(TestRequest.builder()
139+
.method(GET).path("/v2/config/feature_flags")
140+
.build())
141+
.response(TestResponse.builder()
142+
.status(OK)
143+
.payload("fixtures/client/v2/feature_flags/GET_response.json")
144+
.build())
145+
.build();
125146
}
126147

127148
@Override
128-
protected RequestContext getRequestContext() {
129-
return new RequestContext()
130-
.method(GET).path("/v2/config/feature_flags")
131-
.status(OK)
132-
.responsePayload("fixtures/client/v2/feature_flags/GET_response.json");
149+
protected ListFeatureFlagsRequest getInvalidRequest() {
150+
return null;
133151
}
134152

135153
@Override
@@ -223,23 +241,28 @@ protected Mono<ListFeatureFlagsResponse> invoke(ListFeatureFlagsRequest request)
223241

224242
}
225243

226-
public static final class Set extends AbstractApiTest<SetFeatureFlagRequest, SetFeatureFlagResponse> {
244+
public static final class Set extends AbstractClientApiTest<SetFeatureFlagRequest, SetFeatureFlagResponse> {
227245

228-
private final SpringFeatureFlags featureFlags = new SpringFeatureFlags(this.restTemplate, this.root, PROCESSOR_GROUP);
246+
private final ReactorFeatureFlags featureFlags = new ReactorFeatureFlags(this.authorizationProvider, HTTP_CLIENT, OBJECT_MAPPER, this.root);
229247

230248
@Override
231-
protected SetFeatureFlagRequest getInvalidRequest() {
232-
return SetFeatureFlagRequest.builder()
249+
protected InteractionContext getInteractionContext() {
250+
return InteractionContext.builder()
251+
.request(TestRequest.builder()
252+
.method(PUT).path("/v2/config/feature_flags/user_org_creation")
253+
.payload("fixtures/client/v2/feature_flags/PUT_user_org_creation_request.json")
254+
.build())
255+
.response(TestResponse.builder()
256+
.status(OK)
257+
.payload("fixtures/client/v2/feature_flags/PUT_user_org_creation_response.json")
258+
.build())
233259
.build();
234260
}
235261

236262
@Override
237-
protected RequestContext getRequestContext() {
238-
return new RequestContext()
239-
.method(PUT).path("/v2/config/feature_flags/user_org_creation")
240-
.requestPayload("fixtures/client/v2/feature_flags/PUT_user_org_creation_request.json")
241-
.status(OK)
242-
.responsePayload("fixtures/client/v2/feature_flags/PUT_user_org_creation_response.json");
263+
protected SetFeatureFlagRequest getInvalidRequest() {
264+
return SetFeatureFlagRequest.builder()
265+
.build();
243266
}
244267

245268
@Override

0 commit comments

Comments
 (0)