You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/03/01 13:32:46 UTC
[incubator-plc4x] 01/01: refactored so we use byte[] insted of
ByteBuf
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a commit to branch refactoring/ads_use_byte_array
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git
commit a2b6531da4dad44d7763aacf818cd2bd6ccb594f
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Mar 1 14:32:40 2018 +0100
refactored so we use byte[] insted of ByteBuf
---
.../java/ads/api/commands/UnknownCommand.java | 17 +++++-----
.../api/commands/types/AdsNotificationSample.java | 6 ++--
.../ads/api/commands/types/AdsStampHeader.java | 8 ++---
.../apache/plc4x/java/ads/api/generic/ADSData.java | 3 +-
.../plc4x/java/ads/api/generic/AMSHeader.java | 8 ++---
.../plc4x/java/ads/api/generic/AMSTCPHeader.java | 10 +++---
.../plc4x/java/ads/api/generic/AMSTCPPacket.java | 8 ++---
.../plc4x/java/ads/api/util/ByteReadable.java | 21 ++++++++----
.../plc4x/java/ads/api/util/ByteReadableUtils.java | 37 ----------------------
.../apache/plc4x/java/ads/netty/ADSProtocol.java | 16 ++++++----
.../ads/api/commands/CommandFactoryMethodTest.java | 11 +++++--
.../ads/api/generic/GenericFactoryMethodTest.java | 30 +++++++++++-------
12 files changed, 77 insertions(+), 98 deletions(-)
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
index 4eba85d..ebbc57e 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
@@ -18,13 +18,14 @@
*/
package org.apache.plc4x.java.ads.api.commands;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.generic.ADSData;
import org.apache.plc4x.java.ads.api.generic.AMSHeader;
import org.apache.plc4x.java.ads.api.generic.AMSTCPHeader;
import org.apache.plc4x.java.ads.api.generic.AMSTCPPacket;
import org.apache.plc4x.java.ads.api.generic.types.*;
+import java.util.Arrays;
+
import static java.util.Objects.requireNonNull;
/**
@@ -33,14 +34,14 @@ import static java.util.Objects.requireNonNull;
@ADSCommandType(Command.UNKNOWN)
public class UnknownCommand extends AMSTCPPacket {
- private final ByteBuf remainingBytes;
+ private final byte[] remainingBytes;
- private UnknownCommand(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
+ private UnknownCommand(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, byte[] remainingBytes) {
super(amstcpHeader, amsHeader);
this.remainingBytes = requireNonNull(remainingBytes);
}
- private UnknownCommand(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId, ByteBuf remainingBytes) {
+ private UnknownCommand(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId, byte[] remainingBytes) {
super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, stateId, invokeId);
this.remainingBytes = requireNonNull(remainingBytes);
}
@@ -50,11 +51,11 @@ public class UnknownCommand extends AMSTCPPacket {
return () -> remainingBytes;
}
- public static AMSTCPPacket of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
+ public static AMSTCPPacket of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, byte[] remainingBytes) {
return new UnknownCommand(amstcpHeader, amsHeader, remainingBytes);
}
- public static UnknownCommand of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId, ByteBuf remainingBytes) {
+ public static UnknownCommand of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId, byte[] remainingBytes) {
return new UnknownCommand(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, stateId, invokeId, remainingBytes);
}
@@ -69,13 +70,13 @@ public class UnknownCommand extends AMSTCPPacket {
UnknownCommand that = (UnknownCommand) o;
- return remainingBytes.equals(that.remainingBytes);
+ return Arrays.equals(remainingBytes, that.remainingBytes);
}
@Override
public int hashCode() {
int result = super.hashCode();
- result = 31 * result + remainingBytes.hashCode();
+ result = 31 * result + Arrays.hashCode(remainingBytes);
return result;
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsNotificationSample.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsNotificationSample.java
index 325b6e3..fd17925 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsNotificationSample.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsNotificationSample.java
@@ -18,12 +18,10 @@
*/
package org.apache.plc4x.java.ads.api.commands.types;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
import org.apache.plc4x.java.ads.api.util.LengthSupplier;
import static java.util.Objects.requireNonNull;
-import static org.apache.plc4x.java.ads.api.util.ByteReadableUtils.buildByteBuff;
public class AdsNotificationSample implements ByteReadable {
@@ -65,8 +63,8 @@ public class AdsNotificationSample implements ByteReadable {
}
@Override
- public ByteBuf getByteBuf() {
- return buildByteBuff(notificationHandle, getSampleSize(), data);
+ public byte[] getBytes() {
+ return getAggregatesBytes(notificationHandle, getSampleSize(), data);
}
public NotificationHandle getNotificationHandle() {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsStampHeader.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsStampHeader.java
index 2c9b56b..24ffa7c 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsStampHeader.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/types/AdsStampHeader.java
@@ -18,13 +18,11 @@
*/
package org.apache.plc4x.java.ads.api.commands.types;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
import java.util.List;
import static java.util.Objects.requireNonNull;
-import static org.apache.plc4x.java.ads.api.util.ByteReadableUtils.buildByteBuff;
public class AdsStampHeader implements ByteReadable {
@@ -62,8 +60,8 @@ public class AdsStampHeader implements ByteReadable {
}
@Override
- public ByteBuf getByteBuf() {
- return buildByteBuff(timeStamp, samples, () -> buildByteBuff(adsNotificationSamples.toArray(new ByteReadable[adsNotificationSamples.size()])));
+ public byte[] getBytes() {
+ return getAggregatesBytes(timeStamp, samples, () -> getAggregatesBytes(adsNotificationSamples.toArray(new ByteReadable[adsNotificationSamples.size()])));
}
public TimeStamp getTimeStamp() {
@@ -91,7 +89,7 @@ public class AdsStampHeader implements ByteReadable {
return false;
if (!samples.equals(that.samples))
return false;
-
+
return adsNotificationSamples.equals(that.adsNotificationSamples);
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/ADSData.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/ADSData.java
index e97b1dc..0fd1dd0 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/ADSData.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/ADSData.java
@@ -18,7 +18,6 @@
*/
package org.apache.plc4x.java.ads.api.generic;
-import io.netty.buffer.Unpooled;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
/**
@@ -27,6 +26,6 @@ import org.apache.plc4x.java.ads.api.util.ByteReadable;
@FunctionalInterface
public interface ADSData extends ByteReadable {
- ADSData EMPTY = () -> Unpooled.EMPTY_BUFFER;
+ ADSData EMPTY = () -> new byte[0];
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSHeader.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSHeader.java
index 72bb6f0..2b25a26 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSHeader.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSHeader.java
@@ -18,13 +18,11 @@
*/
package org.apache.plc4x.java.ads.api.generic;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.generic.types.*;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
import org.apache.plc4x.java.ads.api.util.LengthSupplier;
import static java.util.Objects.requireNonNull;
-import static org.apache.plc4x.java.ads.api.util.ByteReadableUtils.buildByteBuff;
/**
* AMS Header 32 bytes The AMS/TCP-Header contains the addresses of the transmitter and receiver. In addition the AMS error code , the ADS command Id and some other information.
@@ -107,8 +105,8 @@ public class AMSHeader implements ByteReadable {
}
@Override
- public ByteBuf getByteBuf() {
- return buildByteBuff(
+ public byte[] getBytes() {
+ return getAggregatesBytes(
targetAmsNetId,
targetAmsPort,
sourceAmsNetId,
@@ -181,7 +179,7 @@ public class AMSHeader implements ByteReadable {
return false;
if (!invokeId.equals(amsHeader.invokeId))
return false;
-
+
return getDataLength().equals(((AMSHeader) o).getDataLength());
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java
index d7d7e0a..b97cdd7 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPHeader.java
@@ -18,14 +18,12 @@
*/
package org.apache.plc4x.java.ads.api.generic;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.generic.types.TcpLength;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
import org.apache.plc4x.java.ads.api.util.ByteValue;
import org.apache.plc4x.java.ads.api.util.LengthSupplier;
import static java.util.Objects.requireNonNull;
-import static org.apache.plc4x.java.ads.api.util.ByteReadableUtils.buildByteBuff;
/**
* AMS/TCP Header 6 bytes contains the tcpLength of the data packet.
@@ -68,8 +66,8 @@ public class AMSTCPHeader implements ByteReadable {
}
@Override
- public ByteBuf getByteBuf() {
- return buildByteBuff(reserved, getTcpLength());
+ public byte[] getBytes() {
+ return getAggregatesBytes(reserved, getTcpLength());
}
/**
@@ -91,9 +89,9 @@ public class AMSTCPHeader implements ByteReadable {
@Override
public long getCalculatedLength() {
if (lengthSuppliers == null) {
- return tcpLength.getAsLong();
+ return (int) tcpLength.getAsLong();
} else {
- long aggregateLength = 0;
+ int aggregateLength = 0;
for (LengthSupplier supplier : lengthSuppliers) {
aggregateLength += supplier.getCalculatedLength();
}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java
index cb1bafd..8109be7 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/generic/AMSTCPPacket.java
@@ -18,13 +18,11 @@
*/
package org.apache.plc4x.java.ads.api.generic;
-import io.netty.buffer.ByteBuf;
import org.apache.plc4x.java.ads.api.commands.ADSCommandType;
import org.apache.plc4x.java.ads.api.generic.types.*;
import org.apache.plc4x.java.ads.api.util.ByteReadable;
import static java.util.Objects.requireNonNull;
-import static org.apache.plc4x.java.ads.api.util.ByteReadableUtils.buildByteBuff;
public abstract class AMSTCPPacket implements ByteReadable {
private final AMSTCPHeader amsTcpHeader;
@@ -71,12 +69,12 @@ public abstract class AMSTCPPacket implements ByteReadable {
protected abstract ADSData getAdsData();
@Override
- public ByteBuf getByteBuf() {
- return buildByteBuff(amsTcpHeader, amsHeader, getAdsData());
+ public byte[] getBytes() {
+ return getAggregatesBytes(amsTcpHeader, amsHeader, getAdsData());
}
protected ADSData buildADSData(ByteReadable... byteReadables) {
- return () -> buildByteBuff(byteReadables);
+ return () -> getAggregatesBytes(byteReadables);
}
@Override
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadable.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadable.java
index a1170a0..684e65c 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadable.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadable.java
@@ -19,22 +19,31 @@
package org.apache.plc4x.java.ads.api.util;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
import org.apache.commons.io.HexDump;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Objects;
@FunctionalInterface
public interface ByteReadable extends LengthSupplier {
- default byte[] getBytes() {
- ByteBuf byteBuf = getByteBuf();
- byte[] result = new byte[byteBuf.writerIndex()];
- byteBuf.readBytes(result);
- return result;
+ byte[] getBytes();
+
+ default byte[] getAggregatesBytes(ByteReadable... byteReadables) {
+ Objects.requireNonNull(byteReadables);
+ int bytes = Arrays.stream(byteReadables).map(ByteReadable::getCalculatedLength).mapToInt(Long::intValue).sum();
+ ByteBuffer byteBuffer = ByteBuffer.allocate(bytes);
+ Arrays.stream(byteReadables).map(ByteReadable::getBytes).forEach(byteBuffer::put);
+ return byteBuffer.array();
}
- ByteBuf getByteBuf();
+ default ByteBuf getByteBuf() {
+ return Unpooled.wrappedBuffer(getBytes());
+ }
@Override
default long getCalculatedLength() {
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadableUtils.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadableUtils.java
deleted file mode 100644
index 02cbd78..0000000
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/util/ByteReadableUtils.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
- */
-package org.apache.plc4x.java.ads.api.util;
-
-import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
-
-public class ByteReadableUtils {
-
- private ByteReadableUtils() {
- // Singleton
- }
-
- public static ByteBuf buildByteBuff(ByteReadable... byteReadables) {
- ByteBuf buffer = Unpooled.buffer();
- for (ByteReadable byteReadable : byteReadables) {
- buffer.writeBytes(byteReadable.getByteBuf());
- }
- return buffer;
- }
-}
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
index 70796b6..178e00a 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
@@ -136,9 +136,9 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
}
private AMSTCPPacket handleInvalidCommand(ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
- AMSTCPPacket amstcpPacket;
- amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
- return amstcpPacket;
+ byte[] bytes = new byte[commandBuffer.readableBytes()];
+ commandBuffer.readBytes(bytes);
+ return UnknownCommand.of(amstcpHeader, amsHeader, bytes);
}
private AMSTCPPacket handleADSReadDeviceInfoCommand(State stateId, ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
@@ -280,7 +280,9 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
adsDeviceNotificationBuffer.release();
amstcpPacket = ADSDeviceNotificationRequest.of(amstcpHeader, amsHeader, length, stamps, adsStampHeaders);
} else {
- amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
+ byte[] bytes = new byte[commandBuffer.readableBytes()];
+ commandBuffer.readBytes(bytes);
+ amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, bytes);
}
return amstcpPacket;
}
@@ -346,8 +348,8 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPacket> {
}
private AMSTCPPacket handleUnknownCommand(ByteBuf commandBuffer, AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
- AMSTCPPacket amstcpPacket;
- amstcpPacket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
- return amstcpPacket;
+ byte[] bytes = new byte[commandBuffer.readableBytes()];
+ commandBuffer.readBytes(bytes);
+ return UnknownCommand.of(amstcpHeader, amsHeader, bytes);
}
}
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/CommandFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/CommandFactoryMethodTest.java
index 5bec44c..5ec87ac 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/CommandFactoryMethodTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/commands/CommandFactoryMethodTest.java
@@ -19,6 +19,7 @@
package org.apache.plc4x.java.ads.api.commands;
import org.apache.plc4x.java.ads.api.generic.types.Command;
+import org.apache.plc4x.java.ads.api.util.ByteReadable;
import org.apache.plc4x.java.ads.api.util.LengthSupplier;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -35,8 +36,7 @@ import java.util.stream.Stream;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.*;
@RunWith(Parameterized.class)
public class CommandFactoryMethodTest {
@@ -93,6 +93,13 @@ public class CommandFactoryMethodTest {
return 1L;
} else if (aClass == List.class) {
return Collections.emptyList();
+ } else if (aClass == byte[].class) {
+ return new byte[0];
+ } else if (ByteReadable.class.isAssignableFrom(aClass)) {
+ Class<? extends ByteReadable> aSpecialClass = (Class<? extends ByteReadable>) aClass;
+ ByteReadable mock = mock(aSpecialClass, RETURNS_DEEP_STUBS);
+ when(mock.getBytes()).thenReturn(new byte[0]);
+ return mock;
} else {
return mock(aClass, RETURNS_DEEP_STUBS);
}
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
index ca8f415..d265092 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/api/generic/GenericFactoryMethodTest.java
@@ -19,6 +19,7 @@
package org.apache.plc4x.java.ads.api.generic;
import org.apache.plc4x.java.ads.api.generic.types.Command;
+import org.apache.plc4x.java.ads.api.util.ByteReadable;
import org.apache.plc4x.java.ads.api.util.LengthSupplier;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -34,8 +35,7 @@ import java.util.stream.Stream;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.*;
@RunWith(Parameterized.class)
public class GenericFactoryMethodTest {
@@ -67,16 +67,24 @@ public class GenericFactoryMethodTest {
continue;
}
Object invoke = method.invoke(null, Arrays.stream(method.getParameterTypes()).map(aClass -> {
- if (aClass == Command.class) {
- return Command.INVALID;
- } else if (aClass == LengthSupplier[].class) {
- return new LengthSupplier[]{() -> 0};
- } else if (aClass == long.class) {
- return 1L;
- } else {
- return mock(aClass, RETURNS_DEEP_STUBS);
+ if (aClass == Command.class) {
+ return Command.INVALID;
+ } else if (aClass == LengthSupplier[].class) {
+ return new LengthSupplier[]{() -> 0};
+ } else if (aClass == long.class) {
+ return 1L;
+ } else if (ByteReadable.class.isAssignableFrom(aClass)) {
+ Class<? extends ByteReadable> aSpecialClass = (Class<? extends ByteReadable>) aClass;
+ ByteReadable mock = mock(aSpecialClass, RETURNS_DEEP_STUBS);
+ when(mock.getBytes()).thenReturn(new byte[0]);
+ return mock;
+ } else if (aClass == byte[].class) {
+ return new byte[0];
+ } else {
+ return mock(aClass, RETURNS_DEEP_STUBS);
+ }
}
- }).toArray());
+ ).toArray());
assertThat(invoke, notNullValue());
assertThat(invoke, instanceOf(clazz));
assertThat(invoke.toString(), not(isEmptyString()));
--
To stop receiving notification emails like this one, please contact
sruehl@apache.org.