You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/07/23 14:06:11 UTC
[08/10] qpid-proton git commit: PROTON-957: make transfer frame
logging more like proton-c, report payload size rather than string length,
do it regardless whether string is truncated,
indicate whether string is truncated
PROTON-957: make transfer frame logging more like proton-c, report payload size rather than string length, do it regardless whether string is truncated, indicate whether string is truncated
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/de99c061
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/de99c061
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/de99c061
Branch: refs/heads/master
Commit: de99c06137a5f51063cce9d997424988e4fb2e29
Parents: fff1061
Author: Robert Gemmell <ro...@apache.org>
Authored: Thu Jul 23 12:57:27 2015 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Thu Jul 23 12:57:27 2015 +0100
----------------------------------------------------------------------
.../qpid/proton/engine/impl/StringUtils.java | 92 +++++++++++++
.../qpid/proton/engine/impl/TransportImpl.java | 13 +-
.../proton/engine/impl/StringUtilsTest.java | 136 +++++++++++++++++++
3 files changed, 234 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/de99c061/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/StringUtils.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/StringUtils.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/StringUtils.java
new file mode 100644
index 0000000..f80cca3
--- /dev/null
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/StringUtils.java
@@ -0,0 +1,92 @@
+/*
+ *
+ * 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.engine.impl;
+
+import org.apache.qpid.proton.amqp.Binary;
+
+public class StringUtils
+{
+ /**
+ * Converts the Binary to a quoted string.
+ *
+ * @param bin the Binary to convert
+ * @param stringLength the maximum length of stringified content (excluding the quotes, and truncated indicator)
+ * @param appendIfTruncated appends "...(truncated)" if not all of the payload is present in the string
+ * @return the converted string
+ */
+ public static String toQuotedString(final Binary bin,final int stringLength,final boolean appendIfTruncated)
+ {
+ if(bin == null)
+ {
+ return "\"\"";
+ }
+
+ final byte[] binData = bin.getArray();
+ final int binLength = bin.getLength();
+ final int offset = bin.getArrayOffset();
+
+ StringBuilder str = new StringBuilder();
+ str.append("\"");
+
+ int size = 0;
+ boolean truncated = false;
+ for (int i = 0; i < binLength; i++)
+ {
+ byte c = binData[offset + i];
+
+ if (c > 31 && c < 127 && c != '\\')
+ {
+ if (size + 1 <= stringLength)
+ {
+ size += 1;
+ str.append((char) c);
+ }
+ else
+ {
+ truncated = true;
+ break;
+ }
+ }
+ else
+ {
+ if (size + 4 <= stringLength)
+ {
+ size += 4;
+ str.append(String.format("\\x%02x", c));
+ }
+ else
+ {
+ truncated = true;
+ break;
+ }
+ }
+ }
+
+ str.append("\"");
+
+ if (truncated && appendIfTruncated)
+ {
+ str.append("...(truncated)");
+ }
+
+ return str.toString();
+ }
+}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/de99c061/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
----------------------------------------------------------------------
diff --git a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
index 3c472b0..7faadc6 100644
--- a/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
+++ b/proton-j/src/main/java/org/apache/qpid/proton/engine/impl/TransportImpl.java
@@ -77,7 +77,7 @@ public class TransportImpl extends EndpointImpl
}
private static final boolean FRM_ENABLED = getBooleanEnv("PN_TRACE_FRM");
- private static final int TRACE_FRAME_PAYLOAD_LENGTH = Integer.getInteger("proton.trace_frame_payload_length", 80);
+ private static final int TRACE_FRAME_PAYLOAD_LENGTH = Integer.getInteger("proton.trace_frame_payload_length", 1024);
// trace levels
private int _levels = (FRM_ENABLED ? TRACE_FRM : 0);
@@ -1594,12 +1594,11 @@ public class TransportImpl extends EndpointImpl
msg.append("[").append(System.identityHashCode(this)).append(":")
.append(frame.getChannel()).append("]");
msg.append(" ").append(event).append(" ").append(frame.getBody());
- if (frame.getPayload() != null) {
- String payload = frame.getPayload().toString();
- if (payload.length() > TRACE_FRAME_PAYLOAD_LENGTH) {
- payload = payload.substring(0, TRACE_FRAME_PAYLOAD_LENGTH) + "(" + payload.length() + ")";
- }
- msg.append(" \"").append(payload).append("\"");
+
+ Binary bin = frame.getPayload();
+ if (bin != null) {
+ msg.append(" (").append(bin.getLength()).append(") ");
+ msg.append(StringUtils.toQuotedString(bin, TRACE_FRAME_PAYLOAD_LENGTH, true));
}
System.out.println(msg.toString());
}
http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/de99c061/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
----------------------------------------------------------------------
diff --git a/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
new file mode 100644
index 0000000..8711b9f
--- /dev/null
+++ b/proton-j/src/test/java/org/apache/qpid/proton/engine/impl/StringUtilsTest.java
@@ -0,0 +1,136 @@
+/*
+ *
+ * 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.engine.impl;
+
+import static org.junit.Assert.*;
+
+import org.apache.qpid.proton.amqp.Binary;
+import org.junit.Test;
+
+public class StringUtilsTest
+{
+ @Test
+ public void testNullBinary()
+ {
+ assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(null, 10, true));
+ }
+
+ @Test
+ public void testEmptyBinaryEmptyArray()
+ {
+ Binary bin = new Binary(new byte[0]);
+ assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
+ }
+
+ @Test
+ public void testEmptyBinaryNonEmptyArray()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 0, (byte) 0};
+ Binary bin = new Binary(bytes, 0, 0);
+ assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
+ }
+
+ @Test
+ public void testEmptyBinaryNonEmptyArrayWithOffset()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 0, (byte) 0};
+ Binary bin = new Binary(bytes, 1, 0);
+ assertEquals("unexpected result", "\"\"", StringUtils.toQuotedString(bin, 10, true));
+ }
+
+ @Test
+ public void testBinaryStringifiedSmallerThanGivenMaxLength()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65, (byte) 152};
+ String expected = "\"\\x00\\x01\\x03A\\x98\"";
+ Binary bin = new Binary(bytes);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, false));
+ }
+
+ @Test
+ public void testBinaryStringifiedSmallerThanGivenMaxLengthWithOffset()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65, (byte) 152};
+ String expected = "\"\\x01\\x03A\\x98\"";
+ Binary bin = new Binary(bytes, 1, 4);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 100, false));
+ }
+
+ @Test
+ public void testBinaryStringifiedEqualToGivenMaxLength()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65};
+ String expected = "\"\\x00\\x01\\x03A\"";
+ Binary bin = new Binary(bytes);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, false));
+
+ bytes = new byte[] {(byte) 0, (byte) 1, (byte) 65, (byte) 3};
+ expected = "\"\\x00\\x01A\\x03\"";
+ bin = new Binary(bytes);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 15, false));
+ }
+
+ @Test
+ public void testBinaryStringifiedEqualToGivenMaxLengthWithOffset()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3, (byte) 65};
+ String expected = "\"\\x01\\x03A\"";
+ Binary bin = new Binary(bytes, 1, 3);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, false));
+
+ bytes = new byte[] {(byte) 0, (byte) 1, (byte) 65, (byte) 3};
+ expected = "\"\\x01A\\x03\"";
+ bin = new Binary(bytes, 1, 3);
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, true));
+ assertEquals("unexpected result", expected, StringUtils.toQuotedString(bin, 11, false));
+ }
+
+ @Test
+ public void testBinaryStringifiedLargerThanGivenMaxLength()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3};
+ String expected1 = "\"\\x00\\x01\"";
+ Binary bin = new Binary(bytes);
+
+ assertEquals("unexpected result", expected1, StringUtils.toQuotedString(bin, 10, false));
+
+ String expected2 = "\"\\x00\\x01\"...(truncated)";
+ assertEquals("unexpected result", expected2, StringUtils.toQuotedString(bin, 10, true));
+ }
+
+ @Test
+ public void testBinaryStringifiedLargerThanGivenMaxLengthWithOffset()
+ {
+ byte[] bytes = new byte[] {(byte) 0, (byte) 1, (byte) 3};
+ String expected1 = "\"\\x00\\x01\"";
+ Binary bin = new Binary(bytes);
+
+ assertEquals("unexpected result", expected1, StringUtils.toQuotedString(bin, 10, false));
+
+ String expected2 = "\"\\x00\\x01\"...(truncated)";
+ assertEquals("unexpected result", expected2, StringUtils.toQuotedString(bin, 10, true));
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org