Merge pull request #1170 from dralves/gce-kernels

gce - kernels api
This commit is contained in:
Adrian Cole 2013-01-13 09:43:39 -08:00
commit eca4889c0c
13 changed files with 715 additions and 0 deletions

View File

@ -20,6 +20,7 @@ package org.jclouds.googlecompute;
import com.google.common.annotations.Beta; import com.google.common.annotations.Beta;
import org.jclouds.googlecompute.features.DiskApi; import org.jclouds.googlecompute.features.DiskApi;
import org.jclouds.googlecompute.features.KernelApi;
import org.jclouds.googlecompute.features.OperationApi; import org.jclouds.googlecompute.features.OperationApi;
import org.jclouds.googlecompute.features.ProjectApi; import org.jclouds.googlecompute.features.ProjectApi;
import org.jclouds.googlecompute.features.ZoneApi; import org.jclouds.googlecompute.features.ZoneApi;
@ -48,6 +49,15 @@ public interface GoogleComputeApi {
@Path("/projects/{project}") @Path("/projects/{project}")
DiskApi getDiskApiForProject(@PathParam("project") String projectName); DiskApi getDiskApiForProject(@PathParam("project") String projectName);
/**
* Provides synchronous access to Kernel features
*
* @param projectName the name of the project
*/
@Delegate
@Path("/projects/{project}")
KernelApi getKernelApiForProject(@PathParam("project") String projectName);
/** /**
* Provides synchronous access to Project features * Provides synchronous access to Project features
*/ */

View File

@ -20,6 +20,7 @@ package org.jclouds.googlecompute;
import com.google.common.annotations.Beta; import com.google.common.annotations.Beta;
import org.jclouds.googlecompute.features.DiskAsyncApi; import org.jclouds.googlecompute.features.DiskAsyncApi;
import org.jclouds.googlecompute.features.KernelAsyncApi;
import org.jclouds.googlecompute.features.OperationAsyncApi; import org.jclouds.googlecompute.features.OperationAsyncApi;
import org.jclouds.googlecompute.features.ProjectAsyncApi; import org.jclouds.googlecompute.features.ProjectAsyncApi;
import org.jclouds.googlecompute.features.ZoneAsyncApi; import org.jclouds.googlecompute.features.ZoneAsyncApi;
@ -47,6 +48,15 @@ public interface GoogleComputeAsyncApi {
@Path("/projects/{project}") @Path("/projects/{project}")
DiskAsyncApi getDiskApiForProject(@PathParam("project") String projectName); DiskAsyncApi getDiskApiForProject(@PathParam("project") String projectName);
/**
* Provides asynchronous access to Kernel features
*
* @param projectName the name of the project
*/
@Delegate
@Path("/projects/{project}")
KernelAsyncApi getKernelApiForProject(@PathParam("project") String projectName);
/** /**
* Provides asynchronous access to Project features * Provides asynchronous access to Project features
*/ */

View File

@ -29,6 +29,8 @@ import org.jclouds.googlecompute.GoogleComputeAsyncApi;
import org.jclouds.googlecompute.domain.Operation; import org.jclouds.googlecompute.domain.Operation;
import org.jclouds.googlecompute.features.DiskApi; import org.jclouds.googlecompute.features.DiskApi;
import org.jclouds.googlecompute.features.DiskAsyncApi; import org.jclouds.googlecompute.features.DiskAsyncApi;
import org.jclouds.googlecompute.features.KernelApi;
import org.jclouds.googlecompute.features.KernelAsyncApi;
import org.jclouds.googlecompute.features.OperationApi; import org.jclouds.googlecompute.features.OperationApi;
import org.jclouds.googlecompute.features.OperationAsyncApi; import org.jclouds.googlecompute.features.OperationAsyncApi;
import org.jclouds.googlecompute.features.ProjectApi; import org.jclouds.googlecompute.features.ProjectApi;
@ -61,6 +63,7 @@ import static com.google.common.base.Preconditions.checkState;
public class GoogleComputeRestClientModule extends RestClientModule<GoogleComputeApi, GoogleComputeAsyncApi> { public class GoogleComputeRestClientModule extends RestClientModule<GoogleComputeApi, GoogleComputeAsyncApi> {
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder() public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder()
.put(DiskApi.class, DiskAsyncApi.class) .put(DiskApi.class, DiskAsyncApi.class)
.put(KernelApi.class, KernelAsyncApi.class)
.put(OperationApi.class, OperationAsyncApi.class) .put(OperationApi.class, OperationAsyncApi.class)
.put(ProjectApi.class, ProjectAsyncApi.class) .put(ProjectApi.class, ProjectAsyncApi.class)
.put(ZoneApi.class, ZoneAsyncApi.class) .put(ZoneApi.class, ZoneAsyncApi.class)

View File

@ -0,0 +1,74 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.domain;
import com.google.common.annotations.Beta;
import java.beans.ConstructorProperties;
import java.net.URI;
import java.util.Date;
import static com.google.common.base.Optional.fromNullable;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Represents a kernel.
*
* @author David Alves
* @see <a href="https://developers.google.com/compute/docs/reference/v1beta13/kernels"/>
*/
@Beta
public final class Kernel extends Resource {
@ConstructorProperties({
"id", "creationTimestamp", "selfLink", "name", "description"
})
private Kernel(String id, Date creationTimestamp, URI selfLink, String name, String description) {
super(Kind.KERNEL, checkNotNull(id, "id of %s", name), fromNullable(creationTimestamp),
checkNotNull(selfLink, "selfLink of %s", name), checkNotNull(name, "name"),
fromNullable(description));
}
public static Builder builder() {
return new Builder();
}
public Builder toBuilder() {
return new Builder().fromKernel(this);
}
public static final class Builder extends Resource.Builder<Builder> {
@Override
protected Builder self() {
return this;
}
public Kernel build() {
return new Kernel(super.id, super.creationTimestamp, super.selfLink, super.name,
super.description);
}
public Builder fromKernel(Kernel in) {
return super.fromResource(in);
}
}
}

View File

@ -0,0 +1,82 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.features;
import org.jclouds.collect.PagedIterable;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.domain.ListPage;
import org.jclouds.googlecompute.options.ListOptions;
import org.jclouds.javax.annotation.Nullable;
/**
* Provides synchronous access to MachineTypes via their REST API.
* <p/>
*
* @author David Alves
* @see <a href="https://developers.google.com/compute/docs/reference/v1beta13/kernels"/>
*/
public interface KernelApi {
/**
* Returns the specified kernel resource
*
* @param kernelName name of the kernel resource to return.
* @return If successful, this method returns a Kernel resource
*/
public Kernel get(String kernelName);
/**
* @see KernelApi#listAtMarker(String, org.jclouds.googlecompute.options.ListOptions)
*/
public ListPage<Kernel> listFirstPage();
/**
* @see KernelApi#listAtMarker(String, org.jclouds.googlecompute.options.ListOptions)
*/
public ListPage<Kernel> listAtMarker(@Nullable String marker);
/**
* Retrieves the list of kernel resources available to the specified project.
* By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not
* been set.
*
* @param marker marks the beginning of the next list page
* @param listOptions listing options
* @return a page of the list
* @see ListOptions
* @see org.jclouds.googlecompute.domain.ListPage
*/
public ListPage<Kernel> listAtMarker(String marker, ListOptions listOptions);
/**
* @see KernelApi#list(org.jclouds.googlecompute.options.ListOptions)
*/
public PagedIterable<Kernel> list();
/**
* A paged version of KernelApi#list()
*
* @return a Paged, Fluent Iterable that is able to fetch additional pages when required
* @see PagedIterable
* @see KernelApi#listAtMarker(String, org.jclouds.googlecompute.options.ListOptions)
*/
public PagedIterable<Kernel> list(ListOptions listOptions);
}

View File

@ -0,0 +1,121 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.features;
import com.google.common.util.concurrent.ListenableFuture;
import org.jclouds.collect.PagedIterable;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.domain.ListPage;
import org.jclouds.googlecompute.functions.internal.ParseKernels;
import org.jclouds.googlecompute.options.ListOptions;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.oauth.v2.config.OAuthScopes;
import org.jclouds.oauth.v2.filters.OAuthAuthenticator;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.rest.annotations.SkipEncoding;
import org.jclouds.rest.annotations.Transform;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import static org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404;
import static org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404;
import static org.jclouds.Fallbacks.NullOnNotFoundOr404;
import static org.jclouds.googlecompute.GoogleComputeConstants.COMPUTE_READONLY_SCOPE;
/**
* Provides asynchronous access to Kernels via their REST API.
*
* @author David Alves
*/
@SkipEncoding({'/', '='})
@RequestFilters(OAuthAuthenticator.class)
@Consumes(MediaType.APPLICATION_JSON)
public interface KernelAsyncApi {
/**
* @see KernelApi#get(String)
*/
@GET
@Path("/kernels/{kernel}")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@Fallback(NullOnNotFoundOr404.class)
ListenableFuture<Kernel> get(@PathParam("kernel") String kernelName);
/**
* @see KernelApi#listFirstPage()
*/
@GET
@Path("/kernels")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@ResponseParser(ParseKernels.class)
@Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<ListPage<Kernel>> listFirstPage();
/**
* @see KernelApi#listAtMarker(String)
*/
@GET
@Path("/kernels")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@ResponseParser(ParseKernels.class)
@Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<ListPage<Kernel>> listAtMarker(@QueryParam("pageToken") @Nullable String marker);
/**
* @see KernelApi#listAtMarker(String, org.jclouds.googlecompute.options.ListOptions)
*/
@GET
@Path("/kernels")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@ResponseParser(ParseKernels.class)
@Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class)
ListenableFuture<ListPage<Kernel>> listAtMarker(@QueryParam("pageToken") @Nullable String marker,
ListOptions listOptions);
/**
* @see org.jclouds.googlecompute.features.KernelApi#list()
*/
@GET
@Path("/kernels")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@ResponseParser(ParseKernels.class)
@Transform(ParseKernels.ToPagedIterable.class)
@Fallback(EmptyPagedIterableOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<Kernel>> list();
/**
* @see KernelApi#list(org.jclouds.googlecompute.options.ListOptions)
*/
@GET
@Path("/kernels")
@OAuthScopes(COMPUTE_READONLY_SCOPE)
@ResponseParser(ParseKernels.class)
@Transform(ParseKernels.ToPagedIterable.class)
@Fallback(EmptyPagedIterableOnNotFoundOr404.class)
ListenableFuture<? extends PagedIterable<Kernel>> list(ListOptions listOptions);
}

View File

@ -0,0 +1,68 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.functions.internal;
import com.google.common.base.Function;
import com.google.inject.TypeLiteral;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.googlecompute.GoogleComputeApi;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.domain.ListPage;
import org.jclouds.googlecompute.options.ListOptions;
import org.jclouds.http.functions.ParseJson;
import org.jclouds.json.Json;
import javax.inject.Inject;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* @author David Alves
*/
public class ParseKernels extends ParseJson<ListPage<Kernel>> {
@Inject
public ParseKernels(Json json) {
super(json, new TypeLiteral<ListPage<Kernel>>() {});
}
public static class ToPagedIterable extends BaseToPagedIterable<Kernel, ToPagedIterable> {
private final GoogleComputeApi api;
@Inject
protected ToPagedIterable(GoogleComputeApi api) {
this.api = checkNotNull(api, "api");
}
@Override
protected Function<Object, IterableWithMarker<Kernel>> fetchNextPage(final String projectName,
final String marker,
final ListOptions options) {
return new Function<Object, IterableWithMarker<Kernel>>() {
@Override
public IterableWithMarker<Kernel> apply(Object input) {
return api.getKernelApiForProject(projectName).listAtMarker(marker, options);
}
};
}
}
}

View File

@ -0,0 +1,113 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.features;
import org.jclouds.googlecompute.GoogleComputeApi;
import org.jclouds.googlecompute.internal.BaseGoogleComputeExpectTest;
import org.jclouds.googlecompute.parse.ParseKernelListTest;
import org.jclouds.googlecompute.parse.ParseKernelTest;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.testng.annotations.Test;
import static org.jclouds.googlecompute.GoogleComputeConstants.COMPUTE_READONLY_SCOPE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
/**
* @author David Alves
*/
@Test(groups = "unit")
public class KernelApiExpectTest extends BaseGoogleComputeExpectTest<GoogleComputeApi> {
public void testGetKernelResponseIs2xx() throws Exception {
HttpRequest get = HttpRequest
.builder()
.method("GET")
.endpoint("https://www.googleapis" +
".com/compute/v1beta13/projects/myproject/kernels/12941177846308850718")
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer " + TOKEN).build();
HttpResponse operationResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/kernel.json")).build();
KernelApi kernelApi = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE),
TOKEN_RESPONSE, get, operationResponse).getKernelApiForProject("myproject");
assertEquals(kernelApi.get("12941177846308850718"),
new ParseKernelTest().expected());
}
public void testGetKernelResponseIs4xx() throws Exception {
HttpRequest get = HttpRequest
.builder()
.method("GET")
.endpoint("https://www.googleapis" +
".com/compute/v1beta13/projects/myproject/kernels/12941177846308850718")
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer " + TOKEN).build();
HttpResponse operationResponse = HttpResponse.builder().statusCode(404).build();
KernelApi kernelApi = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE),
TOKEN_RESPONSE, get, operationResponse).getKernelApiForProject("myproject");
assertNull(kernelApi.get("12941177846308850718"));
}
public void testListKernelNoOptionsResponseIs2xx() throws Exception {
HttpRequest list = HttpRequest
.builder()
.method("GET")
.endpoint("https://www.googleapis" +
".com/compute/v1beta13/projects/myproject/kernels")
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer " + TOKEN).build();
HttpResponse operationResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/kernel_list.json")).build();
KernelApi kernelApi = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE),
TOKEN_RESPONSE, list, operationResponse).getKernelApiForProject("myproject");
assertEquals(kernelApi.listFirstPage().toString(),
new ParseKernelListTest().expected().toString());
}
public void testListKernelsResponseIs4xx() {
HttpRequest list = HttpRequest
.builder()
.method("GET")
.endpoint("https://www.googleapis" +
".com/compute/v1beta13/projects/myproject/kernels")
.addHeader("Accept", "application/json")
.addHeader("Authorization", "Bearer " + TOKEN).build();
HttpResponse operationResponse = HttpResponse.builder().statusCode(404).build();
KernelApi kernelApi = requestsSendResponses(requestForScopes(COMPUTE_READONLY_SCOPE),
TOKEN_RESPONSE, list, operationResponse).getKernelApiForProject("myproject");
assertTrue(kernelApi.list().concat().isEmpty());
}
}

