package com.ctriposs.baiji; import com.ctriposs.baiji.specific.*; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.io.*; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.concurrent.CountDownLatch; public class JsonSerializerPerfTestTwo { private static JsonSerializer serializer = new JsonSerializer(); @Test public void testMultiThreadSerialize() throws Exception { final int threadNumber = 10; final CountDownLatch countDownLatch = new CountDownLatch(threadNumber); for (int i = 0; i < threadNumber; i++) { Serializer ser = new Serializer(countDownLatch); Thread thread = new Thread(ser); thread.start(); } try { countDownLatch.await(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } class Serializer implements Runnable { private CountDownLatch cdl; public Serializer(CountDownLatch cdl) { this.cdl = cdl; } @Override public void run() { long tid = Thread.currentThread().getId(); int loop = 10; for (int i = 0; i < loop; i++) { try (OutputStream os = new ByteArrayOutputStream()) { TestSerializerSample expected = createSample(tid + i); serializer.serialize(expected, os); InputStream is = new ByteArrayInputStream(((ByteArrayOutputStream) os).toByteArray()); TestSerializerSample actual = serializer.deserialize(TestSerializerSample.class, is); checkStatus(expected, actual); Assert.assertEquals((long)actual.bigint1, tid + i); } catch (Throwable e) { e.printStackTrace(); } } cdl.countDown(); } } private void checkStatus(TestSerializerSample expected, TestSerializerSample actual) { Assert.assertEquals(expected.bigint1, actual.bigint1); Assert.assertEquals(expected.boolean1, actual.boolean1); Assert.assertEquals(expected.double1, actual.double1); Assert.assertEquals(expected.enum1, actual.enum1); Assert.assertEquals(expected.int1, actual.int1); Assert.assertEquals(expected.string1, actual.string1); Assert.assertEquals(expected.list1.size(), actual.list1.size()); Assert.assertEquals(expected.map1.size(), actual.map1.size()); Assert.assertNull(expected.nullableint); Assert.assertEquals(expected.list1, actual.list1); Assert.assertEquals(expected.map1, actual.map1); Assert.assertArrayEquals(expected.bytes1, actual.bytes1); Assert.assertEquals(expected.record, actual.record); Record2 expectedRecord2 = expected.container1.getRecord2list().get(0); Record2 actualRecord2 = actual.container1.getRecord2list().get(0); Assert.assertEquals(expectedRecord2.bigint2, actualRecord2.bigint2); Assert.assertEquals(expectedRecord2.enum2, actualRecord2.enum2); Assert.assertEquals(expectedRecord2.map2, actualRecord2.map2); } private TestSerializerSample createSample(long id) { TestSerializerSample sample = new TestSerializerSample(); sample.bigint1 = id; sample.boolean1 = false; sample.double1 = 2.099328; sample.enum1 = Enum1Values.GREEN; sample.int1 = 2000; sample.string1 = "testSerialize"; sample.bytes1 = "testBytes".getBytes(); sample.list1 = Arrays.asList("a", "b", "c"); Map<String, Integer> map = new HashMap<>(); map.put("1a", 1); map.put("2b", 2); map.put("3c", 3); sample.map1 = map; sample.record = new Record(1, true, "testRecord"); Record2 record2 = new Record2(); record2.bigint2 = 2048L; record2.enum2 = Enum2Values.PLANE; Map<String, Record> recordMap = new HashMap<>(); recordMap.put("m1", new Record(1, true, "testRecord")); recordMap.put("m2", new Record(2, true, "testRecord")); record2.map2 = recordMap; sample.container1 = new Record2Container(Arrays.asList(record2)); return sample; } }