From 3d8f20fe63746464906b756c72b5055514657855 Mon Sep 17 00:00:00 2001 From: Ignacio Mulas Date: Wed, 13 Nov 2013 22:31:19 +0100 Subject: [PATCH] [JCLOUDS-376] PATCH HTTP request implementation --- .../java/org/jclouds/rest/annotations/PATCH.java | 36 +++++++++++++ .../PATCHAnnotationExpectTest.java | 61 ++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 core/src/main/java/org/jclouds/rest/annotations/PATCH.java create mode 100644 core/src/test/java/org/jclouds/rest/annotationparsing/PATCHAnnotationExpectTest.java diff --git a/core/src/main/java/org/jclouds/rest/annotations/PATCH.java b/core/src/main/java/org/jclouds/rest/annotations/PATCH.java new file mode 100644 index 0000000..583e5e4 --- /dev/null +++ b/core/src/main/java/org/jclouds/rest/annotations/PATCH.java @@ -0,0 +1,36 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.jclouds.rest.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.ws.rs.HttpMethod; + +/** + * Implements the PATCH HTTP request type + * + * @author Ignacio Mulas + * + */ +@Target({ ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@HttpMethod("PATCH") +public @interface PATCH { +} diff --git a/core/src/test/java/org/jclouds/rest/annotationparsing/PATCHAnnotationExpectTest.java b/core/src/test/java/org/jclouds/rest/annotationparsing/PATCHAnnotationExpectTest.java new file mode 100644 index 0000000..dc5614a --- /dev/null +++ b/core/src/test/java/org/jclouds/rest/annotationparsing/PATCHAnnotationExpectTest.java @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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 + * + * http://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.jclouds.rest.annotationparsing; + +import static org.jclouds.providers.AnonymousProviderMetadata.forApiOnEndpoint; +import static org.testng.Assert.assertEquals; + +import java.io.Closeable; + +import javax.ws.rs.Path; + +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.providers.ProviderMetadata; +import org.jclouds.rest.annotations.PATCH; +import org.jclouds.rest.internal.BaseRestClientExpectTest; +import org.testng.annotations.Test; + +/** + * Tests the use of the {@link PATCH} annotation. + * + * @author Ignacio Mulas + * + */ +@Test(groups = "unit", testName = "PATCHAnnotationExpectTest") +public class PATCHAnnotationExpectTest extends + BaseRestClientExpectTest { + + interface TestPATCHAnnotationApi extends Closeable { + @PATCH + @Path("/PATCH/annotation") + HttpResponse method(); + } + + @Test + public void testPATCHAnnotation() { + HttpResponse response = HttpResponse.builder().statusCode(200).build(); + TestPATCHAnnotationApi testPATCH = requestSendsResponse( + HttpRequest.builder().method("PATCH").endpoint("http://mock/PATCH/annotation").build(), response); + assertEquals(testPATCH.method(), response, "PATCH"); + } + + @Override + public ProviderMetadata createProviderMetadata() { + return forApiOnEndpoint(TestPATCHAnnotationApi.class, "http://mock"); + } +} -- 1.8.4