View File

@ -0,0 +1,79 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.features;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import org.jclouds.collect.IterableWithMarker;
import org.jclouds.collect.PagedIterable;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.internal.BaseGoogleComputeApiLiveTest;
import org.jclouds.googlecompute.options.ListOptions;
import org.testng.annotations.Test;
import java.util.Iterator;
import java.util.List;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
/**
* @author David Alves
*/
public class KernelApiLiveTest extends BaseGoogleComputeApiLiveTest {
private Kernel kernel;
private KernelApi api() {
return context.getApi().getKernelApiForProject("google");
}
@Test(groups = "live")
public void testListKernel() {
PagedIterable<Kernel> kernels = api().list(new ListOptions.Builder()
.maxResults(1));
Iterator<IterableWithMarker<Kernel>> pageIterator = kernels.iterator();
assertTrue(pageIterator.hasNext());
IterableWithMarker<Kernel> singlePageIterator = pageIterator.next();
List<Kernel> kernelAsList = Lists.newArrayList(singlePageIterator);
assertSame(kernelAsList.size(), 1);
this.kernel = Iterables.getOnlyElement(kernelAsList);
}
@Test(groups = "live", dependsOnMethods = "testListKernel")
public void testGetKernel() {
Kernel kernel = api().get(this.kernel.getName());
assertNotNull(kernel);
assertKernelEquals(kernel, this.kernel);
}
private void assertKernelEquals(Kernel result, Kernel expected) {
assertEquals(result.getName(), expected.getName());
}
}

