001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    
018    package org.apache.commons.monitoring.reporting;
019    
020    import org.apache.commons.monitoring.Role;
021    import org.apache.commons.monitoring.counters.Counter;
022    import org.apache.commons.monitoring.reporting.web.handler.api.Template;
023    import org.apache.commons.monitoring.reporting.web.handler.api.TemplateHelper;
024    import org.apache.commons.monitoring.reporting.web.plugin.report.format.CSVFormat;
025    import org.apache.commons.monitoring.reporting.web.plugin.report.format.Format;
026    import org.apache.commons.monitoring.reporting.web.template.Templates;
027    import org.apache.commons.monitoring.repositories.Repository;
028    import org.junit.AfterClass;
029    import org.junit.BeforeClass;
030    import org.junit.Test;
031    
032    import java.io.PrintWriter;
033    import java.io.StringWriter;
034    import java.util.Collections;
035    
036    import static org.junit.Assert.assertEquals;
037    
038    public class FormatsTest {
039        @BeforeClass
040        public static void setup() {
041            Repository.INSTANCE.clear();
042            Templates.init("", "");
043    
044            final Counter counter = Repository.INSTANCE.getCounter(new Counter.Key(Role.FAILURES, "RendererTest"));
045            counter.updateConcurrency(1);
046            counter.add(1.);
047        }
048    
049        @AfterClass
050        public static void clear() {
051            Repository.INSTANCE.clear();
052        }
053    
054        @Test
055        public void renderToXML() throws Exception {
056            final StringWriter out = new StringWriter();
057            final TemplateHelper helper = new TemplateHelper(new PrintWriter(out), Collections.<String, Object>emptyMap());
058            final Template template = Format.Defaults.XML.render(Collections.<String, Object>emptyMap());
059            helper.renderPlain(template.getTemplate(), template.getUserParams());
060    
061            assertEquals("<?xml version=\"1.0\"?> <repository> " +
062                "<counter name=\"RendererTest\" role=\"failures\" unit=\"u\" Hits=\"1.0\" Max=\"1.0\" Mean=\"1.0\" Min=\"1.0\" StandardDeviation=\"0.0\" Sum=\"1.0\" " +
063                "SumOfLogs=\"0.0\" SumOfSquares=\"0.0\" Variance=\"0.0\" GeometricMean=\"1.0\" Value=\"1.0\" Concurrency=\"0.0\" MaxConcurrency=\"1.0\" />" +
064                " </repository>", inline(out));
065        }
066    
067        @Test
068        public void renderToJSON() throws Exception {
069            final StringWriter out = new StringWriter();
070            final TemplateHelper helper = new TemplateHelper(new PrintWriter(out), Collections.<String, Object>emptyMap());
071            final Template template = Format.Defaults.JSON.render(Collections.<String, Object>emptyMap());
072            helper.renderPlain(template.getTemplate(), template.getUserParams());
073    
074            assertEquals("{\"counters\":[" +
075                " {\"name\":\"RendererTest\", \"role\":\"failures\",\"unit\":\"u\",\"Hits\":\"1.0\",\"Max\":\"1.0\",\"Mean\":\"1.0\",\"Min\":\"1.0\"," +
076                "\"StandardDeviation\":\"0.0\",\"Sum\":\"1.0\",\"SumOfLogs\":\"0.0\",\"SumOfSquares\":\"0.0\",\"Variance\":\"0.0\"," +
077                "\"GeometricMean\":\"1.0\",\"Value\":\"1.0\",\"Concurrency\":\"0.0\",\"MaxConcurrency\":\"1.0\"} ]}", inline(out));
078        }
079    
080        @Test
081        public void renderToCSV() throws Exception {
082            final StringWriter out = new StringWriter();
083            final TemplateHelper helper = new TemplateHelper(new PrintWriter(out), Collections.<String, Object>emptyMap());
084            final Template template = Format.Defaults.CSV.render(Collections.<String, Object>emptyMap());
085            helper.renderPlain(template.getTemplate(), template.getUserParams());
086    
087            assertEquals(CSVFormat.HEADER +
088                "RendererTest;failures (u);1.0;1.0;1.0;1.0;0.0;1.0;0.0;0.0;0.0;1.0;1.0;0.0;1.0\n",
089                out.toString());
090        }
091    
092        private static String inline(StringWriter out) {
093            return out.toString().replace("\r\n", " ").replace("\n", " ").replaceAll(" +", " ").replace("\t", "").trim();
094        }
095    }