You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by fa...@apache.org on 2014/09/27 16:23:02 UTC
svn commit: r1627970 [5/6] - in
/qpid/proton/branches/fadams-javascript-binding: ./
contrib/proton-jms/src/main/java/org/apache/qpid/proton/jms/
examples/include/pncompat/ proton-c/ proton-c/bindings/javascript/
proton-c/bindings/perl/ proton-c/binding...
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Event.java Sat Sep 27 14:23:00 2014
@@ -28,59 +28,47 @@ package org.apache.qpid.proton.engine;
public interface Event
{
- public enum Category {
- CONNECTION,
- SESSION,
- LINK,
- DELIVERY,
- TRANSPORT;
- }
public enum Type {
- CONNECTION_INIT(Category.CONNECTION, 1),
- CONNECTION_OPEN(Category.CONNECTION, 2),
- CONNECTION_REMOTE_OPEN(Category.CONNECTION, 3),
- CONNECTION_CLOSE(Category.CONNECTION, 4),
- CONNECTION_REMOTE_CLOSE(Category.CONNECTION, 5),
- CONNECTION_FINAL(Category.CONNECTION, 6),
-
- SESSION_INIT(Category.SESSION, 1),
- SESSION_OPEN(Category.SESSION, 2),
- SESSION_REMOTE_OPEN(Category.SESSION, 3),
- SESSION_CLOSE(Category.SESSION, 4),
- SESSION_REMOTE_CLOSE(Category.SESSION, 5),
- SESSION_FINAL(Category.SESSION, 6),
-
- LINK_INIT(Category.LINK, 1),
- LINK_OPEN(Category.LINK, 2),
- LINK_REMOTE_OPEN(Category.LINK, 3),
- LINK_CLOSE(Category.LINK, 4),
- LINK_REMOTE_CLOSE(Category.LINK, 5),
- LINK_FLOW(Category.LINK, 6),
- LINK_FINAL(Category.LINK, 7),
-
- DELIVERY(Category.DELIVERY, 1),
- TRANSPORT(Category.TRANSPORT, 1);
-
- private int _opcode;
- private Category _category;
-
- private Type(Category c, int o)
- {
- this._category = c;
- this._opcode = o;
- }
-
- public Category getCategory()
- {
- return this._category;
- }
- }
+ CONNECTION_INIT,
+ CONNECTION_BOUND,
+ CONNECTION_UNBOUND,
+ CONNECTION_OPEN,
+ CONNECTION_REMOTE_OPEN,
+ CONNECTION_CLOSE,
+ CONNECTION_REMOTE_CLOSE,
+ CONNECTION_FINAL,
+
+ SESSION_INIT,
+ SESSION_OPEN,
+ SESSION_REMOTE_OPEN,
+ SESSION_CLOSE,
+ SESSION_REMOTE_CLOSE,
+ SESSION_FINAL,
+
+ LINK_INIT,
+ LINK_OPEN,
+ LINK_REMOTE_OPEN,
+ LINK_CLOSE,
+ LINK_REMOTE_CLOSE,
+ LINK_DETACH,
+ LINK_REMOTE_DETACH,
+ LINK_FLOW,
+ LINK_FINAL,
- Category getCategory();
+ DELIVERY,
+
+ TRANSPORT,
+ TRANSPORT_ERROR,
+ TRANSPORT_HEAD_CLOSED,
+ TRANSPORT_TAIL_CLOSED,
+ TRANSPORT_CLOSED
+ }
Type getType();
+ Object getContext();
+
Connection getConnection();
Session getSession();
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Link.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Link.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Link.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Link.java Sat Sep 27 14:23:00 2014
@@ -184,4 +184,7 @@ public interface Link extends Endpoint
public int getRemoteCredit();
public boolean getDrain();
+
+ public void detach();
+
}
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/Transport.java Sat Sep 27 14:23:00 2014
@@ -22,6 +22,7 @@ package org.apache.qpid.proton.engine;
import java.nio.ByteBuffer;
+import org.apache.qpid.proton.amqp.transport.ErrorCondition;
import org.apache.qpid.proton.engine.impl.TransportImpl;
@@ -221,4 +222,6 @@ public interface Transport extends Endpo
int getRemoteChannelMax();
+ ErrorCondition getCondition();
+
}
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/EventImpl.java Sat Sep 27 14:23:00 2014
@@ -56,11 +56,6 @@ class EventImpl implements Event
context = null;
}
- public Category getCategory()
- {
- return type.getCategory();
- }
-
public Type getType()
{
return type;
@@ -73,16 +68,15 @@ class EventImpl implements Event
public Connection getConnection()
{
- switch (type.getCategory()) {
- case CONNECTION:
+ if (context instanceof Connection) {
return (Connection) context;
- case TRANSPORT:
+ } else if (context instanceof Transport) {
Transport transport = getTransport();
if (transport == null) {
return null;
}
return ((TransportImpl) transport).getConnectionImpl();
- default:
+ } else {
Session ssn = getSession();
if (ssn == null) {
return null;
@@ -93,10 +87,9 @@ class EventImpl implements Event
public Session getSession()
{
- switch (type.getCategory()) {
- case SESSION:
+ if (context instanceof Session) {
return (Session) context;
- default:
+ } else {
Link link = getLink();
if (link == null) {
return null;
@@ -107,10 +100,9 @@ class EventImpl implements Event
public Link getLink()
{
- switch (type.getCategory()) {
- case LINK:
+ if (context instanceof Link) {
return (Link) context;
- default:
+ } else {
Delivery dlv = getDelivery();
if (dlv == null) {
return null;
@@ -121,20 +113,18 @@ class EventImpl implements Event
public Delivery getDelivery()
{
- switch (type.getCategory()) {
- case DELIVERY:
+ if (context instanceof Delivery) {
return (Delivery) context;
- default:
+ } else {
return null;
}
}
public Transport getTransport()
{
- switch (type.getCategory()) {
- case TRANSPORT:
+ if (context instanceof Transport) {
return (Transport) context;
- default:
+ } else {
return null;
}
}
@@ -150,4 +140,5 @@ class EventImpl implements Event
{
return "EventImpl{" + "type=" + type + ", context=" + context + '}';
}
+
}
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/LinkImpl.java Sat Sep 27 14:23:00 2014
@@ -55,6 +55,7 @@ public abstract class LinkImpl extends E
private LinkNode<LinkImpl> _node;
private boolean _drain;
+ private boolean _detached;
LinkImpl(SessionImpl session, String name)
{
@@ -398,4 +399,17 @@ public abstract class LinkImpl extends E
{
getConnectionImpl().put(Event.Type.LINK_CLOSE, this);
}
+
+ public void detach()
+ {
+ _detached = true;
+ getConnectionImpl().put(Event.Type.LINK_DETACH, this);
+ modified();
+ }
+
+ boolean detached()
+ {
+ return _detached;
+ }
+
}
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/SessionImpl.java Sat Sep 27 14:23:00 2014
@@ -103,11 +103,14 @@ public class SessionImpl extends Endpoin
_connection.removeSessionEndpoint(_node);
_node = null;
- for(SenderImpl sender : _senders.values()) {
+ List<SenderImpl> senders = new ArrayList<SenderImpl>(_senders.values());
+ for(SenderImpl sender : senders) {
sender.free();
}
_senders.clear();
- for(ReceiverImpl receiver : _receivers.values()) {
+
+ List<ReceiverImpl> receivers = new ArrayList<ReceiverImpl>(_receivers.values());
+ for(ReceiverImpl receiver : receivers) {
receiver.free();
}
_receivers.clear();
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java Sat Sep 27 14:23:00 2014
@@ -121,7 +121,10 @@ public class TransportImpl extends Endpo
private FrameHandler _frameHandler = this;
private boolean _head_closed = false;
- private TransportException _tail_error = null;
+ private ErrorCondition _condition = null;
+
+ private boolean postedHeadClosed = false;
+ private boolean postedTailClosed = false;
/**
* @deprecated This constructor's visibility will be reduced to the default scope in a future release.
@@ -208,10 +211,18 @@ public class TransportImpl extends Endpo
}
@Override
+ public ErrorCondition getCondition()
+ {
+ return _condition;
+ }
+
+ @Override
public void bind(Connection conn)
{
- _connectionEndpoint = (ConnectionImpl) conn;
// TODO - check if already bound
+
+ _connectionEndpoint = (ConnectionImpl) conn;
+ put(Event.Type.CONNECTION_BOUND, conn);
_connectionEndpoint.setTransport(this);
_connectionEndpoint.incref();
@@ -230,6 +241,7 @@ public class TransportImpl extends Endpo
@Override
public void unbind()
{
+ put(Event.Type.CONNECTION_UNBOUND, _connectionEndpoint);
_connectionEndpoint.modifyEndpoints();
_connectionEndpoint.setTransport(null);
@@ -369,7 +381,7 @@ public class TransportImpl extends Endpo
SessionImpl session = link.getSession();
TransportSession transportSession = getTransportState(session);
- if(link.getLocalState() == EndpointState.CLOSED
+ if(((link.getLocalState() == EndpointState.CLOSED) || link.detached())
&& transportLink.isLocalHandleSet()
&& !_isCloseSent)
{
@@ -389,8 +401,7 @@ public class TransportImpl extends Endpo
Detach detach = new Detach();
detach.setHandle(localHandle);
- // TODO - need an API for detaching rather than closing the link
- detach.setClosed(true);
+ detach.setClosed(!link.detached());
ErrorCondition localError = link.getCondition();
if( localError.getCondition() !=null )
@@ -517,6 +528,11 @@ public class TransportImpl extends Endpo
transfer.setDeliveryTag(new Binary(delivery.getTag()));
transfer.setHandle(tpLink.getLocalHandle());
+ if(delivery.getLocalState() != null)
+ {
+ transfer.setState(delivery.getLocalState());
+ }
+
if(delivery.isSettled())
{
transfer.setSettled(Boolean.TRUE);
@@ -742,7 +758,7 @@ public class TransportImpl extends Endpo
private void processOpen()
{
- if ((_tail_error != null ||
+ if ((_condition != null ||
(_connectionEndpoint != null &&
_connectionEndpoint.getLocalState() != EndpointState.UNINITIALIZED)) &&
!_isOpenSent) {
@@ -919,7 +935,7 @@ public class TransportImpl extends Endpo
private void processClose()
{
- if ((_tail_error != null ||
+ if ((_condition != null ||
(_connectionEndpoint != null &&
_connectionEndpoint.getLocalState() == EndpointState.CLOSED)) &&
!_isCloseSent) {
@@ -930,8 +946,7 @@ public class TransportImpl extends Endpo
ErrorCondition localError;
if (_connectionEndpoint == null) {
- localError = new ErrorCondition(ConnectionError.FRAMING_ERROR,
- _tail_error.toString());
+ localError = _condition;
} else {
localError = _connectionEndpoint.getCondition();
}
@@ -1154,7 +1169,11 @@ public class TransportImpl extends Endpo
LinkImpl link = transportLink.getLink();
transportLink.receivedDetach();
transportSession.freeRemoteHandle(transportLink.getRemoteHandle());
- _connectionEndpoint.put(Event.Type.LINK_REMOTE_CLOSE, link);
+ if (detach.getClosed()) {
+ _connectionEndpoint.put(Event.Type.LINK_REMOTE_CLOSE, link);
+ } else {
+ _connectionEndpoint.put(Event.Type.LINK_REMOTE_DETACH, link);
+ }
transportLink.clearRemoteHandle();
link.setRemoteState(EndpointState.CLOSED);
if(detach.getError() != null)
@@ -1231,17 +1250,40 @@ public class TransportImpl extends Endpo
return _closeReceived;
}
+ void put(Event.Type type, Object context) {
+ if (_connectionEndpoint != null) {
+ _connectionEndpoint.put(type, context);
+ }
+ }
+
+ private void maybePostClosed()
+ {
+ if (postedHeadClosed && postedTailClosed) {
+ put(Event.Type.TRANSPORT_CLOSED, this);
+ }
+ }
+
@Override
public void closed(TransportException error)
{
if (!_closeReceived || error != null) {
if (error == null) {
- _tail_error = new TransportException("connection aborted");
+ _condition = new ErrorCondition(ConnectionError.FRAMING_ERROR,
+ "connection aborted");
} else {
- _tail_error = error;
+ _condition = new ErrorCondition(ConnectionError.FRAMING_ERROR,
+ error.toString());
}
_head_closed = true;
}
+ if (_condition != null) {
+ put(Event.Type.TRANSPORT_ERROR, this);
+ }
+ if (!postedTailClosed) {
+ put(Event.Type.TRANSPORT_TAIL_CLOSED, this);
+ postedTailClosed = true;
+ maybePostClosed();
+ }
}
@Override
@@ -1346,6 +1388,13 @@ public class TransportImpl extends Endpo
{
init();
_outputProcessor.pop(bytes);
+
+ int p = pending();
+ if (p < 0 && !postedHeadClosed) {
+ put(Event.Type.TRANSPORT_HEAD_CLOSED, this);
+ postedHeadClosed = true;
+ maybePostClosed();
+ }
}
@Override
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/java/org/apache/qpid/proton/messenger/impl/Address.java Sat Sep 27 14:23:00 2014
@@ -26,7 +26,7 @@ package org.apache.qpid.proton.messenger
*
*/
-class Address
+public class Address
{
private String _address;
@@ -38,13 +38,7 @@ class Address
private String _port;
private String _name;
- public Address(String address)
- {
- _address = address;
- parse();
- }
-
- private void parse()
+ public void clear()
{
_passive = false;
_scheme = null;
@@ -53,21 +47,30 @@ class Address
_host = null;
_port = null;
_name = null;
+ }
+
+ public Address()
+ {
+ clear();
+ }
+ public Address(String address)
+ {
+ clear();
int start = 0;
- int schemeEnd = _address.indexOf("://", start);
+ int schemeEnd = address.indexOf("://", start);
if (schemeEnd >= 0) {
- _scheme = _address.substring(start, schemeEnd);
+ _scheme = address.substring(start, schemeEnd);
start = schemeEnd + 3;
}
String uphp;
- int slash = _address.indexOf("/", start);
- if (slash > 0) {
- uphp = _address.substring(start, slash);
- _name = _address.substring(slash + 1);
+ int slash = address.indexOf("/", start);
+ if (slash >= 0) {
+ uphp = address.substring(start, slash);
+ _name = address.substring(slash + 1);
} else {
- uphp = _address.substring(start);
+ uphp = address.substring(start);
}
String hp;
@@ -115,7 +118,18 @@ class Address
public String toString()
{
- return _address;
+ String str = new String();
+ if (_scheme != null) str += _scheme + "://";
+ if (_user != null) str += _user;
+ if (_pass != null) str += ":" + _pass;
+ if (_user != null || _pass != null) str += "@";
+ if (_host != null) {
+ if (_host.contains(":")) str += "[" + _host + "]";
+ else str += _host;
+ }
+ if (_port != null) str += ":" + _port;
+ if (_name != null) str += "/" + _name;
+ return str;
}
public boolean isPassive()
@@ -168,4 +182,33 @@ class Address
return _name;
}
+ public void setScheme(String scheme)
+ {
+ _scheme= scheme;
+ }
+
+ public void setUser(String user)
+ {
+ _user= user;
+ }
+
+ public void setPass(String pass)
+ {
+ _pass= pass;
+ }
+
+ public void setHost(String host)
+ {
+ _host= host;
+ }
+
+ public void setPort(String port)
+ {
+ _port= port;
+ }
+
+ public void setName(String name)
+ {
+ _name= name;
+ }
}
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cengine.py Sat Sep 27 14:23:00 2014
@@ -625,6 +625,10 @@ def pn_link_close(link):
link.on_close()
link.impl.close()
+def pn_link_detach(link):
+ link.on_close()
+ link.impl.detach()
+
def pn_link_flow(link, n):
link.impl.flow(n)
@@ -863,6 +867,7 @@ class pn_transport_wrapper:
def __init__(self, impl):
self.impl = impl
+ self.condition = pn_condition()
def pn_transport():
return wrap(Proton.transport(), pn_transport_wrapper)
@@ -940,15 +945,15 @@ def pn_transport_close_tail(trans):
def pn_transport_closed(trans):
return trans.impl.isClosed()
-from org.apache.qpid.proton.engine import Event
+def pn_transport_condition(trans):
+ trans.condition.decode(trans.impl.getCondition())
+ return trans.condition
-PN_EVENT_CATEGORY_CONNECTION = Event.Category.CONNECTION
-PN_EVENT_CATEGORY_SESSION = Event.Category.SESSION
-PN_EVENT_CATEGORY_LINK = Event.Category.LINK
-PN_EVENT_CATEGORY_DELIVERY = Event.Category.DELIVERY
-PN_EVENT_CATEGORY_TRANSPORT = Event.Category.TRANSPORT
+from org.apache.qpid.proton.engine import Event
PN_CONNECTION_INIT = Event.Type.CONNECTION_INIT
+PN_CONNECTION_BOUND = Event.Type.CONNECTION_BOUND
+PN_CONNECTION_UNBOUND = Event.Type.CONNECTION_UNBOUND
PN_CONNECTION_OPEN = Event.Type.CONNECTION_OPEN
PN_CONNECTION_REMOTE_OPEN = Event.Type.CONNECTION_REMOTE_OPEN
PN_CONNECTION_CLOSE = Event.Type.CONNECTION_CLOSE
@@ -965,10 +970,16 @@ PN_LINK_OPEN = Event.Type.LINK_OPEN
PN_LINK_REMOTE_OPEN = Event.Type.LINK_REMOTE_OPEN
PN_LINK_CLOSE = Event.Type.LINK_CLOSE
PN_LINK_REMOTE_CLOSE = Event.Type.LINK_REMOTE_CLOSE
+PN_LINK_DETACH = Event.Type.LINK_DETACH
+PN_LINK_REMOTE_DETACH = Event.Type.LINK_REMOTE_DETACH
PN_LINK_FLOW = Event.Type.LINK_FLOW
PN_LINK_FINAL = Event.Type.LINK_FINAL
PN_DELIVERY = Event.Type.DELIVERY
PN_TRANSPORT = Event.Type.TRANSPORT
+PN_TRANSPORT_ERROR = Event.Type.TRANSPORT_ERROR
+PN_TRANSPORT_HEAD_CLOSED = Event.Type.TRANSPORT_HEAD_CLOSED
+PN_TRANSPORT_TAIL_CLOSED = Event.Type.TRANSPORT_TAIL_CLOSED
+PN_TRANSPORT_CLOSED = Event.Type.TRANSPORT_CLOSED
def pn_collector():
return Proton.collector()
@@ -1000,8 +1011,33 @@ def pn_event_delivery(event):
def pn_event_transport(event):
return wrap(event.getTransport(), pn_transport_wrapper)
+from org.apache.qpid.proton.engine.impl import ConnectionImpl, SessionImpl, \
+ SenderImpl, ReceiverImpl, DeliveryImpl, TransportImpl
+
+J2C = {
+ ConnectionImpl: "pn_connection",
+ SessionImpl: "pn_session",
+ SenderImpl: "pn_link",
+ ReceiverImpl: "pn_link",
+ DeliveryImpl: "pn_delivery",
+ TransportImpl: "pn_transport"
+}
+
+wrappers = {
+ "pn_connection": lambda x: wrap(x, pn_connection_wrapper),
+ "pn_session": lambda x: wrap(x, pn_session_wrapper),
+ "pn_link": lambda x: wrap(x, pn_link_wrapper),
+ "pn_delivery": lambda x: wrap(x, pn_delivery_wrapper),
+ "pn_transport": lambda x: wrap(x, pn_transport_wrapper),
+ "pn_void": lambda x: x
+}
+
def pn_event_class(event):
- return event.getClass()
+ ctx = event.getContext()
+ return J2C.get(ctx.getClass(), "pn_void")
+
+def pn_event_context(event):
+ return wrappers[pn_event_class(event)](event.getContext())
def pn_event_type(event):
return event.getType()
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cobject.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cobject.py?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cobject.py (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cobject.py Sat Sep 27 14:23:00 2014
@@ -0,0 +1,42 @@
+#
+# 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.
+#
+
+def pn_class_name(cls):
+ return cls
+
+def pn_void2py(obj):
+ return obj
+
+def pn_py2void(obj):
+ return obj
+
+def pn_cast_pn_connection(obj):
+ return obj
+
+def pn_cast_pn_session(obj):
+ return obj
+
+def pn_cast_pn_link(obj):
+ return obj
+
+def pn_cast_pn_delivery(obj):
+ return obj
+
+def pn_cast_pn_transport(obj):
+ return obj
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cobject.py
------------------------------------------------------------------------------
svn:eol-style = native
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cproton.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cproton.py?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cproton.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/cproton.py Sat Sep 27 14:23:00 2014
@@ -23,6 +23,11 @@ exposed to python via swig. This allows
against both the C and Java protocol implementations.
"""
+# @todo(kgiusti) dynamically set these via filters in the pom.xml file
+PN_VERSION_MAJOR = 0
+PN_VERSION_MINOR = 0
+
+from cobject import *
from cerror import *
from ccodec import *
from cengine import *
@@ -31,3 +36,4 @@ from cssl import *
from cdriver import *
from cmessenger import *
from cmessage import *
+from curl import *
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/curl.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/curl.py?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/curl.py (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/curl.py Sat Sep 27 14:23:00 2014
@@ -0,0 +1,47 @@
+#
+# 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
+#
+
+from org.apache.qpid.proton.messenger.impl import Address
+
+def pn_url():
+ return Address()
+
+def pn_url_parse(urlstr):
+ return Address(urlstr)
+
+def pn_url_free(url): pass
+
+def pn_url_clear(url):
+ url.clear();
+
+def pn_url_str(url): return url.toString()
+
+def pn_url_get_scheme(url): return url.getScheme()
+def pn_url_get_username(url): return url.getUser()
+def pn_url_get_password(url): return url.getPass()
+def pn_url_get_host(url): return url.getHost() or None
+def pn_url_get_port(url): return url.getPort()
+def pn_url_get_path(url): return url.getName()
+
+def pn_url_set_scheme(url, value): url.setScheme(value)
+def pn_url_set_username(url, value): url.setUser(value)
+def pn_url_set_password(url, value): url.setPass(value)
+def pn_url_set_host(url, value): url.setHost(value)
+def pn_url_set_port(url, value): url.setPort(value)
+def pn_url_set_path(url, value): url.setName(value)
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/main/resources/curl.py
------------------------------------------------------------------------------
svn:eol-style = native
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java Sat Sep 27 14:23:00 2014
@@ -0,0 +1,108 @@
+/*
+ *
+ * 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.qpid.proton.amqp;
+
+import static org.junit.Assert.*;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+public class BinaryTest
+{
+
+ @Test
+ public void testNotEqualsWithDifferentTypeObject()
+ {
+ Binary bin = createSteppedValueBinary(10);
+
+ assertFalse("Objects should not be equal with different type", bin.equals("not-a-Binary"));
+ }
+
+ @Test
+ public void testEqualsWithItself()
+ {
+ Binary bin = createSteppedValueBinary(10);
+
+ assertTrue("Object should be equal to itself", bin.equals(bin));
+ }
+
+ @Test
+ public void testEqualsWithDifferentBinaryOfSameLengthAndContent()
+ {
+ int length = 10;
+ Binary bin1 = createSteppedValueBinary(length);
+ Binary bin2 = createSteppedValueBinary(length);
+
+ assertTrue("Objects should be equal", bin1.equals(bin2));
+ assertTrue("Objects should be equal", bin2.equals(bin1));
+ }
+
+ @Test
+ public void testEqualsWithDifferentLengthBinaryOfDifferentBytes()
+ {
+ int length1 = 10;
+ Binary bin1 = createSteppedValueBinary(length1);
+ Binary bin2 = createSteppedValueBinary(length1 + 1);
+
+ assertFalse("Objects should not be equal", bin1.equals(bin2));
+ assertFalse("Objects should not be equal", bin2.equals(bin1));
+ }
+
+ @Test
+ public void testEqualsWithDifferentLengthBinaryOfSameByte()
+ {
+ Binary bin1 = createNewRepeatedValueBinary(10, (byte) 1);
+ Binary bin2 = createNewRepeatedValueBinary(123, (byte) 1);
+
+ assertFalse("Objects should not be equal", bin1.equals(bin2));
+ assertFalse("Objects should not be equal", bin2.equals(bin1));
+ }
+
+ @Test
+ public void testEqualsWithDifferentContentBinary()
+ {
+ int length = 10;
+ Binary bin1 = createNewRepeatedValueBinary(length, (byte) 1);
+
+ Binary bin2 = createNewRepeatedValueBinary(length, (byte) 1);
+ bin2.getArray()[5] = (byte) 0;
+
+ assertFalse("Objects should not be equal", bin1.equals(bin2));
+ assertFalse("Objects should not be equal", bin2.equals(bin1));
+ }
+
+ private Binary createSteppedValueBinary(int length) {
+ byte[] bytes = new byte[length];
+ for (int i = 0; i < length; i++) {
+ bytes[i] = (byte) (length - i);
+ }
+
+ return new Binary(bytes);
+ }
+
+ private Binary createNewRepeatedValueBinary(int length, byte repeatedByte){
+ byte[] bytes = new byte[length];
+ Arrays.fill(bytes, repeatedByte);
+
+ return new Binary(bytes);
+ }
+}
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/amqp/BinaryTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java Sat Sep 27 14:23:00 2014
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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.qpid.proton.codec;
+
+import static org.junit.Assert.assertEquals;
+
+import java.lang.Character.UnicodeBlock;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Test;
+import org.apache.qpid.proton.amqp.messaging.AmqpValue;
+
+/**
+ * Test the encoding and decoding of {@link StringType} values.
+ */
+public class StringTypeTest
+{
+ private static final Charset CHARSET_UTF8 = Charset.forName("UTF-8");
+
+ /**
+ * Loop over all the chars in given {@link UnicodeBlock}s and return a
+ * {@link Set <String>} containing all the possible values as their
+ * {@link String} values.
+ *
+ * @param blocks the {@link UnicodeBlock}s to loop over
+ * @return a {@link Set <String>} containing all the possible values as
+ * {@link String} values
+ */
+ private static Set<String> getAllStringsFromUnicodeBlocks(final UnicodeBlock... blocks)
+ {
+ final Set<UnicodeBlock> blockSet = new HashSet<UnicodeBlock>(Arrays.asList(blocks));
+ final Set<String> strings = new HashSet<String>();
+ for (int codePoint = 0; codePoint <= Character.MAX_CODE_POINT; codePoint++)
+ {
+ if (blockSet.contains(UnicodeBlock.of(codePoint)))
+ {
+ final int charCount = Character.charCount(codePoint);
+ final StringBuilder sb = new StringBuilder(
+ charCount);
+ if (charCount == 1)
+ {
+ sb.append(String.valueOf((char) codePoint));
+ }
+ else if (charCount == 2)
+ {
+ //TODO: use Character.highSurrogate(codePoint) and Character.lowSurrogate(codePoint) when Java 7 is baseline
+ char highSurrogate = (char) ((codePoint >>> 10) + ('\uD800' - (0x010000 >>> 10)));
+ char lowSurrogate = (char) ((codePoint & 0x3ff) + '\uDC00');
+
+ sb.append(highSurrogate);
+ sb.append(lowSurrogate);
+ }
+ else
+ {
+ throw new IllegalArgumentException("Character.charCount of "
+ + charCount + " not supported.");
+ }
+ strings.add(sb.toString());
+ }
+ }
+ return strings;
+ }
+
+
+ /**
+ * Test the encoding and decoding of various complicated Unicode characters
+ * which will end up as "surrogate pairs" when encoded to UTF-8
+ */
+ @Test
+ public void calculateUTF8Length()
+ {
+ for (final String input : generateTestData())
+ {
+ assertEquals("Incorrect string length calculated for string '"+input+"'",input.getBytes(CHARSET_UTF8).length, StringType.calculateUTF8Length(input));
+ }
+ }
+
+ /**
+ * Test the encoding and decoding of various Unicode characters
+ */
+ @Test
+ public void encodeDecodeStrings()
+ {
+ final DecoderImpl decoder = new DecoderImpl();
+ final EncoderImpl encoder = new EncoderImpl(decoder);
+ AMQPDefinedTypes.registerAllTypes(decoder, encoder);
+ final ByteBuffer bb = ByteBuffer.allocate(16);
+
+ for (final String input : generateTestData())
+ {
+ bb.clear();
+ final AmqpValue inputValue = new AmqpValue(input);
+ encoder.setByteBuffer(bb);
+ encoder.writeObject(inputValue);
+ bb.clear();
+ decoder.setByteBuffer(bb);
+ final AmqpValue outputValue = (AmqpValue) decoder.readObject();
+ assertEquals("Failed to round trip String correctly: ", input, outputValue.getValue());
+ }
+ }
+
+ // build up some test data with a set of suitable Unicode characters
+ private Set<String> generateTestData()
+ {
+ return new HashSet<String>()
+ {
+ private static final long serialVersionUID = 7331717267070233454L;
+
+ {
+ // non-surrogate pair blocks
+ addAll(getAllStringsFromUnicodeBlocks(UnicodeBlock.BASIC_LATIN,
+ UnicodeBlock.LATIN_1_SUPPLEMENT,
+ UnicodeBlock.GREEK,
+ UnicodeBlock.LETTERLIKE_SYMBOLS));
+ // blocks with surrogate pairs
+ //TODO: restore others when Java 7 is baseline
+ addAll(getAllStringsFromUnicodeBlocks(/*UnicodeBlock.MISCELLANEOUS_SYMBOLS_AND_PICTOGRAPHS,*/
+ UnicodeBlock.MUSICAL_SYMBOLS,
+ /*UnicodeBlock.EMOTICONS,*/
+ /*UnicodeBlock.PLAYING_CARDS,*/
+ UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_A,
+ UnicodeBlock.SUPPLEMENTARY_PRIVATE_USE_AREA_B));
+ }
+ };
+ }
+}
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/codec/StringTypeTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/messenger/impl/AddressTest.java Sat Sep 27 14:23:00 2014
@@ -6,24 +6,25 @@ import org.junit.Test;
public class AddressTest {
- private void testParse(String url, String scheme, String user, String pass, String host, String port, String name)
- {
- Address address = new Address(url);
- assertEquals(scheme, address.getScheme());
- assertEquals(user, address.getUser());
- assertEquals(pass, address.getPass());
- assertEquals(host, address.getHost());
- assertEquals(port, address.getPort());
- }
+ private void testParse(String url, String scheme, String user, String pass, String host, String port, String name)
+ {
+ Address address = new Address(url);
+ assertEquals(scheme, address.getScheme());
+ assertEquals(user, address.getUser());
+ assertEquals(pass, address.getPass());
+ assertEquals(host, address.getHost());
+ assertEquals(port, address.getPort());
+ assertEquals(url, address.toString());
+ }
- @Test
- public void addressTests()
- {
- testParse("host", null, null, null, "host", null, null);
- testParse("host:423", null, null, null, "host", "423", null);
- testParse("user@host", null, "user", null, "host", null, null);
- testParse("user:1243^&^:pw@host:423", null, "user", "1243^&^:pw", "host", "423", null);
- testParse("user:1243^&^:pw@host:423/Foo.bar:90087", null, "user", "1243^&^:pw", "host", "423", "Foo.bar:90087");
+ @Test
+ public void addressTests()
+ {
+ testParse("host", null, null, null, "host", null, null);
+ testParse("host:423", null, null, null, "host", "423", null);
+ testParse("user@host", null, "user", null, "host", null, null);
+ testParse("user:1243^&^:pw@host:423", null, "user", "1243^&^:pw", "host", "423", null);
+ testParse("user:1243^&^:pw@host:423/Foo.bar:90087", null, "user", "1243^&^:pw", "host", "423", "Foo.bar:90087");
testParse("user:1243^&^:pw@host:423/Foo.bar:90087@somewhere", null, "user", "1243^&^:pw", "host", "423", "Foo.bar:90087@somewhere");
testParse("[::1]", null, null, null, "::1", null, null);
testParse("[::1]:amqp", null, null, null, "::1", "amqp", null);
@@ -38,14 +39,13 @@ public class AddressTest {
testParse("amqp://user@[1234:52:0:1260:f2de:f1ff:fe59:8f87]:amqp", "amqp", "user", null, "1234:52:0:1260:f2de:f1ff:fe59:8f87", "amqp", null);
testParse("amqp://user:1243^&^:pw@[::1]:amqp", "amqp", "user", "1243^&^:pw", "::1", "amqp", null);
testParse("amqp://user:1243^&^:pw@[::1]:amqp/Foo.bar:90087", "amqp", "user", "1243^&^:pw", "::1", "amqp", "Foo.bar:90087");
- testParse("amqp://host", "amqp", null, null, "host", null, null);
- testParse("amqp://user@host", "amqp", "user", null, "host", null, null);
- testParse("amqp://user@host/path:%", "amqp", "user", null, "host", null, "path:%");
- testParse("amqp://user@host:5674/path:%", "amqp", "user", null, "host", "5674", "path:%");
- testParse("amqp://user@host/path:%", "amqp", "user", null, "host", null, "path:%");
- testParse("amqp://bigbird@host/queue@host", "amqp", "bigbird", null, "host", null, "queue@host");
- testParse("amqp://host/queue@host", "amqp", null, null, "host", null, "queue@host");
- testParse("amqp://host:9765/queue@host", "amqp", null, null, "host", "9765", "queue@host");
- }
-
+ testParse("amqp://host", "amqp", null, null, "host", null, null);
+ testParse("amqp://user@host", "amqp", "user", null, "host", null, null);
+ testParse("amqp://user@host/path:%", "amqp", "user", null, "host", null, "path:%");
+ testParse("amqp://user@host:5674/path:%", "amqp", "user", null, "host", "5674", "path:%");
+ testParse("amqp://user@host/path:%", "amqp", "user", null, "host", null, "path:%");
+ testParse("amqp://bigbird@host/queue@host", "amqp", "bigbird", null, "host", null, "queue@host");
+ testParse("amqp://host/queue@host", "amqp", null, null, "host", null, "queue@host");
+ testParse("amqp://host:9765/queue@host", "amqp", null, null, "host", "9765", "queue@host");
+ }
}
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java Sat Sep 27 14:23:00 2014
@@ -0,0 +1,113 @@
+/*
+ * 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.qpid.proton.systemtests;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+import java.nio.ByteBuffer;
+import java.util.logging.Logger;
+
+import org.apache.qpid.proton.amqp.messaging.Target;
+import org.apache.qpid.proton.engine.Endpoint;
+import org.apache.qpid.proton.engine.EndpointState;
+
+public abstract class EngineTestBase
+{
+ private static final Logger LOGGER = Logger.getLogger(EngineTestBase.class.getName());
+
+ private final TestLoggingHelper _testLoggingHelper = new TestLoggingHelper(LOGGER);
+ private final ProtonContainer _client = new ProtonContainer("clientContainer");
+ private final ProtonContainer _server = new ProtonContainer("serverContainer");
+
+ protected TestLoggingHelper getTestLoggingHelper()
+ {
+ return _testLoggingHelper;
+ }
+
+ protected ProtonContainer getClient()
+ {
+ return _client;
+ }
+
+ protected ProtonContainer getServer()
+ {
+ return _server;
+ }
+
+ protected void assertClientHasNothingToOutput()
+ {
+ assertEquals(0, getClient().transport.getOutputBuffer().remaining());
+ getClient().transport.outputConsumed();
+ }
+
+ protected void pumpServerToClient()
+ {
+ ByteBuffer serverBuffer = getServer().transport.getOutputBuffer();
+
+ getTestLoggingHelper().prettyPrint(" <<<" + TestLoggingHelper.SERVER_PREFIX + " ", serverBuffer);
+ assertTrue("Server expected to produce some output", serverBuffer.hasRemaining());
+
+ ByteBuffer clientBuffer = getClient().transport.getInputBuffer();
+
+ clientBuffer.put(serverBuffer);
+
+ assertEquals("Client expected to consume all server's output", 0, serverBuffer.remaining());
+
+ getClient().transport.processInput().checkIsOk();
+ getServer().transport.outputConsumed();
+ }
+
+ protected void pumpClientToServer()
+ {
+ ByteBuffer clientBuffer = getClient().transport.getOutputBuffer();
+
+ getTestLoggingHelper().prettyPrint(TestLoggingHelper.CLIENT_PREFIX + ">>> ", clientBuffer);
+ assertTrue("Client expected to produce some output", clientBuffer.hasRemaining());
+
+ ByteBuffer serverBuffer = getServer().transport.getInputBuffer();
+
+ serverBuffer.put(clientBuffer);
+
+ assertEquals("Server expected to consume all client's output", 0, clientBuffer.remaining());
+
+ getClient().transport.outputConsumed();
+ getServer().transport.processInput().checkIsOk();
+ }
+
+ protected void doOutputInputCycle() throws Exception
+ {
+ pumpClientToServer();
+
+ pumpServerToClient();
+ }
+
+ protected void assertEndpointState(Endpoint endpoint, EndpointState localState, EndpointState remoteState)
+ {
+ assertEquals(localState, endpoint.getLocalState());
+ assertEquals(remoteState, endpoint.getRemoteState());
+ }
+
+ protected void assertTerminusEquals(org.apache.qpid.proton.amqp.transport.Target expectedTarget, org.apache.qpid.proton.amqp.transport.Target actualTarget)
+ {
+ assertEquals(
+ ((Target)expectedTarget).getAddress(),
+ ((Target)actualTarget).getAddress());
+ }
+}
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/EngineTestBase.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java?rev=1627970&view=auto
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java (added)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java Sat Sep 27 14:23:00 2014
@@ -0,0 +1,236 @@
+/*
+ * 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.qpid.proton.systemtests;
+
+import static java.util.EnumSet.of;
+import static org.apache.qpid.proton.engine.EndpointState.ACTIVE;
+import static org.apache.qpid.proton.engine.EndpointState.UNINITIALIZED;
+import static org.apache.qpid.proton.systemtests.TestLoggingHelper.bold;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotSame;
+
+import java.util.logging.Logger;
+
+import org.apache.qpid.proton.Proton;
+import org.apache.qpid.proton.amqp.messaging.Source;
+import org.apache.qpid.proton.amqp.messaging.Target;
+import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
+import org.apache.qpid.proton.amqp.transport.SenderSettleMode;
+import org.apache.qpid.proton.engine.Receiver;
+import org.apache.qpid.proton.engine.Sender;
+import org.apache.qpid.proton.engine.Session;
+import org.junit.Test;
+
+public class FreeTest extends EngineTestBase
+{
+ private static final Logger LOGGER = Logger.getLogger(FreeTest.class.getName());
+
+ @Test
+ public void testFreeConnectionWithMultipleSessionsAndSendersAndReceiversDoesNotThrowCME() throws Exception
+ {
+ LOGGER.fine(bold("======== About to create transports"));
+
+ getClient().transport = Proton.transport();
+ ProtocolTracerEnabler.setProtocolTracer(getClient().transport, TestLoggingHelper.CLIENT_PREFIX);
+
+ getServer().transport = Proton.transport();
+ ProtocolTracerEnabler.setProtocolTracer(getServer().transport, " " + TestLoggingHelper.SERVER_PREFIX);
+
+ getClient().connection = Proton.connection();
+ getClient().transport.bind(getClient().connection);
+
+ getServer().connection = Proton.connection();
+ getServer().transport.bind(getServer().connection);
+
+
+
+ LOGGER.fine(bold("======== About to open connections"));
+ getClient().connection.open();
+ getServer().connection.open();
+
+ doOutputInputCycle();
+
+
+
+ LOGGER.fine(bold("======== About to open sessions"));
+ getClient().session = getClient().connection.session();
+ getClient().session.open();
+
+ Session clientSession2 = getClient().connection.session();
+ clientSession2.open();
+
+ pumpClientToServer();
+
+ getServer().session = getServer().connection.sessionHead(of(UNINITIALIZED), of(ACTIVE));
+ assertEndpointState(getServer().session, UNINITIALIZED, ACTIVE);
+
+ getServer().session.open();
+ assertEndpointState(getServer().session, ACTIVE, ACTIVE);
+
+ Session serverSession2 = getServer().connection.sessionHead(of(UNINITIALIZED), of(ACTIVE));
+ assertNotNull("Engine did not return expected second server session", serverSession2);
+ assertNotSame("Engine did not return expected second server session", serverSession2, getServer().session);
+ serverSession2.open();
+
+ pumpServerToClient();
+ assertEndpointState(getClient().session, ACTIVE, ACTIVE);
+ assertEndpointState(clientSession2, ACTIVE, ACTIVE);
+
+
+
+ LOGGER.fine(bold("======== About to create client senders"));
+
+ getClient().source = new Source();
+ getClient().source.setAddress(null);
+
+ getClient().target = new Target();
+ getClient().target.setAddress("myQueue");
+
+ getClient().sender = getClient().session.sender("sender1");
+ getClient().sender.setTarget(getClient().target);
+ getClient().sender.setSource(getClient().source);
+
+ getClient().sender.setSenderSettleMode(SenderSettleMode.UNSETTLED);
+ getClient().sender.setReceiverSettleMode(ReceiverSettleMode.FIRST);
+
+ assertEndpointState(getClient().sender, UNINITIALIZED, UNINITIALIZED);
+
+ getClient().sender.open();
+ assertEndpointState(getClient().sender, ACTIVE, UNINITIALIZED);
+
+
+ Sender clientSender2 = getClient().session.sender("sender2");
+ clientSender2.setTarget(getClient().target);
+ clientSender2.setSource(getClient().source);
+
+ clientSender2.setSenderSettleMode(SenderSettleMode.UNSETTLED);
+ clientSender2.setReceiverSettleMode(ReceiverSettleMode.FIRST);
+
+ assertEndpointState(clientSender2, UNINITIALIZED, UNINITIALIZED);
+
+ clientSender2.open();
+ assertEndpointState(clientSender2, ACTIVE, UNINITIALIZED);
+
+ pumpClientToServer();
+
+
+ LOGGER.fine(bold("======== About to set up server receivers"));
+
+ getServer().receiver = (Receiver) getServer().connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
+ // Accept the settlement modes suggested by the client
+ getServer().receiver.setSenderSettleMode(getServer().receiver.getRemoteSenderSettleMode());
+ getServer().receiver.setReceiverSettleMode(getServer().receiver.getRemoteReceiverSettleMode());
+
+ org.apache.qpid.proton.amqp.transport.Target serverRemoteTarget = getServer().receiver.getRemoteTarget();
+ assertTerminusEquals(getClient().target, serverRemoteTarget);
+
+ getServer().receiver.setTarget(serverRemoteTarget);
+
+ assertEndpointState(getServer().receiver, UNINITIALIZED, ACTIVE);
+ getServer().receiver.open();
+
+ assertEndpointState(getServer().receiver, ACTIVE, ACTIVE);
+
+ Receiver serverReceiver2 = (Receiver) getServer().connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
+ serverReceiver2.open();
+ assertEndpointState(serverReceiver2, ACTIVE, ACTIVE);
+
+ pumpServerToClient();
+ assertEndpointState(getClient().sender, ACTIVE, ACTIVE);
+ assertEndpointState(clientSender2, ACTIVE, ACTIVE);
+
+
+
+ LOGGER.fine(bold("======== About to create client receivers"));
+
+ Source src = new Source();
+ src.setAddress("myQueue");
+
+ Target tgt1 = new Target();
+ tgt1.setAddress("receiver1");
+
+ getClient().receiver = getClient().session.receiver("receiver1");
+ getClient().receiver.setSource(src);
+ getClient().receiver.setTarget(tgt1);
+
+ getClient().receiver.setSenderSettleMode(SenderSettleMode.UNSETTLED);
+ getClient().receiver.setReceiverSettleMode(ReceiverSettleMode.FIRST);
+
+ assertEndpointState(getClient().receiver, UNINITIALIZED, UNINITIALIZED);
+
+ getClient().receiver.open();
+ assertEndpointState(getClient().receiver, ACTIVE, UNINITIALIZED);
+
+
+ Target tgt2 = new Target();
+ tgt1.setAddress("receiver2");
+
+ Receiver clientReceiver2 = getClient().session.receiver("receiver2");
+ clientReceiver2.setSource(src);
+ clientReceiver2.setTarget(tgt2);
+
+ clientReceiver2.setSenderSettleMode(SenderSettleMode.UNSETTLED);
+ clientReceiver2.setReceiverSettleMode(ReceiverSettleMode.FIRST);
+
+ assertEndpointState(clientReceiver2, UNINITIALIZED, UNINITIALIZED);
+
+ clientReceiver2.open();
+ assertEndpointState(clientReceiver2, ACTIVE, UNINITIALIZED);
+
+ pumpClientToServer();
+
+
+
+ LOGGER.fine(bold("======== About to set up server senders"));
+
+ getServer().sender = (Sender) getServer().connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
+ // Accept the settlement modes suggested by the client
+ getServer().sender.setSenderSettleMode(getServer().sender.getRemoteSenderSettleMode());
+ getServer().sender.setReceiverSettleMode(getServer().sender.getRemoteReceiverSettleMode());
+
+ org.apache.qpid.proton.amqp.transport.Target serverRemoteTarget2 = getServer().sender.getRemoteTarget();
+ assertTerminusEquals(tgt1, serverRemoteTarget2);
+
+ getServer().sender.setTarget(serverRemoteTarget2);
+
+ assertEndpointState(getServer().sender, UNINITIALIZED, ACTIVE);
+ getServer().sender.open();
+ assertEndpointState(getServer().sender, ACTIVE, ACTIVE);
+
+ Sender serverSender2 = (Sender) getServer().connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
+
+ serverRemoteTarget2 = serverSender2.getRemoteTarget();
+ assertTerminusEquals(tgt2, serverRemoteTarget2);
+ serverSender2.setTarget(serverRemoteTarget2);
+ serverSender2.open();
+ assertEndpointState(serverSender2, ACTIVE, ACTIVE);
+
+ pumpServerToClient();
+ assertEndpointState(getClient().receiver, ACTIVE, ACTIVE);
+ assertEndpointState(clientReceiver2, ACTIVE, ACTIVE);
+
+
+
+ LOGGER.fine(bold("======== About to close and free client's connection"));
+
+ getClient().connection.close();
+ getClient().connection.free();
+ }
+
+}
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/FreeTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/ProtonEngineExampleTest.java
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/ProtonEngineExampleTest.java?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/ProtonEngineExampleTest.java (original)
+++ qpid/proton/branches/fadams-javascript-binding/proton-j/src/test/java/org/apache/qpid/proton/systemtests/ProtonEngineExampleTest.java Sat Sep 27 14:23:00 2014
@@ -29,7 +29,6 @@ import static org.apache.qpid.proton.sys
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
-import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.logging.Logger;
@@ -42,8 +41,6 @@ import org.apache.qpid.proton.amqp.messa
import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode;
import org.apache.qpid.proton.amqp.transport.SenderSettleMode;
import org.apache.qpid.proton.engine.Delivery;
-import org.apache.qpid.proton.engine.Endpoint;
-import org.apache.qpid.proton.engine.EndpointState;
import org.apache.qpid.proton.engine.Receiver;
import org.apache.qpid.proton.message.Message;
import org.junit.Test;
@@ -64,84 +61,79 @@ import org.junit.Test;
*
* Does not illustrate use of the Messenger API.
*/
-public class ProtonEngineExampleTest
+public class ProtonEngineExampleTest extends EngineTestBase
{
private static final Logger LOGGER = Logger.getLogger(ProtonEngineExampleTest.class.getName());
private static final int BUFFER_SIZE = 4096;
- private TestLoggingHelper _testLoggingHelper = new TestLoggingHelper(LOGGER);
-
- private final ProtonContainer _client = new ProtonContainer("clientContainer");
- private final ProtonContainer _server = new ProtonContainer("serverContainer");
-
- private final String _targetAddress = _server.containerId + "-link1-target";
+ private final String _targetAddress = getServer().containerId + "-link1-target";
@Test
public void test() throws Exception
{
LOGGER.fine(bold("======== About to create transports"));
- _client.transport = Proton.transport();
- ProtocolTracerEnabler.setProtocolTracer(_client.transport, TestLoggingHelper.CLIENT_PREFIX);
+ getClient().transport = Proton.transport();
+ ProtocolTracerEnabler.setProtocolTracer(getClient().transport, TestLoggingHelper.CLIENT_PREFIX);
- _server.transport = Proton.transport();
- ProtocolTracerEnabler.setProtocolTracer(_server.transport, " " + TestLoggingHelper.SERVER_PREFIX);
+ getServer().transport = Proton.transport();
+ ProtocolTracerEnabler.setProtocolTracer(getServer().transport, " " + TestLoggingHelper.SERVER_PREFIX);
doOutputInputCycle();
- _client.connection = Proton.connection();
- _client.transport.bind(_client.connection);
+ getClient().connection = Proton.connection();
+ getClient().transport.bind(getClient().connection);
- _server.connection = Proton.connection();
- _server.transport.bind(_server.connection);
+ getServer().connection = Proton.connection();
+ getServer().transport.bind(getServer().connection);
LOGGER.fine(bold("======== About to open connections"));
- _client.connection.open();
- _server.connection.open();
+ getClient().connection.open();
+ getServer().connection.open();
doOutputInputCycle();
LOGGER.fine(bold("======== About to open sessions"));
- _client.session = _client.connection.session();
- _client.session.open();
+ getClient().session = getClient().connection.session();
+ getClient().session.open();
pumpClientToServer();
- _server.session = _server.connection.sessionHead(of(UNINITIALIZED), of(ACTIVE));
- assertEndpointState(_server.session, UNINITIALIZED, ACTIVE);
+ getServer().session = getServer().connection.sessionHead(of(UNINITIALIZED), of(ACTIVE));
+ assertEndpointState(getServer().session, UNINITIALIZED, ACTIVE);
- _server.session.open();
- assertEndpointState(_server.session, ACTIVE, ACTIVE);
+ getServer().session.open();
+ assertEndpointState(getServer().session, ACTIVE, ACTIVE);
pumpServerToClient();
- assertEndpointState(_client.session, ACTIVE, ACTIVE);
+ assertEndpointState(getClient().session, ACTIVE, ACTIVE);
LOGGER.fine(bold("======== About to create sender"));
- _client.source = new Source();
- _client.source.setAddress(null);
+ getClient().source = new Source();
+ getClient().source.setAddress(null);
- _client.target = new Target();
- _client.target.setAddress(_targetAddress);
+ getClient().target = new Target();
+ getClient().target.setAddress(_targetAddress);
- _client.sender = _client.session.sender("link1");
- _client.sender.setTarget(_client.target);
- _client.sender.setSource(_client.source);
+ getClient().sender = getClient().session.sender("link1");
+ getClient().sender.setTarget(getClient().target);
+ getClient().sender.setSource(getClient().source);
// Exactly once delivery semantics
- _client.sender.setSenderSettleMode(SenderSettleMode.UNSETTLED);
- _client.sender.setReceiverSettleMode(ReceiverSettleMode.SECOND);
+ getClient().sender.setSenderSettleMode(SenderSettleMode.UNSETTLED);
+ getClient().sender.setReceiverSettleMode(ReceiverSettleMode.SECOND);
- assertEndpointState(_client.sender, UNINITIALIZED, UNINITIALIZED);
+ assertEndpointState(getClient().sender, UNINITIALIZED, UNINITIALIZED);
- _client.sender.open();
- assertEndpointState(_client.sender, ACTIVE, UNINITIALIZED);
+ getClient().sender.open();
+ assertEndpointState(getClient().sender, ACTIVE, UNINITIALIZED);
pumpClientToServer();
@@ -152,46 +144,46 @@ public class ProtonEngineExampleTest
// A real application would be interested in more states than simply ACTIVE, as there
// exists the possibility that the link could have moved to another state already e.g. CLOSED.
// (See pipelining).
- _server.receiver = (Receiver) _server.connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
+ getServer().receiver = (Receiver) getServer().connection.linkHead(of(UNINITIALIZED), of(ACTIVE));
// Accept the settlement modes suggested by the client
- _server.receiver.setSenderSettleMode(_server.receiver.getRemoteSenderSettleMode());
- _server.receiver.setReceiverSettleMode(_server.receiver.getRemoteReceiverSettleMode());
+ getServer().receiver.setSenderSettleMode(getServer().receiver.getRemoteSenderSettleMode());
+ getServer().receiver.setReceiverSettleMode(getServer().receiver.getRemoteReceiverSettleMode());
- org.apache.qpid.proton.amqp.transport.Target serverRemoteTarget = _server.receiver.getRemoteTarget();
- assertTerminusEquals(_client.target, serverRemoteTarget);
+ org.apache.qpid.proton.amqp.transport.Target serverRemoteTarget = getServer().receiver.getRemoteTarget();
+ assertTerminusEquals(getClient().target, serverRemoteTarget);
- _server.receiver.setTarget(applicationDeriveTarget(serverRemoteTarget));
+ getServer().receiver.setTarget(applicationDeriveTarget(serverRemoteTarget));
- assertEndpointState(_server.receiver, UNINITIALIZED, ACTIVE);
- _server.receiver.open();
+ assertEndpointState(getServer().receiver, UNINITIALIZED, ACTIVE);
+ getServer().receiver.open();
- assertEndpointState(_server.receiver, ACTIVE, ACTIVE);
+ assertEndpointState(getServer().receiver, ACTIVE, ACTIVE);
pumpServerToClient();
- assertEndpointState(_client.sender, ACTIVE, ACTIVE);
+ assertEndpointState(getClient().sender, ACTIVE, ACTIVE);
- _server.receiver.flow(1);
+ getServer().receiver.flow(1);
pumpServerToClient();
LOGGER.fine(bold("======== About to create a message and send it to the server"));
- _client.message = Proton.message();
+ getClient().message = Proton.message();
Section messageBody = new AmqpValue("Hello");
- _client.message.setBody(messageBody);
- _client.messageData = new byte[BUFFER_SIZE];
- int lengthOfEncodedMessage = _client.message.encode(_client.messageData, 0, BUFFER_SIZE);
- _testLoggingHelper.prettyPrint(TestLoggingHelper.MESSAGE_PREFIX, Arrays.copyOf(_client.messageData, lengthOfEncodedMessage));
+ getClient().message.setBody(messageBody);
+ getClient().messageData = new byte[BUFFER_SIZE];
+ int lengthOfEncodedMessage = getClient().message.encode(getClient().messageData, 0, BUFFER_SIZE);
+ getTestLoggingHelper().prettyPrint(TestLoggingHelper.MESSAGE_PREFIX, Arrays.copyOf(getClient().messageData, lengthOfEncodedMessage));
byte[] deliveryTag = "delivery1".getBytes();
- _client.delivery = _client.sender.delivery(deliveryTag);
- int numberOfBytesAcceptedBySender = _client.sender.send(_client.messageData, 0, lengthOfEncodedMessage);
+ getClient().delivery = getClient().sender.delivery(deliveryTag);
+ int numberOfBytesAcceptedBySender = getClient().sender.send(getClient().messageData, 0, lengthOfEncodedMessage);
assertEquals("For simplicity, assume the sender can accept all the data",
lengthOfEncodedMessage, numberOfBytesAcceptedBySender);
- assertNull(_client.delivery.getLocalState());
+ assertNull(getClient().delivery.getLocalState());
- boolean senderAdvanced = _client.sender.advance();
+ boolean senderAdvanced = getClient().sender.advance();
assertTrue("sender has not advanced", senderAdvanced);
pumpClientToServer();
@@ -199,106 +191,106 @@ public class ProtonEngineExampleTest
LOGGER.fine(bold("======== About to process the message on the server"));
- _server.delivery = _server.connection.getWorkHead();
+ getServer().delivery = getServer().connection.getWorkHead();
assertEquals("The received delivery should be on our receiver",
- _server.receiver, _server.delivery.getLink());
- assertNull(_server.delivery.getLocalState());
- assertNull(_server.delivery.getRemoteState());
+ getServer().receiver, getServer().delivery.getLink());
+ assertNull(getServer().delivery.getLocalState());
+ assertNull(getServer().delivery.getRemoteState());
- assertFalse(_server.delivery.isPartial());
- assertTrue(_server.delivery.isReadable());
+ assertFalse(getServer().delivery.isPartial());
+ assertTrue(getServer().delivery.isReadable());
- _server.messageData = new byte[BUFFER_SIZE];
- int numberOfBytesProducedByReceiver = _server.receiver.recv(_server.messageData, 0, BUFFER_SIZE);
+ getServer().messageData = new byte[BUFFER_SIZE];
+ int numberOfBytesProducedByReceiver = getServer().receiver.recv(getServer().messageData, 0, BUFFER_SIZE);
assertEquals(numberOfBytesAcceptedBySender, numberOfBytesProducedByReceiver);
- _server.message = Proton.message();
- _server.message.decode(_server.messageData, 0, numberOfBytesProducedByReceiver);
+ getServer().message = Proton.message();
+ getServer().message.decode(getServer().messageData, 0, numberOfBytesProducedByReceiver);
- boolean messageProcessed = applicationProcessMessage(_server.message);
+ boolean messageProcessed = applicationProcessMessage(getServer().message);
assertTrue(messageProcessed);
- _server.delivery.disposition(Accepted.getInstance());
- assertEquals(Accepted.getInstance(), _server.delivery.getLocalState());
+ getServer().delivery.disposition(Accepted.getInstance());
+ assertEquals(Accepted.getInstance(), getServer().delivery.getLocalState());
pumpServerToClient();
- assertEquals(Accepted.getInstance(), _client.delivery.getRemoteState());
+ assertEquals(Accepted.getInstance(), getClient().delivery.getRemoteState());
LOGGER.fine(bold("======== About to accept and settle the message on the client"));
- Delivery clientDelivery = _client.connection.getWorkHead();
- assertEquals(_client.delivery, clientDelivery);
+ Delivery clientDelivery = getClient().connection.getWorkHead();
+ assertEquals(getClient().delivery, clientDelivery);
assertTrue(clientDelivery.isUpdated());
- assertEquals(_client.sender, clientDelivery.getLink());
+ assertEquals(getClient().sender, clientDelivery.getLink());
clientDelivery.disposition(clientDelivery.getRemoteState());
- assertEquals(Accepted.getInstance(), _client.delivery.getLocalState());
+ assertEquals(Accepted.getInstance(), getClient().delivery.getLocalState());
clientDelivery.settle();
- assertNull("Now we've settled, the delivery should no longer be in the work list", _client.connection.getWorkHead());
+ assertNull("Now we've settled, the delivery should no longer be in the work list", getClient().connection.getWorkHead());
pumpClientToServer();
LOGGER.fine(bold("======== About to settle the message on the server"));
- assertEquals(Accepted.getInstance(), _server.delivery.getRemoteState());
- Delivery serverDelivery = _server.connection.getWorkHead();
- assertEquals(_server.delivery, serverDelivery);
+ assertEquals(Accepted.getInstance(), getServer().delivery.getRemoteState());
+ Delivery serverDelivery = getServer().connection.getWorkHead();
+ assertEquals(getServer().delivery, serverDelivery);
assertTrue(serverDelivery.isUpdated());
assertTrue("Client should have already settled", serverDelivery.remotelySettled());
serverDelivery.settle();
assertTrue(serverDelivery.isSettled());
- assertNull("Now we've settled, the delivery should no longer be in the work list", _server.connection.getWorkHead());
+ assertNull("Now we've settled, the delivery should no longer be in the work list", getServer().connection.getWorkHead());
// Increment the receiver's credit so its ready for another message.
// When using proton-c, this call is required in order to generate a Flow frame
// (proton-j sends one even without it to eagerly restore the session incoming window).
- _server.receiver.flow(1);
+ getServer().receiver.flow(1);
pumpServerToClient();
LOGGER.fine(bold("======== About to close client's sender"));
- _client.sender.close();
+ getClient().sender.close();
pumpClientToServer();
LOGGER.fine(bold("======== Server about to process client's link closure"));
- assertSame(_server.receiver, _server.connection.linkHead(of(ACTIVE), of(CLOSED)));
- _server.receiver.close();
+ assertSame(getServer().receiver, getServer().connection.linkHead(of(ACTIVE), of(CLOSED)));
+ getServer().receiver.close();
pumpServerToClient();
LOGGER.fine(bold("======== About to close client's session"));
- _client.session.close();
+ getClient().session.close();
pumpClientToServer();
LOGGER.fine(bold("======== Server about to process client's session closure"));
- assertSame(_server.session, _server.connection.sessionHead(of(ACTIVE), of(CLOSED)));
- _server.session.close();
+ assertSame(getServer().session, getServer().connection.sessionHead(of(ACTIVE), of(CLOSED)));
+ getServer().session.close();
pumpServerToClient();
LOGGER.fine(bold("======== About to close client's connection"));
- _client.connection.close();
+ getClient().connection.close();
pumpClientToServer();
LOGGER.fine(bold("======== Server about to process client's connection closure"));
- assertEquals(CLOSED, _server.connection.getRemoteState());
- _server.connection.close();
+ assertEquals(CLOSED, getServer().connection.getRemoteState());
+ getServer().connection.close();
pumpServerToClient();
@@ -331,66 +323,4 @@ public class ProtonEngineExampleTest
Object messageBody = ((AmqpValue)message.getBody()).getValue();
return "Hello".equals(messageBody);
}
-
- private void assertTerminusEquals(
- org.apache.qpid.proton.amqp.transport.Target expectedTarget,
- org.apache.qpid.proton.amqp.transport.Target actualTarget)
- {
- assertEquals(
- ((Target)expectedTarget).getAddress(),
- ((Target)actualTarget).getAddress());
- }
-
- private void assertEndpointState(Endpoint endpoint, EndpointState localState, EndpointState remoteState)
- {
- assertEquals(localState, endpoint.getLocalState());
- assertEquals(remoteState, endpoint.getRemoteState());
- }
-
- private void doOutputInputCycle() throws Exception
- {
- pumpClientToServer();
-
- pumpServerToClient();
- }
-
- private void pumpClientToServer()
- {
- ByteBuffer clientBuffer = _client.transport.getOutputBuffer();
-
- _testLoggingHelper.prettyPrint(TestLoggingHelper.CLIENT_PREFIX + ">>> ", clientBuffer);
- assertTrue("Client expected to produce some output", clientBuffer.hasRemaining());
-
- ByteBuffer serverBuffer = _server.transport.getInputBuffer();
-
- serverBuffer.put(clientBuffer);
-
- assertEquals("Server expected to consume all client's output", 0, clientBuffer.remaining());
-
- _client.transport.outputConsumed();
- _server.transport.processInput().checkIsOk();
- }
-
- private void pumpServerToClient()
- {
- ByteBuffer serverBuffer = _server.transport.getOutputBuffer();
-
- _testLoggingHelper.prettyPrint(" <<<" + TestLoggingHelper.SERVER_PREFIX + " ", serverBuffer);
- assertTrue("Server expected to produce some output", serverBuffer.hasRemaining());
-
- ByteBuffer clientBuffer = _client.transport.getInputBuffer();
-
- clientBuffer.put(serverBuffer);
-
- assertEquals("Client expected to consume all server's output", 0, serverBuffer.remaining());
-
- _client.transport.processInput().checkIsOk();
- _server.transport.outputConsumed();
- }
-
- private void assertClientHasNothingToOutput()
- {
- assertEquals(0, _client.transport.getOutputBuffer().remaining());
- _client.transport.outputConsumed();
- }
}
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/__init__.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/__init__.py?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/__init__.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/__init__.py Sat Sep 27 14:23:00 2014
@@ -26,4 +26,4 @@ import proton_tests.transport
import proton_tests.ssl
import proton_tests.interop
import proton_tests.soak
-
+import proton_tests.url
Modified: qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py
URL: http://svn.apache.org/viewvc/qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py?rev=1627970&r1=1627969&r2=1627970&view=diff
==============================================================================
--- qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py (original)
+++ qpid/proton/branches/fadams-javascript-binding/tests/python/proton_tests/engine.py Sat Sep 27 14:23:00 2014
@@ -2101,6 +2101,11 @@ class CollectorTest(Test):
assert False, "actual events %s did not match any of the expected sequences: %s" % (events, sequences)
+ def expect_until(self, *types):
+ events = self.drain()
+ etypes = tuple([e.type for e in events[-len(types):]])
+ assert etypes == types, "actual events %s did not end in expect sequence: %s" % (events, types)
+
class EventTest(CollectorTest):
def teardown(self):
@@ -2150,8 +2155,8 @@ class EventTest(CollectorTest):
self.pump()
c1.free()
c1._transport.unbind()
- self.expect(Event.SESSION_FINAL, Event.LINK_FINAL, Event.SESSION_FINAL,
- Event.CONNECTION_FINAL)
+ self.expect(Event.CONNECTION_UNBOUND, Event.SESSION_FINAL, Event.LINK_FINAL,
+ Event.SESSION_FINAL, Event.CONNECTION_FINAL)
def testConnectionINIT_FINAL(self):
c = Connection()
@@ -2215,8 +2220,8 @@ class EventTest(CollectorTest):
self.expect(Event.LINK_REMOTE_OPEN, Event.DELIVERY)
rcv.session.connection._transport.unbind()
rcv.session.connection.free()
- self.expect(Event.TRANSPORT, Event.LINK_FINAL, Event.SESSION_FINAL,
- Event.CONNECTION_FINAL)
+ self.expect(Event.CONNECTION_UNBOUND, Event.TRANSPORT, Event.LINK_FINAL,
+ Event.SESSION_FINAL, Event.CONNECTION_FINAL)
def testDeliveryEventsDisp(self):
snd, rcv = self.testFlowEvents()
@@ -2233,7 +2238,85 @@ class EventTest(CollectorTest):
rdlv.update(Delivery.ACCEPTED)
self.pump()
event = self.expect(Event.DELIVERY)
- assert event.delivery == dlv
+ assert event.context == dlv
+
+ def testConnectionBOUND_UNBOUND(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ t = Transport()
+ t.bind(c)
+ self.expect(Event.CONNECTION_BOUND)
+ t.unbind()
+ self.expect(Event.CONNECTION_UNBOUND, Event.TRANSPORT)
+
+ def testTransportERROR_CLOSE(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ t = Transport()
+ t.bind(c)
+ self.expect(Event.CONNECTION_BOUND)
+ assert t.condition is None
+ t.push("asdf")
+ self.expect(Event.TRANSPORT_ERROR, Event.TRANSPORT_TAIL_CLOSED)
+ assert t.condition is not None
+ assert t.condition.name == "amqp:connection:framing-error"
+ assert "AMQP header mismatch" in t.condition.description
+ p = t.pending()
+ assert p > 0
+ t.pop(p)
+ self.expect(Event.TRANSPORT_HEAD_CLOSED, Event.TRANSPORT_CLOSED)
+
+ def testTransportCLOSED(self):
+ c = Connection()
+ c.collect(self.collector)
+ self.expect(Event.CONNECTION_INIT)
+ t = Transport()
+ t.bind(c)
+ c.open()
+
+ self.expect(Event.CONNECTION_BOUND, Event.CONNECTION_OPEN, Event.TRANSPORT)
+
+ c2 = Connection()
+ t2 = Transport()
+ t2.bind(c2)
+ c2.open()
+ c2.close()
+
+ pump(t, t2)
+
+ self.expect(Event.CONNECTION_REMOTE_OPEN, Event.CONNECTION_REMOTE_CLOSE,
+ Event.TRANSPORT_TAIL_CLOSED)
+
+ c.close()
+
+ pump(t, t2)
+
+ self.expect(Event.CONNECTION_CLOSE, Event.TRANSPORT,
+ Event.TRANSPORT_HEAD_CLOSED, Event.TRANSPORT_CLOSED)
+
+ def testLinkDetach(self):
+ c1 = Connection()
+ c1.collect(self.collector)
+ t1 = Transport()
+ t1.bind(c1)
+ c1.open()
+ s1 = c1.session()
+ s1.open()
+ l1 = s1.sender("asdf")
+ l1.open()
+ l1.detach()
+ self.expect_until(Event.LINK_DETACH, Event.TRANSPORT)
+
+ c2 = Connection()
+ c2.collect(self.collector)
+ t2 = Transport()
+ t2.bind(c2)
+
+ pump(t1, t2)
+
+ self.expect_until(Event.LINK_REMOTE_DETACH)
class PeerTest(CollectorTest):
@@ -2255,7 +2338,8 @@ class TeardownLeakTest(PeerTest):
def doLeak(self, local, remote):
self.connection.open()
- self.expect(Event.CONNECTION_INIT, Event.CONNECTION_OPEN, Event.TRANSPORT)
+ self.expect(Event.CONNECTION_INIT, Event.CONNECTION_BOUND,
+ Event.CONNECTION_OPEN, Event.TRANSPORT)
ssn = self.connection.session()
ssn.open()
@@ -2294,19 +2378,23 @@ class TeardownLeakTest(PeerTest):
self.pump()
if remote:
- self.expect_oneof((Event.LINK_REMOTE_CLOSE, Event.SESSION_REMOTE_CLOSE,
- Event.CONNECTION_REMOTE_CLOSE),
- (Event.LINK_REMOTE_CLOSE, Event.LINK_FINAL,
- Event.SESSION_REMOTE_CLOSE,
- Event.CONNECTION_REMOTE_CLOSE))
+ self.expect_oneof((Event.TRANSPORT_HEAD_CLOSED, Event.LINK_REMOTE_CLOSE,
+ Event.SESSION_REMOTE_CLOSE, Event.CONNECTION_REMOTE_CLOSE,
+ Event.TRANSPORT_TAIL_CLOSED, Event.TRANSPORT_CLOSED),
+ (Event.TRANSPORT_HEAD_CLOSED, Event.LINK_REMOTE_CLOSE,
+ Event.LINK_FINAL, Event.SESSION_REMOTE_CLOSE,
+ Event.CONNECTION_REMOTE_CLOSE, Event.TRANSPORT_TAIL_CLOSED,
+ Event.TRANSPORT_CLOSED))
else:
- self.expect(Event.SESSION_REMOTE_CLOSE, Event.CONNECTION_REMOTE_CLOSE)
+ self.expect(Event.TRANSPORT_HEAD_CLOSED, Event.SESSION_REMOTE_CLOSE,
+ Event.CONNECTION_REMOTE_CLOSE, Event.TRANSPORT_TAIL_CLOSED,
+ Event.TRANSPORT_CLOSED)
self.connection.free()
self.transport.unbind()
- self.expect_oneof((Event.LINK_FINAL, Event.SESSION_FINAL, Event.CONNECTION_FINAL),
- (Event.SESSION_FINAL, Event.CONNECTION_FINAL))
+ self.expect_oneof((Event.LINK_FINAL, Event.CONNECTION_UNBOUND, Event.SESSION_FINAL, Event.CONNECTION_FINAL),
+ (Event.CONNECTION_UNBOUND, Event.LINK_FINAL, Event.SESSION_FINAL, Event.CONNECTION_FINAL))
def testLocalRemoteLeak(self):
self.doLeak(True, True)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org