blob: 6e71b9186d65e0e2fb22bc27ec74af7a1693d19f [file] [log] [blame]
/*
* 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 com.alibaba.com.caucho.hessian.io;
import com.alibaba.com.caucho.hessian.io.base.SerializeTestBase;
import com.alibaba.com.caucho.hessian.io.beans.*;
import org.junit.Assert;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public class Hessian2ReuseTest extends SerializeTestBase {
private static final Hessian2Input h2i = new Hessian2Input(null);
private static final Hessian2Output h2o = new Hessian2Output(null);
@SuppressWarnings("unchecked")
private static <T> T serializeAndDeserialize(T obj, Class<T> clazz) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
h2o.init(outputStream);
h2o.writeObject(obj);
h2o.flush();
h2i.init(new ByteArrayInputStream(outputStream.toByteArray()));
return (T) h2i.readObject(clazz);
}
@Test
public void testString() throws IOException {
for (int i = 0; i < 100; i++) {
String obj = "Hello, Hessian2, round:" + i;
String newObj = serializeAndDeserialize(obj, String.class);
Assert.assertEquals(obj, newObj);
String newObj2 = baseHessian2Serialize(obj);
Assert.assertEquals(newObj, newObj2);
}
}
@Test
public void testDate() throws IOException {
long mills = System.currentTimeMillis();
serializeAndDeserialize(new Date(mills), Date.class);
serializeAndDeserialize(new Date(mills + 1000_000), Date.class);
}
@Test
public void testBaseUser() throws IOException {
for (int i = 0; i < 100; i++) {
BaseUser obj = new BaseUser();
obj.setUserId(i * ThreadLocalRandom.current().nextInt(10000));
obj.setUserName(String.valueOf(System.currentTimeMillis()));
BaseUser newObj = serializeAndDeserialize(obj, BaseUser.class);
Assert.assertEquals(obj, newObj);
BaseUser newObj2 = baseHessian2Serialize(obj);
Assert.assertEquals(newObj, newObj2);
}
}
@Test
public void testSubUser() throws IOException {
for (int i = 0; i < 100; i++) {
SubUser obj = new SubUser();
obj.setUserId(i * ThreadLocalRandom.current().nextInt(10000));
obj.setUserName(String.valueOf(System.currentTimeMillis()));
obj.setAgeList(Arrays.asList(12, 13, 14, 15));
obj.setSexyList(Arrays.asList(true, false));
obj.setWeightList(Arrays.asList(120D, 130D, 140D));
SubUser newObj = serializeAndDeserialize(obj, SubUser.class);
Assert.assertEquals(obj, newObj);
SubUser newObj2 = baseHessian2Serialize(obj);
Assert.assertEquals(newObj, newObj2);
}
}
@Test
public void testGrandsonUser() throws IOException {
for (int i = 0; i < 100; i++) {
GrandsonUser obj = new GrandsonUser();
obj.setUserId(i * ThreadLocalRandom.current().nextInt(10000));
obj.setUserName(String.valueOf(System.currentTimeMillis()));
obj.setAgeList(Arrays.asList(12, 13, 14, 15));
obj.setSexyList(Arrays.asList(true, false));
obj.setWeightList(Arrays.asList(120D, 130D, 140D));
SubUser newObj = serializeAndDeserialize(obj, SubUser.class);
Assert.assertEquals(obj, newObj);
SubUser newObj2 = baseHessian2Serialize(obj);
Assert.assertEquals(newObj, newObj2);
}
}
@Test
public void testType() throws IOException {
serializeAndDeserialize(Type.Lower, Type.class);
serializeAndDeserialize(Type.Normal, Type.class);
serializeAndDeserialize(Type.High, Type.class);
}
@Test
public void testHessian2StringShortType() throws IOException {
for (int i = 0; i < 100; i++) {
Hessian2StringShortType obj = new Hessian2StringShortType();
obj.shortSet = new HashSet<>();
obj.stringShortMap = new HashMap<>();
obj.stringByteMap = new HashMap<>();
obj.stringPersonTypeMap = new HashMap<>();
obj.shortSet.add((short) i);
obj.shortSet.add((short) (i * 2));
// shortType.stringShortMap.put(String.valueOf(i), (short) i);
// shortType.stringShortMap.put(String.valueOf(i * 100), (short) (i * 100));
// shortType.stringByteMap.put(String.valueOf(i), (byte) 1);
List<Short> shorts = Arrays.asList((short) 12, (short) 4);
PersonType abc = new PersonType("ABC", 12, 128D, (short) 1, (byte) 2, shorts);
obj.stringPersonTypeMap.put("P_" + i, abc);
Hessian2StringShortType newObj = serializeAndDeserialize(obj, Hessian2StringShortType.class);
Assert.assertEquals(obj, newObj);
Hessian2StringShortType newObj2 = baseHessian2Serialize(obj);
Assert.assertEquals(newObj, newObj2);
}
}
}