/* * Copyright 2014 NAVER Corp. * * 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 com.navercorp.pinpoint.web.view; import com.fasterxml.jackson.databind.ObjectMapper; import com.navercorp.pinpoint.common.trace.HistogramSchema; import com.navercorp.pinpoint.common.trace.ServiceType; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; import org.junit.Assert; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; /** * @author emeroad */ public class HistogramSerializerTest { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final ObjectMapper objectMapper = new ObjectMapper(); @Test public void testSerialize() throws Exception { Histogram original = new Histogram(ServiceType.STAND_ALONE); HistogramSchema schema = original.getHistogramSchema(); original.addCallCount(schema.getFastSlot().getSlotTime(), 1); original.addCallCount(schema.getNormalSlot().getSlotTime(), 2); original.addCallCount(schema.getSlowSlot().getSlotTime(), 3); original.addCallCount(schema.getVerySlowSlot().getSlotTime(), 4); original.addCallCount(schema.getNormalErrorSlot().getSlotTime(), 5); String jacksonJson = objectMapper.writeValueAsString(original); HashMap objectMapperHashMap = objectMapper.readValue(jacksonJson, HashMap.class); logger.debug(jacksonJson); String internalJson = internalJson(original); HashMap hashMap = objectMapper.readValue(internalJson, HashMap.class); Assert.assertEquals(objectMapperHashMap, hashMap); } /** * moved this testcase for testing the old version histogram with manually created json code * @param histogram * @return */ public String internalJson(Histogram histogram) { HistogramSchema histogramSchema = histogram.getHistogramSchema(); final StringBuilder sb = new StringBuilder(128); sb.append("{ "); appendSlotTimeAndCount(sb, histogramSchema.getFastSlot().getSlotName(), histogram.getFastCount()); sb.append(", "); appendSlotTimeAndCount(sb, histogramSchema.getNormalSlot().getSlotName(), histogram.getNormalCount()); sb.append(", "); appendSlotTimeAndCount(sb, histogramSchema.getSlowSlot().getSlotName(), histogram.getSlowCount()); sb.append(", "); // very slow means 0, so should use slow appendSlotTimeAndCount(sb, histogramSchema.getVerySlowSlot().getSlotName(), histogram.getVerySlowCount()); sb.append(", "); appendSlotTimeAndCount(sb, histogramSchema.getErrorSlot().getSlotName(), histogram.getTotalErrorCount()); sb.append(" }"); return sb.toString(); } private void appendSlotTimeAndCount(StringBuilder sb, String slotTimeName, long count) { sb.append('"'); sb.append(slotTimeName); sb.append('"'); sb.append(":"); sb.append(count); } }