You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bf...@apache.org on 2014/02/20 20:17:11 UTC
[05/50] [abbrv] git commit: updated refs/heads/ui-restyle to c64bfa5
Fix findbugs findings in cloudstack-service-console-proxy-rdpclient
Findings:
- 32 int shifted by an amount not in range -31..31:
The shifts by 32 bits don't actually have any effect on the value
(as shown by the tests)
- possible null pointer dereference
- repeated conditional test
- field only ever set to null
All other uses of the field were to check if it was null,
which it was, so it was removed
Other actions:
- Upgrade jUnit to version 4
- Add PowerMock dependency
Signed-off-by: Hugo Trippaers <ht...@schubergphilis.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1237bf32
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1237bf32
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1237bf32
Branch: refs/heads/ui-restyle
Commit: 1237bf32229c3f734110ef26139f18fea27163b4
Parents: ef2ced7
Author: miguelaferreira <mf...@shubergphilis.com>
Authored: Tue Feb 11 18:56:05 2014 +0100
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Fri Feb 14 18:37:46 2014 +0100
----------------------------------------------------------------------
pom.xml | 12 ++
services/console-proxy-rdp/rdpconsole/pom.xml | 2 +-
.../rdpconsole/src/main/java/common/Client.java | 92 ++++++------
.../src/main/java/streamer/ByteBuffer.java | 122 ++++++++-------
.../src/test/java/common/ClientTest.java | 43 ++++++
.../src/test/java/rdpclient/MockServerTest.java | 5 +
.../src/test/java/streamer/ByteBufferTest.java | 150 +++++++++++++++++++
7 files changed, 331 insertions(+), 95 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 9dbd72b..cf6e960 100644
--- a/pom.xml
+++ b/pom.xml
@@ -75,6 +75,7 @@
<cs.vmware.api.version>5.1</cs.vmware.api.version>
<org.springframework.version>3.2.4.RELEASE</org.springframework.version>
<cs.mockito.version>1.9.5</cs.mockito.version>
+ <cs.powermock.version>1.5.3</cs.powermock.version>
<cs.aws.sdk.version>1.3.22</cs.aws.sdk.version>
<cs.lang.version>2.6</cs.lang.version>
<cs.commons-io.version>1.4</cs.commons-io.version>
@@ -418,6 +419,17 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-junit4</artifactId>
+ <version>${cs.powermock.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>${cs.powermock.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework.version}</version>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/pom.xml
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/pom.xml b/services/console-proxy-rdp/rdpconsole/pom.xml
index 05585a1..efcf780 100755
--- a/services/console-proxy-rdp/rdpconsole/pom.xml
+++ b/services/console-proxy-rdp/rdpconsole/pom.xml
@@ -58,7 +58,7 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>3.8.1</version>
+ <version>${cs.junit.version}</version>
<scope>test</scope>
</dependency>
<!-- Apache Portable Runtime implementation of SSL protocol, which is compatible with broken MS RDP SSL suport.
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java b/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java
index 688693b..f21d7e3 100755
--- a/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java
+++ b/services/console-proxy-rdp/rdpconsole/src/main/java/common/Client.java
@@ -34,6 +34,7 @@ import streamer.apr.AprSocketWrapperImpl;
import streamer.bco.BcoSocketWrapperImpl;
import streamer.ssl.SSLState;
import vncclient.VncClient;
+
import common.opt.IntOption;
import common.opt.Option;
import common.opt.OptionParser;
@@ -47,28 +48,28 @@ public class Client {
}
// Common options
- private Option help = new Option() {
+ private final Option help = new Option() {
{
name = "--help";
alias = "-h";
description = "Show this help text.";
}
};
- private Option debugLink = new Option() {
+ private final Option debugLink = new Option() {
{
name = "--debug-link";
alias = "-DL";
description = "Print debugging messages when packets are trasnferred via links.";
}
};
- private Option debugElement = new Option() {
+ private final Option debugElement = new Option() {
{
name = "--debug-element";
alias = "-DE";
description = "Print debugging messages when packets are received or sended by elements.";
}
};
- private Option debugPipeline = new Option() {
+ private final Option debugPipeline = new Option() {
{
name = "--debug-pipeline";
alias = "-DP";
@@ -76,7 +77,7 @@ public class Client {
}
};
- private StringOption hostName = new StringOption() {
+ private final StringOption hostName = new StringOption() {
{
name = "--host";
alias = "-n";
@@ -85,7 +86,7 @@ public class Client {
description = "Name or IP address of host to connect to.";
}
};
- private IntOption canvasWidth = new IntOption() {
+ private final IntOption canvasWidth = new IntOption() {
{
name = "--width";
alias = "-W";
@@ -94,7 +95,7 @@ public class Client {
}
};
- private IntOption canvasHeight = new IntOption() {
+ private final IntOption canvasHeight = new IntOption() {
{
name = "--height";
alias = "-H";
@@ -105,7 +106,7 @@ public class Client {
// Protocol specific options
- private IntOption vncPort = new IntOption() {
+ private final IntOption vncPort = new IntOption() {
{
name = "--port";
alias = "-p";
@@ -114,7 +115,7 @@ public class Client {
}
};
- private IntOption rdpPort = new IntOption() {
+ private final IntOption rdpPort = new IntOption() {
{
name = "--port";
alias = "-p";
@@ -123,7 +124,7 @@ public class Client {
}
};
- private IntOption hyperVPort = new IntOption() {
+ private final IntOption hyperVPort = new IntOption() {
{
name = "--port";
alias = "-p";
@@ -132,7 +133,7 @@ public class Client {
}
};
- private StringOption password = new StringOption() {
+ private final StringOption password = new StringOption() {
{
name = "--password";
alias = "-P";
@@ -141,7 +142,7 @@ public class Client {
}
};
- private StringOption rdpPassword = new StringOption() {
+ private final StringOption rdpPassword = new StringOption() {
{
name = "--password";
alias = "-P";
@@ -150,7 +151,7 @@ public class Client {
}
};
- private StringOption userName = new StringOption() {
+ private final StringOption userName = new StringOption() {
{
name = "--user";
alias = "-U";
@@ -159,7 +160,7 @@ public class Client {
}
};
- private StringOption domain = new StringOption() {
+ private final StringOption domain = new StringOption() {
{
name = "--domain";
alias = "-D";
@@ -168,7 +169,7 @@ public class Client {
}
};
- private StringOption hyperVInstanceId = new StringOption() {
+ private final StringOption hyperVInstanceId = new StringOption() {
{
name = "--instance";
alias = "-i";
@@ -176,7 +177,7 @@ public class Client {
description = "HyperV instance ID to use.";
}
};
- private StringEnumerationOption sslImplementation = new StringEnumerationOption() {
+ private final StringEnumerationOption sslImplementation = new StringEnumerationOption() {
{
name = "--ssl-implementation";
alias = "-j";
@@ -196,6 +197,7 @@ public class Client {
private static ScrollPane scroller;
private static ScreenDescription screen;
private static BufferedImageCanvas canvas;
+ private InetSocketAddress address;
private void help() {
System.out.println("Usage: \n java common.Client vnc|rdp|hyperv OPTIONS\n");
@@ -243,32 +245,7 @@ public class Client {
}
});
- // Assemble pipeline
- InetSocketAddress address;
- Element main;
- switch (protocol) {
- case VNC:
- address = new InetSocketAddress(hostName.value, vncPort.value);
- main = new VncClient("client", password.value, screen, canvas);
- break;
- case RDP:
- address = new InetSocketAddress(hostName.value, rdpPort.value);
- main = new RdpClient("client", hostName.value, domain.value, userName.value, rdpPassword.value, null, screen, canvas, sslState);
- break;
- case HYPERV:
- address = new InetSocketAddress(hostName.value, hyperVPort.value);
- main = new RdpClient("client", hostName.value, domain.value, userName.value, password.value, hyperVInstanceId.value, screen, canvas, sslState);
- break;
- default:
- address = null;
- main = null;
- }
-
- Pipeline pipeline = new PipelineImpl("Client");
- pipeline.add(socket, main);
- pipeline.link("socket", main.getId(), "socket");
-
- pipeline.validate();
+ assemblePipeline(setMainElementAndAddressBasedOnProtocol(protocol, sslState));
frame = createVncClientMainWindow(canvas, protocol.toString() + " " + hostName.value, new WindowAdapter() {
@Override
@@ -289,6 +266,37 @@ public class Client {
}
}
+ protected static void assemblePipeline(Element main) {
+ Pipeline pipeline = new PipelineImpl("Client");
+ pipeline.add(socket, main);
+ pipeline.link("socket", main.getId(), "socket");
+
+ pipeline.validate();
+ }
+
+ private Element setMainElementAndAddressBasedOnProtocol(Protocol protocol, SSLState sslState) {
+ Element main;
+ switch (protocol) {
+ case VNC:
+ address = new InetSocketAddress(hostName.value, vncPort.value);
+ main = new VncClient("client", password.value, screen, canvas);
+ break;
+ case RDP:
+ address = new InetSocketAddress(hostName.value, rdpPort.value);
+ main = new RdpClient("client", hostName.value, domain.value, userName.value, rdpPassword.value, null, screen, canvas, sslState);
+ break;
+ case HYPERV:
+ address = new InetSocketAddress(hostName.value, hyperVPort.value);
+ main = new RdpClient("client", hostName.value, domain.value, userName.value, password.value, hyperVInstanceId.value, screen, canvas, sslState);
+ break;
+ default:
+ address = null;
+ main = null;
+ }
+
+ return main;
+ }
+
private Protocol parseOptions(String[] args) {
String protocolName = (args.length > 0) ? args[0] : "";
Protocol protocol = Protocol.NONE;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java
index 3a718ba..e307342 100755
--- a/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java
+++ b/services/console-proxy-rdp/rdpconsole/src/main/java/streamer/ByteBuffer.java
@@ -36,7 +36,6 @@ public class ByteBuffer {
public int cursor = 0;
private int refCount = 1;
- private ByteBuffer parentByteBuffer = null;
private Order order;
@@ -159,8 +158,23 @@ public class ByteBuffer {
*/
public String dump() {
StringBuilder builder = new StringBuilder(length * 4);
+ int i = addBytesToBuilder(builder);
+ int end = i - 1;
+ if (end % 16 != 15) {
+ int begin = end & ~0xf;
+ for (int j = 0; j < (15 - (end % 16)); j++) {
+ builder.append(" ");
+ }
+ builder.append(' ');
+ builder.append(toASCIIString(begin, end));
+ builder.append('\n');
+ }
+ return builder.toString();
+ }
+
+ protected int addBytesToBuilder(StringBuilder builder) {
int i = 0;
- for (; i < length && i < length; i++) {
+ for (; i < length; i++) {
if (i % 16 == 0) {
builder.append(String.format("%04x", i));
}
@@ -175,17 +189,7 @@ public class ByteBuffer {
builder.append('\n');
}
}
- int end = i - 1;
- if (end % 16 != 15) {
- int begin = end & ~0xf;
- for (int j = 0; j < (15 - (end % 16)); j++) {
- builder.append(" ");
- }
- builder.append(' ');
- builder.append(toASCIIString(begin, end));
- builder.append('\n');
- }
- return builder.toString();
+ return i;
}
private String toASCIIString(int start, int finish) {
@@ -222,14 +226,8 @@ public class ByteBuffer {
refCount--;
if (refCount == 0) {
-
- if (parentByteBuffer != null) {
- parentByteBuffer.unref();
- parentByteBuffer = null;
- } else {
- // Return buffer to buffer pool
- BufferPool.recycleBuffer(data);
- }
+ // Return buffer to buffer pool
+ BufferPool.recycleBuffer(data);
data = null;
}
@@ -237,7 +235,7 @@ public class ByteBuffer {
}
public boolean isSoleOwner() {
- return refCount == 1 && (parentByteBuffer == null);
+ return refCount == 1;
}
/**
@@ -247,8 +245,8 @@ public class ByteBuffer {
ref();
if (this.length < (offset + length))
- throw new RuntimeException("Length of region is larger that length of this buffer. Buffer length: " + this.length + ", offset: " + offset
- + ", new region length: " + length + ".");
+ throw new RuntimeException("Length of region is larger that length of this buffer. Buffer length: " + this.length + ", offset: " + offset + ", new region length: "
+ + length + ".");
ByteBuffer slice = new ByteBuffer(data, this.offset + offset, length);
@@ -308,8 +306,8 @@ public class ByteBuffer {
public short[] toShortArray() {
if (length % 2 != 0)
- throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 2 without remainder. Array length: " + length + ", remainder: "
- + (length % 2) + ".");
+ throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 2 without remainder. Array length: " + length + ", remainder: " + (length % 2)
+ + ".");
short[] buf = new short[length / 2];
@@ -324,8 +322,8 @@ public class ByteBuffer {
*/
public int[] toIntLEArray() {
if (length % 4 != 0)
- throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 4 without remainder. Array length: " + length + ", remainder: "
- + (length % 4) + ".");
+ throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 4 without remainder. Array length: " + length + ", remainder: " + (length % 4)
+ + ".");
int[] buf = new int[length / 4];
@@ -341,8 +339,8 @@ public class ByteBuffer {
*/
public int[] toInt3LEArray() {
if (length % 3 != 0)
- throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 3 without remainder. Array length: " + length + ", remainder: "
- + (length % 3) + ".");
+ throw new ArrayIndexOutOfBoundsException("Length of byte array must be dividable by 3 without remainder. Array length: " + length + ", remainder: " + (length % 3)
+ + ".");
int[] buf = new int[length / 3];
@@ -373,8 +371,7 @@ public class ByteBuffer {
if (cursor + 4 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 4 bytes from this buffer: " + this + ".");
- int result = (((data[offset + cursor] & 0xff) << 24) + ((data[offset + cursor + 1] & 0xff) << 16) + ((data[offset + cursor + 2] & 0xff) << 8) + (data[offset
- + cursor + 3] & 0xff));
+ int result = (((data[offset + cursor] & 0xff) << 24) + ((data[offset + cursor + 1] & 0xff) << 16) + ((data[offset + cursor + 2] & 0xff) << 8) + (data[offset + cursor + 3] & 0xff));
cursor += 4;
return result;
}
@@ -386,8 +383,7 @@ public class ByteBuffer {
if (cursor + 4 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 4 bytes from this buffer: " + this + ".");
- int result = (((data[offset + cursor + 3] & 0xff) << 24) + ((data[offset + cursor + 2] & 0xff) << 16) + ((data[offset + cursor + 1] & 0xff) << 8) + (data[offset
- + cursor] & 0xff));
+ int result = (((data[offset + cursor + 3] & 0xff) << 24) + ((data[offset + cursor + 2] & 0xff) << 16) + ((data[offset + cursor + 1] & 0xff) << 8) + (data[offset + cursor] & 0xff));
cursor += 4;
return result;
}
@@ -399,8 +395,8 @@ public class ByteBuffer {
if (cursor + 4 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 4 bytes from this buffer: " + this + ".");
- long result = (((long)(data[offset + cursor + 3] & 0xff) << 24) + ((long)(data[offset + cursor + 2] & 0xff) << 16)
- + ((long)(data[offset + cursor + 1] & 0xff) << 8) + (data[offset + cursor + 0] & 0xff));
+ long result = (((long)(data[offset + cursor + 3] & 0xff) << 24) + ((long)(data[offset + cursor + 2] & 0xff) << 16) + ((long)(data[offset + cursor + 1] & 0xff) << 8) + (data[offset
+ + cursor + 0] & 0xff));
cursor += 4;
return result;
}
@@ -412,12 +408,19 @@ public class ByteBuffer {
if (cursor + 4 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 4 bytes from this buffer: " + this + ".");
- long result = (((long)(data[offset + cursor + 0] & 0xff) << 24) + ((long)(data[offset + cursor + 1] & 0xff) << 16)
- + ((long)(data[offset + cursor + 2] & 0xff) << 8) + (data[offset + cursor + 3] & 0xff));
+ byte value1 = data[offset + cursor + 0];
+ byte value2 = data[offset + cursor + 1];
+ byte value3 = data[offset + cursor + 2];
+ byte value4 = data[offset + cursor + 3];
+ long result = calculateUnsignedInt(value1, value2, value3, value4);
cursor += 4;
return result;
}
+ protected static long calculateUnsignedInt(byte value1, byte value2, byte value3, byte value4) {
+ return (calculateUnsignedByte(value1) << 24) + (calculateUnsignedByte(value2) << 16) + (calculateUnsignedByte(value3) << 8) + calculateUnsignedByte(value4);
+ }
+
/**
* Read signed int in variable length format. Top most bit of each byte
* indicates that next byte contains additional bits. Cursor is advanced by
@@ -474,11 +477,16 @@ public class ByteBuffer {
if (cursor + 1 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 1 byte from this buffer: " + this + ".");
- int b = data[offset + cursor] & 0xff;
+ byte value = data[offset + cursor];
+ int b = calculateUnsignedByte(value);
cursor += 1;
return b;
}
+ protected static int calculateUnsignedByte(byte value) {
+ return value & 0xff;
+ }
+
/**
* Read signed byte. Cursor is advanced by 1.
*/
@@ -498,11 +506,17 @@ public class ByteBuffer {
if (cursor + 2 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 2 bytes from this buffer: " + this + ".");
- int result = (((data[offset + cursor] & 0xff) << 8) | (data[offset + cursor + 1] & 0xff));
+ byte value1 = data[offset + cursor];
+ byte value2 = data[offset + cursor + 1];
+ int result = calculateUnsignedShort(value1, value2);
cursor += 2;
return result;
}
+ protected static int calculateUnsignedShort(byte value1, byte value2) {
+ return (calculateUnsignedByte(value1) << 8) | calculateUnsignedByte(value2);
+ }
+
/**
* Read signed short in little endian order. Cursor is advanced by 2.
*/
@@ -522,11 +536,17 @@ public class ByteBuffer {
if (cursor + 2 > length)
throw new ArrayIndexOutOfBoundsException("Cannot read 2 bytes from this buffer: " + this + ".");
- short result = (short)(((data[offset + cursor + 0] & 0xff) << 8) | (data[offset + cursor + 1] & 0xff));
+ byte value1 = data[offset + cursor + 0];
+ byte value2 = data[offset + cursor + 1];
+ short result = calculateSignedShort(value1, value2);
cursor += 2;
return result;
}
+ protected static short calculateSignedShort(byte value1, byte value2) {
+ return (short)calculateUnsignedShort(value1, value2);
+ }
+
/**
* Read unsigned short in network order in variable length format. Cursor is
* advanced by 1 or 2 bytes.
@@ -653,13 +673,13 @@ public class ByteBuffer {
value = readSignedInt();
break;
case 5:
- value = (readSignedByte() << 32) | readUnsignedInt();
+ value = readSignedByte() | readUnsignedInt();
break;
case 6:
- value = (readSignedShort() << 32) | readUnsignedInt();
+ value = readSignedShort() | readUnsignedInt();
break;
case 7:
- value = (readSignedByte() << 32 + 24) | (readUnsignedShort() << 32) | readUnsignedInt();
+ value = (readSignedByte() << 24) | readUnsignedShort() | readUnsignedInt();
break;
case 8:
value = readSignedLong();
@@ -694,20 +714,19 @@ public class ByteBuffer {
value = readUnsignedInt();
break;
case 5:
- value = (readUnsignedByte() << 32) | readUnsignedInt();
+ value = readUnsignedByte() | readUnsignedInt();
break;
case 6:
- value = (readUnsignedShort() << 32) | readUnsignedInt();
+ value = readUnsignedShort() | readUnsignedInt();
break;
case 7:
- value = (readUnsignedByte() << 32 + 16) | (readUnsignedShort() << 32) | readUnsignedInt();
+ value = (readUnsignedByte() << 16) | readUnsignedShort() | readUnsignedInt();
break;
case 8:
value = readSignedLong();
if (value < 0)
- throw new RuntimeException(
- "Cannot read 64 bit integers which are larger than 0x7FffFFffFFffFFff, because of lack of unsinged long type in Java. Value: " + value + ". Data: "
- + this + ".");
+ throw new RuntimeException("Cannot read 64 bit integers which are larger than 0x7FffFFffFFffFFff, because of lack of unsinged long type in Java. Value: " + value
+ + ". Data: " + this + ".");
break;
default:
throw new RuntimeException("Cannot read integers which are more than 8 bytes long. Length: " + len + ". Data: " + this + ".");
@@ -971,8 +990,7 @@ public class ByteBuffer {
*/
public void prepend(byte[] data, int offset, int length) {
if (!isSoleOwner()) {
- throw new RuntimeException("Create full copy of this byte buffer data for modification. refCount: " + refCount + ", parentByteBuffer: "
- + parentByteBuffer + ".");
+ throw new RuntimeException("Create full copy of this byte buffer data for modification. refCount: " + refCount + ".");
}
// If there is no enough space for header to prepend
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java b/services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java
new file mode 100644
index 0000000..3f5aa90
--- /dev/null
+++ b/services/console-proxy-rdp/rdpconsole/src/test/java/common/ClientTest.java
@@ -0,0 +1,43 @@
+// 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 common;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+import streamer.Element;
+import streamer.SocketWrapper;
+
+@RunWith(PowerMockRunner.class)
+public class ClientTest {
+
+ @Test(expected = NullPointerException.class)
+ public void testAssemblePipelineWhenMainElementIsNull() throws Exception {
+ SocketWrapper socketMock = mock(SocketWrapper.class);
+ when(socketMock.getId()).thenReturn("socket");
+ Whitebox.setInternalState(Client.class, "socket", socketMock);
+ Element main = null;
+
+ Client.assemblePipeline(main);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java b/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java
index 17bc4bd..34e37c9 100755
--- a/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java
+++ b/services/console-proxy-rdp/rdpconsole/src/test/java/rdpclient/MockServerTest.java
@@ -30,11 +30,15 @@ import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import junit.framework.TestCase;
+
+import org.junit.Test;
+
import streamer.debug.MockServer;
import streamer.debug.MockServer.Packet;
public class MockServerTest extends TestCase {
+ @Test
public void testIsMockServerCanRespond() throws Exception {
final byte[] mockClientData = new byte[] {0x01, 0x02, 0x03};
@@ -87,6 +91,7 @@ public class MockServerTest extends TestCase {
}
}
+ @Test
public void testIsMockServerCanUpgradeConnectionToSsl() throws Exception {
final byte[] mockClientData1 = new byte[] {0x01, 0x02, 0x03};
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1237bf32/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java
----------------------------------------------------------------------
diff --git a/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java b/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java
new file mode 100644
index 0000000..8dbeba2
--- /dev/null
+++ b/services/console-proxy-rdp/rdpconsole/src/test/java/streamer/ByteBufferTest.java
@@ -0,0 +1,150 @@
+// 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 streamer;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Random;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+@RunWith(value = Parameterized.class)
+public class ByteBufferTest {
+
+ private static final Random random = new Random(System.currentTimeMillis());
+
+ private final byte[] data;
+
+ public ByteBufferTest(byte[] data) {
+ this.data = data;
+ }
+
+ private static byte[] getRandomByteArray() {
+ return new byte[] {(byte)random.nextInt(), (byte)random.nextInt(), (byte)random.nextInt(), (byte)random.nextInt(), (byte)random.nextInt(), (byte)random.nextInt(),
+ (byte)random.nextInt()};
+ }
+
+ @Parameters
+ public static Collection<Object[]> data() {
+ int parameterCount = 50;
+ List<Object[]> parameters = new ArrayList<Object[]>(parameterCount);
+
+ for (int i = 0; i < parameterCount; i++) {
+ parameters.add(new Object[] {getRandomByteArray()});
+ }
+
+ return parameters;
+ }
+
+ // This findbugs finding is meant to show that the shift by 32 does nothing
+ // and was used to remove these cases from the production code.
+ // Don't try to fix it
+ @Test
+ public void testShiftByteBy32BitsDoesNothing() throws Exception {
+ for (byte b : data) {
+ assertEquals(b, b << 32);
+ }
+ }
+
+ @Test
+ public void testReadSignedVarIntWhenLenIs5() throws Exception {
+ int len = 5;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = data[0] | ByteBuffer.calculateUnsignedInt(data[1], data[2], data[3], data[4]);
+ long actual = byteBuffer.readSignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testReadSignedVarIntWhenLenIs6() throws Exception {
+ int len = 6;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = ByteBuffer.calculateSignedShort(data[0], data[1]) | ByteBuffer.calculateUnsignedInt(data[2], data[3], data[4], data[5]);
+ long actual = byteBuffer.readSignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testReadSignedVarIntWhenLenIs7() throws Exception {
+ int len = 7;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = data[0] << 24 | ByteBuffer.calculateUnsignedShort(data[1], data[2]) | ByteBuffer.calculateUnsignedInt(data[3], data[4], data[5], data[6]);
+ long actual = byteBuffer.readSignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testReadUnsignedVarIntWhenLenIs5() throws Exception {
+ int len = 5;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = ByteBuffer.calculateUnsignedByte(data[0]) | ByteBuffer.calculateUnsignedInt(data[1], data[2], data[3], data[4]);
+ long actual = byteBuffer.readUnsignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testReadUnsignedVarIntWhenLenIs6() throws Exception {
+ int len = 6;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = ByteBuffer.calculateUnsignedShort(data[0], data[1]) | ByteBuffer.calculateUnsignedInt(data[2], data[3], data[4], data[5]);
+ long actual = byteBuffer.readUnsignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testReadUnsignedVarIntWhenLenIs7() throws Exception {
+ int len = 7;
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ long expected = (ByteBuffer.calculateUnsignedByte(data[0]) << 16) | ByteBuffer.calculateUnsignedShort(data[1], data[2])
+ | ByteBuffer.calculateUnsignedInt(data[3], data[4], data[5], data[6]);
+ long actual = byteBuffer.readUnsignedVarInt(len);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testAddBytesToBuilder() throws Exception {
+ StringBuilder builder = new StringBuilder();
+ byte[] data = new byte[] {(byte)1, (byte)2};
+ ByteBuffer byteBuffer = new ByteBuffer(data);
+
+ int expected = 2;
+ int actual = byteBuffer.addBytesToBuilder(builder);
+
+ assertNotNull(builder);
+ assertFalse(builder.toString().isEmpty());
+ assertEquals(expected, actual);
+ }
+
+}