From commits-return-6760-archive-asf-public=cust-asf.ponee.io@zookeeper.apache.org Mon Aug 6 14:13:34 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id A66201807CC for ; Mon, 6 Aug 2018 14:13:30 +0200 (CEST) Received: (qmail 47387 invoked by uid 500); 6 Aug 2018 12:13:29 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@zookeeper.apache.org Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 44820 invoked by uid 99); 6 Aug 2018 12:13:28 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Aug 2018 12:13:28 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4D987E1196; Mon, 6 Aug 2018 12:13:27 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: andor@apache.org To: commits@zookeeper.apache.org Date: Mon, 06 Aug 2018 12:14:02 -0000 Message-Id: In-Reply-To: <13bf07ba1f73429dae991fd13f50d7a5@git.apache.org> References: <13bf07ba1f73429dae991fd13f50d7a5@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [37/45] zookeeper git commit: ZOOKEEPER-3030: MAVEN MIGRATION - Step 1.3 - move contrib directories http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/SessionsResource.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/SessionsResource.java b/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/SessionsResource.java deleted file mode 100644 index 0744604..0000000 --- a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/SessionsResource.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey.resources; - -import java.io.IOException; -import java.net.URI; -import java.util.UUID; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.server.jersey.ZooKeeperService; -import org.apache.zookeeper.server.jersey.jaxb.ZError; -import org.apache.zookeeper.server.jersey.jaxb.ZSession; - -import com.sun.jersey.api.json.JSONWithPadding; - -@Path("sessions/v1/{session: .*}") -public class SessionsResource { - - private static Logger LOG = LoggerFactory.getLogger(SessionsResource.class); - - private String contextPath; - - public SessionsResource(@Context HttpServletRequest request) { - contextPath = request.getContextPath(); - if (contextPath.equals("")) { - contextPath = "/"; - } - } - - @PUT - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML }) - @Consumes(MediaType.APPLICATION_OCTET_STREAM) - public Response keepAliveSession(@PathParam("session") String session, - @Context UriInfo ui, byte[] data) { - - if (!ZooKeeperService.isConnected(contextPath, session)) { - throwNotFound(session, ui); - } - - ZooKeeperService.resetTimer(contextPath, session); - return Response.status(Response.Status.OK).build(); - } - - @POST - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML }) - public Response createSession(@QueryParam("op") String op, - @DefaultValue("5") @QueryParam("expire") String expire, - @Context UriInfo ui) { - if (!op.equals("create")) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), "")).build()); - } - - int expireInSeconds; - try { - expireInSeconds = Integer.parseInt(expire); - } catch (NumberFormatException e) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).build()); - } - - String uuid = UUID.randomUUID().toString(); - while (ZooKeeperService.isConnected(contextPath, uuid)) { - uuid = UUID.randomUUID().toString(); - } - - // establish the connection to the ZooKeeper cluster - try { - ZooKeeperService.getClient(contextPath, uuid, expireInSeconds); - } catch (IOException e) { - LOG.error("Failed while trying to create a new session", e); - - throw new WebApplicationException(Response.status( - Response.Status.INTERNAL_SERVER_ERROR).build()); - } - - URI uri = ui.getAbsolutePathBuilder().path(uuid).build(); - return Response.created(uri).entity( - new JSONWithPadding(new ZSession(uuid, uri.toString()))) - .build(); - } - - @DELETE - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML, MediaType.APPLICATION_OCTET_STREAM }) - public void deleteSession(@PathParam("session") String session, - @Context UriInfo ui) { - ZooKeeperService.close(contextPath, session); - } - - private static void throwNotFound(String session, UriInfo ui) - throws WebApplicationException { - throw new WebApplicationException(Response.status( - Response.Status.NOT_FOUND).entity( - new ZError(ui.getRequestUri().toString(), session - + " not found")).build()); - } - -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZErrorWriter.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZErrorWriter.java b/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZErrorWriter.java deleted file mode 100644 index 706ab89..0000000 --- a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZErrorWriter.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey.resources; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.lang.annotation.Annotation; -import java.lang.reflect.Type; - -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - -import org.apache.zookeeper.server.jersey.jaxb.ZError; - -/** - * Tell Jersey how to format an octet response error message. - */ -@Produces(MediaType.APPLICATION_OCTET_STREAM) -@Provider -public class ZErrorWriter implements MessageBodyWriter { - - public long getSize(ZError t, Class type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return -1; - } - - public boolean isWriteable(Class type, Type genericType, - Annotation[] annotations, MediaType mediaType) { - return ZError.class.isAssignableFrom(type); - } - - public void writeTo(ZError t, Class type, Type genericType, - Annotation[] annotations, MediaType mediaType, - MultivaluedMap httpHeaders, - OutputStream os) - throws IOException, WebApplicationException - { - PrintStream p = new PrintStream(os); - p.print("Request " + t.request + " failed due to " + t.message); - p.flush(); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZNodeResource.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZNodeResource.java b/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZNodeResource.java deleted file mode 100644 index 77371ea..0000000 --- a/src/contrib/rest/src/java/org/apache/zookeeper/server/jersey/resources/ZNodeResource.java +++ /dev/null @@ -1,412 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey.resources; - -import java.io.IOException; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.data.Stat; -import org.apache.zookeeper.server.jersey.ZooKeeperService; -import org.apache.zookeeper.server.jersey.jaxb.ZChildren; -import org.apache.zookeeper.server.jersey.jaxb.ZChildrenJSON; -import org.apache.zookeeper.server.jersey.jaxb.ZError; -import org.apache.zookeeper.server.jersey.jaxb.ZPath; -import org.apache.zookeeper.server.jersey.jaxb.ZStat; - -import com.sun.jersey.api.json.JSONWithPadding; - -/** - * Version 1 implementation of the ZooKeeper REST specification. - */ -// TODO test octet fully -@Path("znodes/v1{path: /.*}") -public class ZNodeResource { - private final ZooKeeper zk; - - public ZNodeResource(@DefaultValue("") @QueryParam("session") String session, - @Context UriInfo ui, - @Context HttpServletRequest request - ) - throws IOException { - - String contextPath = request.getContextPath(); - if (contextPath.equals("")) { - contextPath = "/"; - } - if (session.equals("")) { - session = null; - } else if (!ZooKeeperService.isConnected(contextPath, session)) { - throw new WebApplicationException(Response.status( - Response.Status.UNAUTHORIZED).build()); - } - zk = ZooKeeperService.getClient(contextPath, session); - } - - private void ensurePathNotNull(String path) { - if (path == null) { - throw new IllegalArgumentException("Invalid path \"" + path + "\""); - } - } - - @HEAD - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML }) - public Response existsZNode(@PathParam("path") String path, - @Context UriInfo ui) throws InterruptedException, KeeperException { - Stat stat = zk.exists(path, false); - if (stat == null) { - throwNotFound(path, ui); - } - return Response.status(Response.Status.OK).build(); - } - - @HEAD - @Produces( { MediaType.APPLICATION_OCTET_STREAM }) - public Response existsZNodeAsOctet(@PathParam("path") String path, - @Context UriInfo ui) throws InterruptedException, KeeperException { - Stat stat = zk.exists(path, false); - if (stat == null) { - throwNotFound(path, ui); - } - return Response.status(Response.Status.NO_CONTENT).build(); - } - - /* - * getZNodeList and getZNodeListJSON are bogus - but necessary. - * Unfortunately Jersey 1.0.3 is unable to render both xml and json properly - * in the case where a object contains a list/array. It's impossible to get - * it to render properly for both. As a result we need to split into two - * jaxb classes. - */ - - @GET - @Produces( { MediaType.APPLICATION_JSON, "application/javascript" }) - public Response getZNodeListJSON( - @PathParam("path") String path, - @QueryParam("callback") String callback, - @DefaultValue("data") @QueryParam("view") String view, - @DefaultValue("base64") @QueryParam("dataformat") String dataformat, - @Context UriInfo ui) throws InterruptedException, KeeperException { - return getZNodeList(true, path, callback, view, dataformat, ui); - } - - @GET - @Produces(MediaType.APPLICATION_XML) - public Response getZNodeList( - @PathParam("path") String path, - @QueryParam("callback") String callback, - @DefaultValue("data") @QueryParam("view") String view, - @DefaultValue("base64") @QueryParam("dataformat") String dataformat, - @Context UriInfo ui) throws InterruptedException, KeeperException { - return getZNodeList(false, path, callback, view, dataformat, ui); - } - - private Response getZNodeList(boolean json, String path, String callback, - String view, String dataformat, UriInfo ui) - throws InterruptedException, KeeperException { - ensurePathNotNull(path); - - if (view.equals("children")) { - List children = new ArrayList(); - for (String child : zk.getChildren(path, false)) { - children.add(child); - } - - Object child; - String childTemplate = ui.getAbsolutePath().toString(); - if (!childTemplate.endsWith("/")) { - childTemplate += "/"; - } - childTemplate += "{child}"; - if (json) { - child = new ZChildrenJSON(path, - ui.getAbsolutePath().toString(), childTemplate, - children); - } else { - child = new ZChildren(path, ui.getAbsolutePath().toString(), - childTemplate, children); - } - return Response.status(Response.Status.OK).entity( - new JSONWithPadding(child, callback)).build(); - } else { - Stat stat = new Stat(); - byte[] data = zk.getData(path, false, stat); - - byte[] data64; - String dataUtf8; - if (data == null) { - data64 = null; - dataUtf8 = null; - } else if (!dataformat.equals("utf8")) { - data64 = data; - dataUtf8 = null; - } else { - data64 = null; - dataUtf8 = new String(data); - } - ZStat zstat = new ZStat(path, ui.getAbsolutePath().toString(), - data64, dataUtf8, stat.getCzxid(), stat.getMzxid(), stat - .getCtime(), stat.getMtime(), stat.getVersion(), - stat.getCversion(), stat.getAversion(), stat - .getEphemeralOwner(), stat.getDataLength(), stat - .getNumChildren(), stat.getPzxid()); - - return Response.status(Response.Status.OK).entity( - new JSONWithPadding(zstat, callback)).build(); - } - } - - @GET - @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response getZNodeListAsOctet(@PathParam("path") String path) - throws InterruptedException, KeeperException { - ensurePathNotNull(path); - - Stat stat = new Stat(); - byte[] data = zk.getData(path, false, stat); - - if (data == null) { - return Response.status(Response.Status.NO_CONTENT).build(); - } else { - return Response.status(Response.Status.OK).entity(data).build(); - } - } - - @PUT - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML }) - @Consumes(MediaType.APPLICATION_OCTET_STREAM) - public Response setZNode( - @PathParam("path") String path, - @QueryParam("callback") String callback, - @DefaultValue("-1") @QueryParam("version") String versionParam, - @DefaultValue("base64") @QueryParam("dataformat") String dataformat, - @DefaultValue("false") @QueryParam("null") String setNull, - @Context UriInfo ui, byte[] data) throws InterruptedException, - KeeperException { - ensurePathNotNull(path); - - int version; - try { - version = Integer.parseInt(versionParam); - } catch (NumberFormatException e) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), path - + " bad version " + versionParam)).build()); - } - - if (setNull.equals("true")) { - data = null; - } - - Stat stat = zk.setData(path, data, version); - - ZStat zstat = new ZStat(path, ui.getAbsolutePath().toString(), null, - null, stat.getCzxid(), stat.getMzxid(), stat.getCtime(), stat - .getMtime(), stat.getVersion(), stat.getCversion(), - stat.getAversion(), stat.getEphemeralOwner(), stat - .getDataLength(), stat.getNumChildren(), stat - .getPzxid()); - - return Response.status(Response.Status.OK).entity( - new JSONWithPadding(zstat, callback)).build(); - } - - @PUT - @Produces(MediaType.APPLICATION_OCTET_STREAM) - @Consumes(MediaType.APPLICATION_OCTET_STREAM) - public void setZNodeAsOctet(@PathParam("path") String path, - @DefaultValue("-1") @QueryParam("version") String versionParam, - @DefaultValue("false") @QueryParam("null") String setNull, - @Context UriInfo ui, byte[] data) throws InterruptedException, - KeeperException { - ensurePathNotNull(path); - - int version; - try { - version = Integer.parseInt(versionParam); - } catch (NumberFormatException e) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), path - + " bad version " + versionParam)).build()); - } - - if (setNull.equals("true")) { - data = null; - } - - zk.setData(path, data, version); - } - - @POST - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML }) - @Consumes(MediaType.APPLICATION_OCTET_STREAM) - public Response createZNode( - @PathParam("path") String path, - @QueryParam("callback") String callback, - @DefaultValue("create") @QueryParam("op") String op, - @QueryParam("name") String name, - @DefaultValue("base64") @QueryParam("dataformat") String dataformat, - @DefaultValue("false") @QueryParam("null") String setNull, - @DefaultValue("false") @QueryParam("sequence") String sequence, - @DefaultValue("false") @QueryParam("ephemeral") String ephemeral, - @Context UriInfo ui, byte[] data) throws InterruptedException, - KeeperException { - ensurePathNotNull(path); - - if (path.equals("/")) { - path += name; - } else { - path += "/" + name; - } - - if (!op.equals("create")) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), path - + " bad operaton " + op)).build()); - } - - if (setNull.equals("true")) { - data = null; - } - - CreateMode createMode; - if (sequence.equals("true")) { - if (ephemeral.equals("false")) { - createMode = CreateMode.PERSISTENT_SEQUENTIAL; - } else { - createMode = CreateMode.EPHEMERAL_SEQUENTIAL; - } - } else if (ephemeral.equals("false")) { - createMode = CreateMode.PERSISTENT; - } else { - createMode = CreateMode.EPHEMERAL; - } - - String newPath = zk.create(path, data, Ids.OPEN_ACL_UNSAFE, createMode); - - URI uri = ui.getAbsolutePathBuilder().path(newPath).build(); - - return Response.created(uri).entity( - new JSONWithPadding(new ZPath(newPath, ui.getAbsolutePath() - .toString()))).build(); - } - - @POST - @Produces(MediaType.APPLICATION_OCTET_STREAM) - @Consumes(MediaType.APPLICATION_OCTET_STREAM) - public Response createZNodeAsOctet(@PathParam("path") String path, - @DefaultValue("create") @QueryParam("op") String op, - @QueryParam("name") String name, - @DefaultValue("false") @QueryParam("null") String setNull, - @DefaultValue("false") @QueryParam("sequence") String sequence, - @Context UriInfo ui, byte[] data) throws InterruptedException, - KeeperException { - ensurePathNotNull(path); - - if (path.equals("/")) { - path += name; - } else { - path += "/" + name; - } - - if (!op.equals("create")) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), path - + " bad operaton " + op)).build()); - } - - if (setNull.equals("true")) { - data = null; - } - - CreateMode createMode; - if (sequence.equals("true")) { - createMode = CreateMode.PERSISTENT_SEQUENTIAL; - } else { - createMode = CreateMode.PERSISTENT; - } - - String newPath = zk.create(path, data, Ids.OPEN_ACL_UNSAFE, createMode); - - URI uri = ui.getAbsolutePathBuilder().path(newPath).build(); - - return Response.created(uri).entity( - new ZPath(newPath, ui.getAbsolutePath().toString())).build(); - } - - @DELETE - @Produces( { MediaType.APPLICATION_JSON, "application/javascript", - MediaType.APPLICATION_XML, MediaType.APPLICATION_OCTET_STREAM }) - public void deleteZNode(@PathParam("path") String path, - @DefaultValue("-1") @QueryParam("version") String versionParam, - @Context UriInfo ui) throws InterruptedException, KeeperException { - ensurePathNotNull(path); - - int version; - try { - version = Integer.parseInt(versionParam); - } catch (NumberFormatException e) { - throw new WebApplicationException(Response.status( - Response.Status.BAD_REQUEST).entity( - new ZError(ui.getRequestUri().toString(), path - + " bad version " + versionParam)).build()); - } - - zk.delete(path, version); - } - - private static void throwNotFound(String path, UriInfo ui) - throws WebApplicationException { - throw new WebApplicationException(Response.status( - Response.Status.NOT_FOUND).entity( - new ZError(ui.getRequestUri().toString(), path + " not found")) - .build()); - } - -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/README.txt ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/README.txt b/src/contrib/rest/src/python/README.txt deleted file mode 100644 index acc8ffb..0000000 --- a/src/contrib/rest/src/python/README.txt +++ /dev/null @@ -1,9 +0,0 @@ -Some basic python scripts which use the REST interface: - -zkrest.py -- basic REST ZooKeeper client -demo_master_election.py -- shows how to implement master election -demo_queue.py -- basic queue -zk_dump_tree.py -- dumps the nodes & data of a znode hierarchy - -Generally these scripts require: - * simplejson http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/demo_master_election.py ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/demo_master_election.py b/src/contrib/rest/src/python/demo_master_election.py deleted file mode 100644 index c0317c7..0000000 --- a/src/contrib/rest/src/python/demo_master_election.py +++ /dev/null @@ -1,90 +0,0 @@ -#! /usr/bin/env python - -# 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. - -import sys -import threading -import time - -from zkrest import ZooKeeper - -class Agent(threading.Thread): - """ A basic agent that wants to become a master and exit """ - - root = '/election' - - def __init__(self, id): - super(Agent, self).__init__() - self.zk = ZooKeeper() - self.id = id - - def run(self): - print 'Starting #%s' % self.id - with self.zk.session(expire=5): - - # signal agent presence - r = self.zk.create("%s/agent-" % self.root, - sequence=True, ephemeral=True) - self.me = r['path'] - - while True: - children = sorted([el['path'] \ - for el in self.zk.get_children(self.root)]) - master, previous = children[0], None - try: - index = children.index(self.me) - if index != 0: - previous = children[index-1] - except ValueError: - break - - if previous is None: - self.do_master_work() - # and don't forget to send heartbeat messages - break - else: - # do slave work in another thread - pass - - # wait for the previous agent or current master to exit / finish - while self.zk.exists(previous) or self.zk.exists(master): - time.sleep(0.5) - self.zk.heartbeat() - - # TODO signal the slave thread to exit and wait for it - # and rerun the election loop - - def do_master_work(self): - print "#%s: I'm the master: %s" % (self.id, self.me) - -def main(): - zk = ZooKeeper() - - # create the root node used for master election - if not zk.exists('/election'): - zk.create('/election') - - print 'Starting 10 agents ...' - agents = [Agent(id) for id in range(0,15)] - - map(Agent.start, agents) - map(Agent.join, agents) - - zk.delete('/election') - -if __name__ == '__main__': - sys.exit(main()) http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/demo_queue.py ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/demo_queue.py b/src/contrib/rest/src/python/demo_queue.py deleted file mode 100644 index 9ca4c64..0000000 --- a/src/contrib/rest/src/python/demo_queue.py +++ /dev/null @@ -1,99 +0,0 @@ -#! /usr/bin/env python - -# 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. - - -# This is a simple message queue built on top of ZooKeeper. In order -# to be used in production it needs better error handling but it's -# still useful as a proof-of-concept. - -# Why use ZooKeeper as a queue? Highly available by design and has -# great performance. - -import sys -import threading -import time - -from zkrest import ZooKeeper - -class Queue(object): - def __init__(self, root, zk): - self.root = root - - self.zk = zk - - def put(self, data): - self.zk.create("%s/el-" % self.root, str(data), sequence=True, ephemeral=True) - - # creating ephemeral nodes for easy cleanup - # in a real world scenario you should create - # normal sequential znodes - - def fetch(self): - """ Pull an element from the queue - - This function is not blocking if the queue is empty, it will - just return None. - """ - children = sorted(self.zk.get_children(self.root), \ - lambda a, b: cmp(a['path'], b['path'])) - - if not children: - return None - - try: - first = children[0] - self.zk.delete(first['path'], version=first['version']) - if 'data64' not in first: - return '' - else: - return first['data64'].decode('base64') - - except (ZooKeeper.WrongVersion, ZooKeeper.NotFound): - # someone changed the znode between the get and delete - # this should not happen - # in practice you should retry the fetch - raise - - -def main(): - zk = ZooKeeper() - zk.start_session(expire=60) - - if not zk.exists('/queue'): - zk.create('/queue') - q = Queue('/queue', zk) - - print 'Pushing to queue 1 ... 5' - map(q.put, [1,2,3,4,5]) - - print 'Extracting ...' - while True: - el = q.fetch() - if el is None: - break - print el - - zk.close_session() - zk.delete('/queue') - - print 'Done.' - - -if __name__ == '__main__': - sys.exit(main()) - http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/test.py ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/test.py b/src/contrib/rest/src/python/test.py deleted file mode 100644 index 363747a..0000000 --- a/src/contrib/rest/src/python/test.py +++ /dev/null @@ -1,163 +0,0 @@ -#! /usr/bin/env python - -# 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. - -import time -import unittest - -from zkrest import ZooKeeper - -class ZooKeeperREST_TestCase(unittest.TestCase): - - BASE_URI = 'http://localhost:9998' - - def setUp(self): - self.zk = ZooKeeper(self.BASE_URI) - - def tearDown(self): - try: - self.zk.delete('/test') - except ZooKeeper.NotFound: - pass - - def test_get_root_node(self): - assert self.zk.get('/') is not None - - def test_get_node_not_found(self): - self.assertRaises(ZooKeeper.NotFound, \ - self.zk.get, '/dummy-node') - - def test_exists_node(self): - assert self.zk.exists('/zookeeper') is True - - def test_get_children(self): - assert any([child['path'] == '/zookeeper/quota' \ - for child in self.zk.get_children('/zookeeper')]) - - def test_create_znode(self): - try: - self.zk.create('/test') - except ZooKeeper.ZNodeExists: - pass # it's ok if already exists - assert self.zk.exists('/test') is True - - def test_create_hierarchy(self): - try: - self.zk.delete(['/a/b', '/a']) - except ZooKeeper.NotFound: - pass - - self.zk.create('/a') - self.zk.create('/a/b') - - self.zk.delete(['/a/b', '/a']) - - def test_create_with_data(self): - self.zk.create('/test', 'some-data') - - zn = self.zk.get('/test') - self.assertEqual(zn.get('data64', None), \ - 'some-data'.encode('base64').strip()) - - def test_delete_znode(self): - self.zk.create('/test') - - self.zk.delete('/test') - assert not self.zk.exists('/test') - - def test_delete_older_version(self): - self.zk.create('/test') - - zn = self.zk.get('/test') - # do one more modification in order to increase the version number - self.zk.set('/test', 'dummy-data') - - self.assertRaises(ZooKeeper.WrongVersion, \ - self.zk.delete, '/test', version=zn['version']) - - def test_delete_raise_not_found(self): - self.zk.create('/test') - - zn = self.zk.get('/test') - self.zk.delete('/test') - - self.assertRaises(ZooKeeper.NotFound, \ - self.zk.delete, '/test', version=zn['version']) - - def test_set(self): - self.zk.create('/test') - - self.zk.set('/test', 'dummy') - - self.assertEqual(self.zk.get('/test')['data64'], \ - 'dummy'.encode('base64').strip()) - - def test_set_with_older_version(self): - if not self.zk.exists('/test'): - self.zk.create('/test', 'random-data') - - zn = self.zk.get('/test') - self.zk.set('/test', 'new-data') - self.assertRaises(ZooKeeper.WrongVersion, self.zk.set, \ - '/test', 'older-version', version=zn['version']) - - def test_set_null(self): - if not self.zk.exists('/test'): - self.zk.create('/test', 'random-data') - self.zk.set('/test', 'data') - assert 'data64' in self.zk.get('/test') - - self.zk.set('/test', null=True) - assert 'data64' not in self.zk.get('/test') - - def test_create_ephemeral_node(self): - with self.zk.session(): - if self.zk.exists('/ephemeral-test'): - self.zk.delete('/ephemeral-test') - - self.zk.create('/ephemeral-test', ephemeral=True) - zn = self.zk.get('/ephemeral-test') - - assert zn['ephemeralOwner'] != 0 - - def test_create_session(self): - with self.zk.session() as sid: - self.assertEqual(len(sid), 36) # UUID - - def test_session_invalidation(self): - self.zk.start_session(expire=1) - self.zk.create('/ephemeral-test', ephemeral=True) - - # keep the session alive by sending heartbeat requests - for _ in range(1,2): - self.zk.heartbeat() - time.sleep(0.9) - - time.sleep(2) # wait for the session to expire - self.assertRaises(ZooKeeper.InvalidSession, \ - self.zk.create, '/ephemeral-test', ephemeral=True) - - def test_presence_signaling(self): - with self.zk.session(expire=1): - self.zk.create('/i-am-online', ephemeral=True) - assert self.zk.exists('/i-am-online') - assert not self.zk.exists('/i-am-online') - - -if __name__ == '__main__': - unittest.main() - http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/zk_dump_tree.py ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/zk_dump_tree.py b/src/contrib/rest/src/python/zk_dump_tree.py deleted file mode 100755 index 517d23b..0000000 --- a/src/contrib/rest/src/python/zk_dump_tree.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/python - -# 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. - -import getopt -import sys -import simplejson -import urllib2 -from base64 import b64decode - -printdata = False -fullpath = False - -def dump_node(url, depth): - """Dump the node, then dump children recursively - - Arguments: - - `url`: - - `depth`: - """ - req = urllib2.urlopen(url) - resp = simplejson.load(req) - if 'Error' in resp: - raise resp['Error'] - - if fullpath: - name = resp['path'] - else: - name = '/' + resp['path'].split('/')[-1] - - data64 = resp.get('data64') - dataUtf8 = resp.get('dataUtf8') - if data64 and printdata: - data = b64decode(data64) - print '%(indent)s%(name)s = b64(%(data64)s) str(%(data)s)' % \ - {'indent':' '*2*depth, 'name':name, 'data64':data64, 'data':data} - elif dataUtf8 and printdata: - print '%(indent)s%(name)s = %(data)s' % \ - {'indent':' '*2*depth, 'name':name, 'data':dataUtf8} - else: - print '%(indent)s%(name)s' % {'indent':' '*2*depth, 'name':name} - - req = urllib2.urlopen(resp['uri'] + '?view=children') - resp = simplejson.load(req) - - for child in resp.get('children', []): - dump_node(resp['child_uri_template'] - .replace("{child}", urllib2.quote(child)), - depth + 1) - -def zk_dump_tree(url, root): - """Dump the tree starting at the roota - - Arguments: - - `root`: - """ - dump_node(url + '/znodes/v1' + root, 0) - -def usage(): - """Usage - """ - print 'Usage: zk_dump_tree.py [-h|--help -u|--url=url -d|--data -f|--fullpath -r|--root=root]' - print ' where url is the url of the rest server, data is whether to' - print ' to include node data on output, root is the znode root' - print ' fullpath prints the full node path (useful for copy/paste)' - -if __name__ == '__main__': - try: - opts, args = getopt.getopt(sys.argv[1:], - "hu:dfr:", ["help", "url=", "data", "fullpath", "root="]) - except getopt.GetoptError, err: - # print help information and exit: - print str(err) # will print something like "option -a not recognized" - usage() - sys.exit(2) - url ='http://localhost:9998' - root = '/' - for o, a in opts: - if o in ("-d", "--data"): - printdata = True - elif o in ("-h", "--help"): - usage() - sys.exit() - elif o in ("-u", "--url"): - url = a - elif o in ("-r", "--root"): - root = a - elif o in ("-f", "--fullpath"): - fullpath = True - else: - assert False, "unhandled option" - - print 'Accessing REST server at ' + url - zk_dump_tree(url, root) http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/python/zkrest.py ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/python/zkrest.py b/src/contrib/rest/src/python/zkrest.py deleted file mode 100644 index c009d5d..0000000 --- a/src/contrib/rest/src/python/zkrest.py +++ /dev/null @@ -1,218 +0,0 @@ - -# 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. - -import urllib2 -import urllib -import simplejson - -from contextlib import contextmanager - -class RequestWithMethod(urllib2.Request): - """ Request class that know how to set the method name """ - def __init__(self, *args, **kwargs): - urllib2.Request.__init__(self, *args, **kwargs) - self._method = None - - def get_method(self): - return self._method or \ - urllib2.Request.get_method(self) - - def set_method(self, method): - self._method = method - -class ZooKeeper(object): - - class Error(Exception): pass - - class NotFound(Error): pass - - class ZNodeExists(Error): pass - - class InvalidSession(Error): pass - - class WrongVersion(Error): pass - - def __init__(self, uri = 'http://localhost:9998'): - self._base = uri - self._session = None - - def start_session(self, expire=5, id=None): - """ Create a session and return the ID """ - if id is None: - url = "%s/sessions/v1/?op=create&expire=%d" % (self._base, expire) - self._session = self._do_post(url)['id'] - else: - self._session = id - return self._session - - def close_session(self): - """ Close the session on the server """ - if self._session is not None: - url = '%s/sessions/v1/%s' % (self._base, self._session) - self._do_delete(url) - self._session = None - - def heartbeat(self): - """ Send a heartbeat request. This is needed in order to keep a session alive """ - if self._session is not None: - url = '%s/sessions/v1/%s' % (self._base, self._session) - self._do_put(url, '') - - @contextmanager - def session(self, *args, **kwargs): - """ Session handling using a context manager """ - yield self.start_session(*args, **kwargs) - self.close_session() - - def get(self, path): - """ Get a node """ - url = "%s/znodes/v1%s" % (self._base, path) - return self._do_get(url) - - def get_children(self, path): - """ Get all the children for a given path. This function creates a generator """ - url = "%s/znodes/v1%s?view=children" % (self._base, path) - resp = self._do_get(url) - for child in resp.get('children', []): - try: - yield self._do_get(resp['child_uri_template']\ - .replace('{child}', urllib2.quote(child))) - except ZooKeeper.NotFound: - continue - - def create(self, path, data=None, sequence=False, ephemeral=False): - """ Create a new node. By default this call creates a persistent znode. - - You can also create an ephemeral or a sequential znode. - """ - ri = path.rindex('/') - head, name = path[:ri+1], path[ri+1:] - if head != '/': head = head[:-1] - - flags = { - 'null': 'true' if data is None else 'false', - 'ephemeral': 'true' if ephemeral else 'false', - 'sequence': 'true' if sequence else 'false' - } - if ephemeral: - if self._session: - flags['session'] = self._session - else: - raise ZooKeeper.Error, 'You need a session '\ - 'to create an ephemeral node' - flags = urllib.urlencode(flags) - - url = "%s/znodes/v1%s?op=create&name=%s&%s" % \ - (self._base, head, name, flags) - - return self._do_post(url, data) - - def set(self, path, data=None, version=-1, null=False): - """ Set the value of node """ - url = "%s/znodes/v1%s?%s" % (self._base, path, \ - urllib.urlencode({ - 'version': version, - 'null': 'true' if null else 'false' - })) - return self._do_put(url, data) - - def delete(self, path, version=-1): - """ Delete a znode """ - if type(path) is list: - map(lambda el: self.delete(el, version), path) - return - - url = '%s/znodes/v1%s?%s' % (self._base, path, \ - urllib.urlencode({ - 'version':version - })) - try: - return self._do_delete(url) - except urllib2.HTTPError, e: - if e.code == 412: - raise ZooKeeper.WrongVersion(path) - elif e.code == 404: - raise ZooKeeper.NotFound(path) - raise - - def exists(self, path): - """ Do a znode exists """ - try: - self.get(path) - return True - except ZooKeeper.NotFound: - return False - - def _do_get(self, uri): - """ Send a GET request and convert errors to exceptions """ - try: - req = urllib2.urlopen(uri) - resp = simplejson.load(req) - - if 'Error' in resp: - raise ZooKeeper.Error(resp['Error']) - - return resp - except urllib2.HTTPError, e: - if e.code == 404: - raise ZooKeeper.NotFound(uri) - raise - - def _do_post(self, uri, data=None): - """ Send a POST request and convert errors to exceptions """ - try: - req = urllib2.Request(uri, {}) - req.add_header('Content-Type', 'application/octet-stream') - if data is not None: - req.add_data(data) - - resp = simplejson.load(urllib2.urlopen(req)) - if 'Error' in resp: - raise ZooKeeper.Error(resp['Error']) - return resp - - except urllib2.HTTPError, e: - if e.code == 201: - return True - elif e.code == 409: - raise ZooKeeper.ZNodeExists(uri) - elif e.code == 401: - raise ZooKeeper.InvalidSession(uri) - raise - - def _do_delete(self, uri): - """ Send a DELETE request """ - req = RequestWithMethod(uri) - req.set_method('DELETE') - req.add_header('Content-Type', 'application/octet-stream') - return urllib2.urlopen(req).read() - - def _do_put(self, uri, data): - """ Send a PUT request """ - try: - req = RequestWithMethod(uri) - req.set_method('PUT') - req.add_header('Content-Type', 'application/octet-stream') - if data is not None: - req.add_data(data) - - return urllib2.urlopen(req).read() - except urllib2.HTTPError, e: - if e.code == 412: # precondition failed - raise ZooKeeper.WrongVersion(uri) - raise - http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/Base.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/Base.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/Base.java deleted file mode 100644 index 924f796..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/Base.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.io.ByteArrayInputStream; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.JUnit4ZKTestRunner; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.server.jersey.SetTest.MyWatcher; -import org.apache.zookeeper.server.jersey.cfg.RestCfg; -import org.junit.After; -import org.junit.Before; -import org.junit.runner.RunWith; - -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.WebResource; - -/** - * Test stand-alone server. - * - */ -@RunWith(JUnit4ZKTestRunner.class) -public class Base { - protected static final Logger LOG = LoggerFactory.getLogger(Base.class); - - protected static final String CONTEXT_PATH = "/zk"; - protected static final int GRIZZLY_PORT = 10104; - protected static final String BASEURI = String.format( - "http://localhost:%d%s", GRIZZLY_PORT, CONTEXT_PATH); - protected static final String ZKHOSTPORT = "localhost:22182"; - protected Client client; - protected WebResource znodesr, sessionsr; - - protected ZooKeeper zk; - - private RestMain rest; - - @Before - public void setUp() throws Exception { - RestCfg cfg = new RestCfg(new ByteArrayInputStream(String.format( - "rest.port=%s\n" + - "rest.endpoint.1=%s;%s\n", - GRIZZLY_PORT, CONTEXT_PATH, ZKHOSTPORT).getBytes())); - - rest = new RestMain(cfg); - rest.start(); - - zk = new ZooKeeper(ZKHOSTPORT, 30000, new MyWatcher()); - - client = Client.create(); - znodesr = client.resource(BASEURI).path("znodes/v1"); - sessionsr = client.resource(BASEURI).path("sessions/v1/"); - } - - @After - public void tearDown() throws Exception { - client.destroy(); - zk.close(); - rest.stop(); - } - - protected static String createBaseZNode() throws Exception { - ZooKeeper zk = new ZooKeeper(ZKHOSTPORT, 30000, new MyWatcher()); - - String baseZnode = zk.create("/test-", null, Ids.OPEN_ACL_UNSAFE, - CreateMode.PERSISTENT_SEQUENTIAL); - zk.close(); - - return baseZnode; - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/CreateTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/CreateTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/CreateTest.java deleted file mode 100644 index 018c54b..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/CreateTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; -import java.util.Collection; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.data.Stat; -import org.apache.zookeeper.server.jersey.jaxb.ZPath; -import org.junit.Test; -import org.junit.Assert; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.WebResource.Builder; - - -/** - * Test stand-alone server. - * - */ -@RunWith(Parameterized.class) -public class CreateTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(CreateTest.class); - - private String accept; - private String path; - private String name; - private String encoding; - private ClientResponse.Status expectedStatus; - private ZPath expectedPath; - private byte[] data; - private boolean sequence; - - public static class MyWatcher implements Watcher { - public void process(WatchedEvent event) { - // FIXME ignore for now - } - } - - @Parameters - public static Collection data() throws Exception { - String baseZnode = Base.createBaseZNode(); - - return Arrays.asList(new Object[][] { - {MediaType.APPLICATION_JSON, - baseZnode, "foo bar", "utf8", - ClientResponse.Status.CREATED, - new ZPath(baseZnode + "/foo bar"), null, - false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t1", "utf8", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-t1"), - null, false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t1", "utf8", - ClientResponse.Status.CONFLICT, null, null, false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t2", "utf8", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-t2"), - "".getBytes(), false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t2", "utf8", - ClientResponse.Status.CONFLICT, null, null, false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t3", "utf8", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-t3"), - "foo".getBytes(), false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t3", "utf8", - ClientResponse.Status.CONFLICT, null, null, false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-t4", "base64", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-t4"), - "foo".getBytes(), false }, - {MediaType.APPLICATION_JSON, baseZnode, "c-", "utf8", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-"), null, - true }, - {MediaType.APPLICATION_JSON, baseZnode, "c-", "utf8", - ClientResponse.Status.CREATED, new ZPath(baseZnode + "/c-"), null, - true } - }); - } - - public CreateTest(String accept, String path, String name, String encoding, - ClientResponse.Status status, ZPath expectedPath, byte[] data, - boolean sequence) - { - this.accept = accept; - this.path = path; - this.name = name; - this.encoding = encoding; - this.expectedStatus = status; - this.expectedPath = expectedPath; - this.data = data; - this.sequence = sequence; - } - - @Test - public void testCreate() throws Exception { - WebResource wr = znodesr.path(path).queryParam("dataformat", encoding) - .queryParam("name", name); - if (data == null) { - wr = wr.queryParam("null", "true"); - } - if (sequence) { - wr = wr.queryParam("sequence", "true"); - } - - Builder builder = wr.accept(accept); - - ClientResponse cr; - if (data == null) { - cr = builder.post(ClientResponse.class); - } else { - cr = builder.post(ClientResponse.class, data); - } - Assert.assertEquals(expectedStatus, cr.getClientResponseStatus()); - - if (expectedPath == null) { - return; - } - - ZPath zpath = cr.getEntity(ZPath.class); - if (sequence) { - Assert.assertTrue(zpath.path.startsWith(expectedPath.path)); - Assert.assertTrue(zpath.uri.startsWith(znodesr.path(path).toString())); - } else { - Assert.assertEquals(expectedPath, zpath); - Assert.assertEquals(znodesr.path(path).toString(), zpath.uri); - } - - // use out-of-band method to verify - byte[] data = zk.getData(zpath.path, false, new Stat()); - if (data == null && this.data == null) { - return; - } else if (data == null || this.data == null) { - Assert.assertEquals(data, this.data); - } else { - Assert.assertTrue(new String(data) + " == " + new String(this.data), - Arrays.equals(data, this.data)); - } - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/DeleteTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/DeleteTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/DeleteTest.java deleted file mode 100644 index 495f93b..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/DeleteTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; -import java.util.Collection; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.WatchedEvent; -import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.data.Stat; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import com.sun.jersey.api.client.ClientResponse; - - -/** - * Test stand-alone server. - * - */ -@RunWith(Parameterized.class) -public class DeleteTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(DeleteTest.class); - - private String zpath; - private ClientResponse.Status expectedStatus; - - public static class MyWatcher implements Watcher { - public void process(WatchedEvent event) { - // FIXME ignore for now - } - } - - @Parameters - public static Collection data() throws Exception { - String baseZnode = Base.createBaseZNode(); - - return Arrays.asList(new Object[][] { - {baseZnode, baseZnode, ClientResponse.Status.NO_CONTENT }, - {baseZnode, baseZnode, ClientResponse.Status.NO_CONTENT } - }); - } - - public DeleteTest(String path, String zpath, ClientResponse.Status status) { - this.zpath = zpath; - this.expectedStatus = status; - } - - public void verify(String type) throws Exception { - if (expectedStatus != ClientResponse.Status.NOT_FOUND) { - zpath = zk.create(zpath, null, Ids.OPEN_ACL_UNSAFE, - CreateMode.PERSISTENT_SEQUENTIAL); - } - - ClientResponse cr = znodesr.path(zpath).accept(type).type(type) - .delete(ClientResponse.class); - Assert.assertEquals(expectedStatus, cr.getClientResponseStatus()); - - // use out-of-band method to verify - Stat stat = zk.exists(zpath, false); - Assert.assertNull(stat); - } - - @Test - public void testDelete() throws Exception { - verify(MediaType.APPLICATION_OCTET_STREAM); - verify(MediaType.APPLICATION_JSON); - verify(MediaType.APPLICATION_XML); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/ExistsTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/ExistsTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/ExistsTest.java deleted file mode 100644 index 68b40f0..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/ExistsTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; -import java.util.Collection; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import com.sun.jersey.api.client.ClientResponse; - - -/** - * Test stand-alone server. - * - */ -@RunWith(Parameterized.class) -public class ExistsTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(ExistsTest.class); - - private String path; - private ClientResponse.Status expectedStatus; - - @Parameters - public static Collection data() throws Exception { - String baseZnode = Base.createBaseZNode(); - - return Arrays.asList(new Object[][] { - {baseZnode, ClientResponse.Status.OK }, - {baseZnode + "dkdk38383", ClientResponse.Status.NOT_FOUND } - }); - } - - public ExistsTest(String path, ClientResponse.Status status) { - this.path = path; - this.expectedStatus = status; - } - - private void verify(String type) { - ClientResponse cr = znodesr.path(path).accept(type).type(type).head(); - if (type.equals(MediaType.APPLICATION_OCTET_STREAM) - && expectedStatus == ClientResponse.Status.OK) { - Assert.assertEquals(ClientResponse.Status.NO_CONTENT, - cr.getClientResponseStatus()); - } else { - Assert.assertEquals(expectedStatus, cr.getClientResponseStatus()); - } - } - - @Test - public void testExists() throws Exception { - verify(MediaType.APPLICATION_OCTET_STREAM); - verify(MediaType.APPLICATION_JSON); - verify(MediaType.APPLICATION_XML); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetChildrenTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetChildrenTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetChildrenTest.java deleted file mode 100644 index 8f7fc98..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetChildrenTest.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.CreateMode; -import org.apache.zookeeper.ZooDefs.Ids; -import org.apache.zookeeper.server.jersey.jaxb.ZChildren; -import org.apache.zookeeper.server.jersey.jaxb.ZChildrenJSON; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import com.sun.jersey.api.client.ClientResponse; - - -/** - * Test stand-alone server. - * - */ -@RunWith(Parameterized.class) -public class GetChildrenTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(GetChildrenTest.class); - - private String accept; - private String path; - private ClientResponse.Status expectedStatus; - private String expectedPath; - private List expectedChildren; - - @Parameters - public static Collection data() throws Exception { - String baseZnode = Base.createBaseZNode(); - String baseZnode2 = Base.createBaseZNode(); - String baseZnode3 = Base.createBaseZNode(); - String baseZnode4 = Base.createBaseZNode(); - String baseZnode5 = Base.createBaseZNode(); - String baseZnode6 = Base.createBaseZNode(); - - return Arrays.asList(new Object[][] { - {MediaType.APPLICATION_JSON, baseZnode + "abddkdkd", - ClientResponse.Status.NOT_FOUND, null, null }, - {MediaType.APPLICATION_XML, baseZnode + "abddkdkd", - ClientResponse.Status.NOT_FOUND, null, null }, - {MediaType.APPLICATION_JSON, baseZnode, ClientResponse.Status.OK, - baseZnode, Arrays.asList(new String[] {}) }, - {MediaType.APPLICATION_XML, baseZnode, ClientResponse.Status.OK, - baseZnode, Arrays.asList(new String[] {}) }, - {MediaType.APPLICATION_JSON, baseZnode, ClientResponse.Status.OK, - baseZnode, Arrays.asList(new String[] {"c1"}) }, - {MediaType.APPLICATION_XML, baseZnode4, ClientResponse.Status.OK, - baseZnode4, Arrays.asList(new String[] {"c1"}) }, - {MediaType.APPLICATION_JSON, baseZnode2, ClientResponse.Status.OK, - baseZnode2, Arrays.asList(new String[] {"c1", "c2"}) }, - {MediaType.APPLICATION_XML, baseZnode5, ClientResponse.Status.OK, - baseZnode5, Arrays.asList(new String[] {"c1", "c2"}) }, - {MediaType.APPLICATION_JSON, baseZnode3, ClientResponse.Status.OK, - baseZnode3, Arrays.asList(new String[] {"c1", "c2", "c3", "c4"}) }, - {MediaType.APPLICATION_XML, baseZnode6, ClientResponse.Status.OK, - baseZnode6, Arrays.asList(new String[] {"c1", "c2", "c3", "c4"}) } - - }); - } - - public GetChildrenTest(String accept, String path, ClientResponse.Status status, - String expectedPath, List expectedChildren) - { - this.accept = accept; - this.path = path; - this.expectedStatus = status; - this.expectedPath = expectedPath; - this.expectedChildren = expectedChildren; - } - - @Test - public void testGetChildren() throws Exception { - if (expectedChildren != null) { - for(String child : expectedChildren) { - zk.create(expectedPath + "/" + child, null, - Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); - } - } - - ClientResponse cr = znodesr.path(path).queryParam("view", "children") - .accept(accept).get(ClientResponse.class); - Assert.assertEquals(expectedStatus, cr.getClientResponseStatus()); - - if (expectedChildren == null) { - return; - } - - if (accept.equals(MediaType.APPLICATION_JSON)) { - ZChildrenJSON zchildren = cr.getEntity(ZChildrenJSON.class); - Collections.sort(expectedChildren); - Collections.sort(zchildren.children); - Assert.assertEquals(expectedChildren, zchildren.children); - Assert.assertEquals(znodesr.path(path).toString(), zchildren.uri); - Assert.assertEquals(znodesr.path(path).toString() + "/{child}", - zchildren.child_uri_template); - } else if (accept.equals(MediaType.APPLICATION_XML)) { - ZChildren zchildren = cr.getEntity(ZChildren.class); - Collections.sort(expectedChildren); - Collections.sort(zchildren.children); - Assert.assertEquals(expectedChildren, zchildren.children); - Assert.assertEquals(znodesr.path(path).toString(), zchildren.uri); - Assert.assertEquals(znodesr.path(path).toString() + "/{child}", - zchildren.child_uri_template); - } else { - Assert.fail("unknown accept type"); - } - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetTest.java deleted file mode 100644 index 8ee1dc6..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/GetTest.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; -import java.util.Collection; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.server.jersey.jaxb.ZStat; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import com.sun.jersey.api.client.ClientResponse; - - -/** - * Test stand-alone server. - * - */ -@RunWith(Parameterized.class) -public class GetTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(GetTest.class); - - private String accept; - private String path; - private String encoding; - private ClientResponse.Status expectedStatus; - private ZStat expectedStat; - - @Parameters - public static Collection data() throws Exception { - String baseZnode = Base.createBaseZNode(); - - return Arrays.asList(new Object[][] { - {MediaType.APPLICATION_JSON, baseZnode, "utf8", - ClientResponse.Status.OK, new ZStat(baseZnode, null, null) }, - {MediaType.APPLICATION_JSON, baseZnode, "utf8", - ClientResponse.Status.OK, new ZStat(baseZnode, null, "") }, - {MediaType.APPLICATION_JSON, baseZnode, "utf8", - ClientResponse.Status.OK, new ZStat(baseZnode, null, "foo") }, - {MediaType.APPLICATION_JSON, baseZnode, "base64", - ClientResponse.Status.OK, new ZStat(baseZnode, null, null) }, - {MediaType.APPLICATION_JSON, baseZnode, "base64", - ClientResponse.Status.OK, new ZStat(baseZnode, "".getBytes(), null) }, - {MediaType.APPLICATION_JSON, baseZnode, "base64", - ClientResponse.Status.OK, new ZStat(baseZnode, "".getBytes(), null) }, - {MediaType.APPLICATION_JSON, baseZnode, "base64", - ClientResponse.Status.OK, new ZStat(baseZnode, "foo".getBytes(), null) }, - {MediaType.APPLICATION_JSON, baseZnode + "abaddkdk", "utf8", - ClientResponse.Status.NOT_FOUND, null }, - {MediaType.APPLICATION_JSON, baseZnode + "abaddkdk", "base64", - ClientResponse.Status.NOT_FOUND, null }, - - {MediaType.APPLICATION_XML, baseZnode, "utf8", - ClientResponse.Status.OK, new ZStat(baseZnode, null, "foo") }, - {MediaType.APPLICATION_XML, baseZnode, "base64", - ClientResponse.Status.OK, - new ZStat(baseZnode, "foo".getBytes(), null) }, - {MediaType.APPLICATION_XML, baseZnode + "abaddkdk", "utf8", - ClientResponse.Status.NOT_FOUND, null }, - {MediaType.APPLICATION_XML, baseZnode + "abaddkdk", "base64", - ClientResponse.Status.NOT_FOUND, null } - - }); - } - - public GetTest(String accept, String path, String encoding, - ClientResponse.Status status, ZStat stat) - { - this.accept = accept; - this.path = path; - this.encoding = encoding; - this.expectedStatus = status; - this.expectedStat = stat; - } - - @Test - public void testGet() throws Exception { - if (expectedStat != null) { - if (expectedStat.data64 != null || expectedStat.dataUtf8 == null) { - zk.setData(expectedStat.path, expectedStat.data64, -1); - } else { - zk.setData(expectedStat.path, - expectedStat.dataUtf8.getBytes(), -1); - } - } - - ClientResponse cr = znodesr.path(path).queryParam("dataformat", encoding) - .accept(accept).get(ClientResponse.class); - Assert.assertEquals(expectedStatus, cr.getClientResponseStatus()); - - if (expectedStat == null) { - return; - } - - ZStat zstat = cr.getEntity(ZStat.class); - Assert.assertEquals(expectedStat, zstat); - Assert.assertEquals(znodesr.path(path).toString(), zstat.uri); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RestTestSuite.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RestTestSuite.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RestTestSuite.java deleted file mode 100644 index fc69caf..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RestTestSuite.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.runner.RunWith; -import org.junit.runners.Suite; -import org.junit.runners.Suite.SuiteClasses; - -@RunWith(Suite.class) -@SuiteClasses({WadlTest.class, GetTest.class, GetChildrenTest.class, - CreateTest.class, SetTest.class, ExistsTest.class, DeleteTest.class }) -public class RestTestSuite { - - @BeforeClass - public static void setUp() { - // suite setup - } - - @AfterClass - public static void tearDown() { - // suite setup - } - -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RootTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RootTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RootTest.java deleted file mode 100644 index af8f9cf..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/RootTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.util.Arrays; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.data.Stat; -import org.apache.zookeeper.server.jersey.jaxb.ZPath; -import org.junit.Assert; -import org.junit.Test; - -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.WebResource.Builder; - -/** - * Test stand-alone server. - * - */ -public class RootTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(RootTest.class); - - @Test - public void testCreate() throws Exception { - String path = "/"; - String name = "roottest-create"; - byte[] data = "foo".getBytes(); - - WebResource wr = znodesr.path(path).queryParam("dataformat", "utf8") - .queryParam("name", name); - Builder builder = wr.accept(MediaType.APPLICATION_JSON); - - ClientResponse cr; - cr = builder.post(ClientResponse.class, data); - Assert.assertEquals(ClientResponse.Status.CREATED, cr.getClientResponseStatus()); - - ZPath zpath = cr.getEntity(ZPath.class); - Assert.assertEquals(new ZPath(path + name), zpath); - Assert.assertEquals(znodesr.path(path).toString(), zpath.uri); - - // use out-of-band method to verify - byte[] rdata = zk.getData(zpath.path, false, new Stat()); - Assert.assertTrue(new String(rdata) + " == " + new String(data), - Arrays.equals(rdata, data)); - } -} http://git-wip-us.apache.org/repos/asf/zookeeper/blob/b0df8fe1/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SessionTest.java ---------------------------------------------------------------------- diff --git a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SessionTest.java b/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SessionTest.java deleted file mode 100644 index b8fc927..0000000 --- a/src/contrib/rest/src/test/org/apache/zookeeper/server/jersey/SessionTest.java +++ /dev/null @@ -1,135 +0,0 @@ -/** - * 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.apache.zookeeper.server.jersey; - -import java.io.IOException; - -import javax.ws.rs.core.MediaType; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.ZooKeeper; -import org.apache.zookeeper.data.Stat; -import org.apache.zookeeper.server.jersey.jaxb.ZSession; -import org.codehaus.jettison.json.JSONException; -import org.junit.Assert; -import org.junit.Test; - -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.WebResource.Builder; - -public class SessionTest extends Base { - protected static final Logger LOG = LoggerFactory.getLogger(SessionTest.class); - - private ZSession createSession() { - return createSession("30"); - } - - private ZSession createSession(String expire) { - WebResource wr = sessionsr.queryParam("op", "create") - .queryParam("expire", expire); - Builder b = wr.accept(MediaType.APPLICATION_JSON); - - ClientResponse cr = b.post(ClientResponse.class, null); - Assert.assertEquals(ClientResponse.Status.CREATED, cr - .getClientResponseStatus()); - - return cr.getEntity(ZSession.class); - } - - @Test - public void testCreateNewSession() throws JSONException { - ZSession session = createSession(); - Assert.assertEquals(session.id.length(), 36); - - // use out-of-band method to verify - Assert.assertTrue(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - } - - @Test - public void testSessionExpires() throws InterruptedException { - ZSession session = createSession("1"); - - // use out-of-band method to verify - Assert.assertTrue(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - - // wait for the session to be closed - Thread.sleep(1500); - Assert.assertFalse(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - } - - @Test - public void testDeleteSession() { - ZSession session = createSession("30"); - - WebResource wr = sessionsr.path(session.id); - Builder b = wr.accept(MediaType.APPLICATION_JSON); - - Assert.assertTrue(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - ClientResponse cr = b.delete(ClientResponse.class, null); - Assert.assertEquals(ClientResponse.Status.NO_CONTENT, - cr.getClientResponseStatus()); - - Assert.assertFalse(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - } - - @Test - public void testSendHeartbeat() throws InterruptedException { - ZSession session = createSession("2"); - - Thread.sleep(1000); - WebResource wr = sessionsr.path(session.id); - Builder b = wr.accept(MediaType.APPLICATION_JSON); - - ClientResponse cr = b.put(ClientResponse.class, null); - Assert.assertEquals(ClientResponse.Status.OK, cr.getClientResponseStatus()); - - Thread.sleep(1500); - Assert.assertTrue(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - - Thread.sleep(1000); - Assert.assertFalse(ZooKeeperService.isConnected(CONTEXT_PATH, session.id)); - } - - @Test - public void testCreateEphemeralZNode() - throws KeeperException, InterruptedException, IOException { - ZSession session = createSession("30"); - - WebResource wr = znodesr.path("/") - .queryParam("op", "create") - .queryParam("name", "ephemeral-test") - .queryParam("ephemeral", "true") - .queryParam("session", session.id) - .queryParam("null", "true"); - - Builder b = wr.accept(MediaType.APPLICATION_JSON); - ClientResponse cr = b.post(ClientResponse.class); - Assert.assertEquals(ClientResponse.Status.CREATED, cr.getClientResponseStatus()); - - Stat stat = new Stat(); - zk.getData("/ephemeral-test", false, stat); - - ZooKeeper sessionZK = ZooKeeperService.getClient(CONTEXT_PATH, session.id); - Assert.assertEquals(stat.getEphemeralOwner(), sessionZK.getSessionId()); - } -}