View File

@ -0,0 +1,71 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.parse;
import com.google.common.collect.ImmutableSet;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.domain.ListPage;
import org.jclouds.googlecompute.domain.Resource;
import org.jclouds.googlecompute.internal.BaseGoogleComputeParseTest;
import org.testng.annotations.Test;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import java.net.URI;
/**
* @author David Alves
*/
@Test(groups = "unit")
public class ParseKernelListTest extends BaseGoogleComputeParseTest<ListPage<Kernel>> {
@Override
public String resource() {
return "/kernel_list.json";
}
@Override
@Consumes(MediaType.APPLICATION_JSON)
public ListPage<Kernel> expected() {
return ListPage.<Kernel>builder()
.kind(Resource.Kind.KERNEL_LIST)
.id("projects/google/kernels")
.selfLink(URI.create("https://www.googleapis.com/compute/v1beta13/projects/google/kernels"))
.items(ImmutableSet.of(
Kernel.builder()
.id("12941177846308850718")
.creationTimestamp(new SimpleDateFormatDateService().iso8601DateParse
("2012-07-16T21:42:16.950"))
.selfLink(URI.create("https://www.googleapis" +
".com/compute/v1beta13/projects/google/kernels/gce-20110524"))
.name("gce-20110524")
.description("DEPRECATED. Created Tue, 24 May 2011 00:48:22 +0000").build(),
Kernel.builder()
.id("12941177983348179280")
.creationTimestamp(new SimpleDateFormatDateService().iso8601DateParse
("2012-07-16T21:42:31.166"))
.selfLink(URI.create("https://www.googleapis" +
".com/compute/v1beta13/projects/google/kernels/gce-20110728"))
.name("gce-20110728")
.description("DEPRECATED. Created Thu, 28 Jul 2011 16:44:38 +0000").build()
)).build();
}
}

