/*
* $Id$
*
* Janus platform is an open-source multiagent platform.
* More details on http://www.janusproject.io
*
* Copyright (C) 2014-2015 Sebastian RODRIGUEZ, Nicolas GAUD, Stéphane GALLAND.
*
* Licensed 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 io.janusproject.tests.modules.hazelcast;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.nio.ByteOrder;
import com.hazelcast.nio.ObjectDataInput;
import com.hazelcast.nio.ObjectDataOutput;
import com.hazelcast.nio.Version;
import com.hazelcast.nio.serialization.Data;
import com.hazelcast.nio.serialization.StreamSerializer;
import io.janusproject.tests.testutils.AbstractJanusTest;
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
@SuppressWarnings("all")
abstract class AbstractSerializerTest extends AbstractJanusTest {
protected static <S> void assertWriteRead(S expected, StreamSerializer<S> serializer) throws Exception {
byte[] content;
try (OutputStream os = new OutputStream()) {
serializer.write(os, expected);
content = os.toByteArray();
}
S newObj;
try (InputStream is = new InputStream(content)) {
newObj = serializer.read(is);
}
assertEquals(expected, newObj);
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
private static class OutputStream extends ByteArrayOutputStream implements ObjectDataOutput {
public OutputStream() {
//
}
@Override
public void writeBoolean(boolean v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeByte(int v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeShort(int v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeChar(int v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeInt(int v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeLong(long v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeFloat(float v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeDouble(double v) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeBytes(String s) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeChars(String s) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeUTF(String s) throws IOException {
writeObject(s);
}
@Override
public void writeCharArray(char[] chars) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeIntArray(int[] ints) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeLongArray(long[] longs) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeDoubleArray(double[] values) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeFloatArray(float[] values) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeShortArray(short[] values) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeObject(Object object) throws IOException {
new ObjectOutputStream(this).writeObject(object);
}
@Override
public ByteOrder getByteOrder() {
throw new UnsupportedOperationException();
}
@Override
public void writeByteArray(byte[] arg0) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeData(Data arg0) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeBooleanArray(boolean[] booleans) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void writeUTFArray(String[] values) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public Version getVersion() {
return Version.UNKNOWN;
}
@Override
public byte[] toByteArray(int padding) {
byte[] content = toByteArray();
if (content != null && padding > 0) {
if (padding > content.length) {
content = new byte[0];
} else {
final int len = content.length - padding;
byte[] newContent = new byte[len];
System.arraycopy(content, padding, newContent, 0, Math.min(len, newContent.length));
content = newContent;
}
}
return content;
}
}
/**
* @author $Author: sgalland$
* @version $FullVersion$
* @mavengroupid $GroupId$
* @mavenartifactid $ArtifactId$
*/
private static class InputStream extends ByteArrayInputStream implements ObjectDataInput {
public InputStream(byte[] t) {
super(t);
}
@Override
public void readFully(byte[] b) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public void readFully(byte[] b, int off, int len) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int skipBytes(int n) throws IOException {
throw new UnsupportedOperationException();
}
@Override
public boolean readBoolean() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public byte readByte() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int readUnsignedByte() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public short readShort() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int readUnsignedShort() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public char readChar() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int readInt() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public long readLong() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public float readFloat() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public double readDouble() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public String readLine() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public String readUTF() throws IOException {
return (String) readObject();
}
@Override
public char[] readCharArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public int[] readIntArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public long[] readLongArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public double[] readDoubleArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public float[] readFloatArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public short[] readShortArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public <T> T readObject() throws IOException {
try {
return (T) new ObjectInputStream(this).readObject();
} catch (ClassNotFoundException e) {
throw new IOException(e);
}
}
@Override
public <T> T readDataAsObject() throws IOException {
return readObject();
}
@Override
public <T> T readObject(Class type) throws IOException {
Object instance = readObject();
if (instance == null || type.isInstance(instance)) {
return (T) instance;
}
throw new IOException();
}
@Override
public ClassLoader getClassLoader() {
return InputStream.class.getClassLoader();
}
@Override
public ByteOrder getByteOrder() {
throw new UnsupportedOperationException();
}
@Override
public byte[] readByteArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public Data readData() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public boolean[] readBooleanArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public String[] readUTFArray() throws IOException {
throw new UnsupportedOperationException();
}
@Override
public Version getVersion() {
return Version.UNKNOWN;
}
}
}