/*
* Copyright (C) 2011 Red Hat, Inc. and/or its affiliates.
*
* 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 org.jboss.errai.bus.server;
import org.jboss.errai.common.client.util.TimeUnit;
import org.jboss.errai.marshalling.server.MappingContextSingleton;
import org.jboss.errai.marshalling.server.ServerMarshalling;
import org.junit.Assert;
import org.junit.Test;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
/**
* @author Mike Brock
*/
public class MarshallingPerformanceTest {
private static final int TEST_ITERATIONS = 100000;
@Test
public void testMarshall() throws IOException {
// ensure the marshalling system has been setup.
MappingContextSingleton.get();
Map payload = null;
long time = System.nanoTime();
long encTime = 0;
long decTime = 0;
for (int i = 0; i < TEST_ITERATIONS; i++) {
long eTime = System.nanoTime();
StringWriter writer = new StringWriter();
Map enc = new HashMap();
enc.put("CommandType", "ConnectToQueue");
enc.put("ToSubject", "ServerBus");
enc.put("Extra", "Hello There!");
ServerMarshalling.toJSON(writer, enc);
writer.flush();
encTime += (System.nanoTime() - eTime);
long dTime = System.nanoTime();
payload = (Map) ServerMarshalling.fromJSON(writer.toString());
decTime += (System.nanoTime() - dTime);
}
time = System.nanoTime() - time;
long millis = TimeUnit.NANOSECONDS.toMillis(time);
double throughputPerSecond = (double) TEST_ITERATIONS / ((double) millis / 1000d);
long encodingMillis = TimeUnit.NANOSECONDS.toMillis(encTime);
long decodingMillis = TimeUnit.NANOSECONDS.toMillis(decTime);
double encodingPctTm = ((double) encodingMillis / (double) millis) * 100;
double decodingPctTm = ((double) decodingMillis / (double) millis) * 100;
System.out.println("Finished: " + TEST_ITERATIONS + " iterations in : " + TimeUnit.NANOSECONDS.toMillis(time));
System.out.println(" Round-trip Throughput: " + throughputPerSecond + " per sec.");
System.out.println(" Encoding Time: " + encodingMillis + "ms (" + encodingPctTm + "%)");
System.out.println(" Decoding Time: " + decodingMillis + "ms (" + decodingPctTm + "%)");
Assert.assertNotNull(payload);
Assert.assertFalse(payload.isEmpty());
Assert.assertEquals("ConnectToQueue", payload.get("CommandType"));
Assert.assertEquals("ServerBus", payload.get("ToSubject"));
Assert.assertEquals("Hello There!", payload.get("Extra"));
}
}