View File

@ -0,0 +1,53 @@
/*
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.googlecompute.parse;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.googlecompute.domain.Kernel;
import org.jclouds.googlecompute.internal.BaseGoogleComputeParseTest;
import org.testng.annotations.Test;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import java.net.URI;
/**
* @author David Alves
*/
@Test(groups = "unit")
public class ParseKernelTest extends BaseGoogleComputeParseTest<Kernel> {
@Override
public String resource() {
return "/kernel.json";
}
@Override
@Consumes(MediaType.APPLICATION_JSON)
public Kernel expected() {
return Kernel.builder()
.id("12941177846308850718")
.creationTimestamp(new SimpleDateFormatDateService().iso8601DateParse("2012-07-16T21:42:16.950"))
.selfLink(URI.create("https://www.googleapis.com/compute/v1beta13/projects/google/kernels/gce-20110524"))
.name("gce-20110524")
.description("DEPRECATED. Created Tue, 24 May 2011 00:48:22 +0000")
.build();
}
}

View File

@ -0,0 +1,8 @@
{
"kind": "compute#kernel",
"id": "12941177846308850718",
"creationTimestamp": "2012-07-16T21:42:16.950",
"selfLink": "https://www.googleapis.com/compute/v1beta13/projects/google/kernels/gce-20110524",
"name": "gce-20110524",
"description": "DEPRECATED. Created Tue, 24 May 2011 00:48:22 +0000"
}

View File

@ -0,0 +1,23 @@
{
"kind": "compute#kernelList",
"id": "projects/google/kernels",
"selfLink": "https://www.googleapis.com/compute/v1beta13/projects/google/kernels",
"items": [
{
"kind": "compute#kernel",
"id": "12941177846308850718",
"creationTimestamp": "2012-07-16T21:42:16.950",
"selfLink": "https://www.googleapis.com/compute/v1beta13/projects/google/kernels/gce-20110524",
"name": "gce-20110524",
"description": "DEPRECATED. Created Tue, 24 May 2011 00:48:22 +0000"
},
{
"kind": "compute#kernel",
"id": "12941177983348179280",
"creationTimestamp": "2012-07-16T21:42:31.166",
"selfLink": "https://www.googleapis.com/compute/v1beta13/projects/google/kernels/gce-20110728",
"name": "gce-20110728",
"description": "DEPRECATED. Created Thu, 28 Jul 2011 16:44:38 +0000"
}
]
}