/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.core.rest.admin; import static org.junit.Assert.assertEquals; import java.text.MessageFormat; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; import java.util.TreeSet; import org.eclipse.skalli.commons.FormatUtils; import org.eclipse.skalli.commons.Statistics.SearchInfo; import org.eclipse.skalli.commons.Statistics.UsageInfo; import org.eclipse.skalli.commons.Statistics.UserInfo; import org.eclipse.skalli.model.Project; import org.eclipse.skalli.testutil.StringBufferHierarchicalStreamWriter; import org.eclipse.skalli.testutil.TestUUIDs; import org.junit.Before; import org.junit.Test; @SuppressWarnings("nls") public class StatisticsConverterTest { private StringBufferHierarchicalStreamWriter writer; private StatisticsConverter converter; @Before public void setup() throws Exception { writer = new StringBufferHierarchicalStreamWriter(); converter = new StatisticsConverter("http://localhost", new StatisticsQuery(new HashMap<String,String>())); } @Test public void testWriteValue() throws Exception { writer.startNode("tag"); converter.writeValue(writer, "foobar"); writer.endNode(); assertWriter(writer, "<tag>foobar</tag>"); } @Test public void testWriteNullValue() throws Exception { writer.startNode("tag"); converter.writeValue(writer, null); writer.endNode(); assertWriter(writer, "<tag></tag>"); } @Test public void testWriteTotalCount() throws Exception { writer.startNode("tag"); Map<String,Long> entries = new HashMap<String,Long>(); entries.put("a", 1L); entries.put("b", 2L); entries.put("c", 3L); converter.writeTotalCount(writer, entries); converter.writeValue(writer, null); writer.endNode(); assertWriter(writer, "<tag totalCount=\"6\"></tag>"); } @Test public void testWriteUniqueCount() throws Exception { writer.startNode("tag"); Map<String,Long> entries = new HashMap<String,Long>(); entries.put("a", 1L); entries.put("b", 2L); entries.put("c", 3L); converter.writeUniqueCount(writer, entries); converter.writeValue(writer, null); writer.endNode(); assertWriter(writer, "<tag uniqueCount=\"3\"></tag>"); } @Test public void testWriteUsageInfoEntry() throws Exception { UsageInfo info = new UsageInfo("hugo", "/projects", "/referer", 4711L); long timestamp = info.getTimestamp(); converter.writeInfoEntry(writer, info); assertWriter(writer, MessageFormat.format( "<request date=\"{0}\" timestamp=\"{1}\" user=\"{2}\" referer=\"/referer\">/projects</request>", FormatUtils.formatUTCWithMillis(timestamp), Long.toString(timestamp), info.getUserHash())); } @Test public void testWriteSearchInfoEntry() throws Exception { SearchInfo info = new SearchInfo("hugo", "query", 42, 123L, 4711L); long timestamp = info.getTimestamp(); converter.writeInfoEntry(writer, info); assertWriter(writer, MessageFormat.format( "<search date=\"{0}\" timestamp=\"{1}\" user=\"{2}\" resultCount=\"42\" duration=\"123\">query</search>", FormatUtils.formatUTCWithMillis(timestamp), Long.toString(timestamp), info.getUserHash())); } @Test public void testWriteRequestInfos() throws Exception { UsageInfo info1 = new UsageInfo("foo", "/project1", "/referer1", 1L); UsageInfo info2 = new UsageInfo("bar", "/project2", "/referer2", 2L); TreeSet<UsageInfo> set = new TreeSet<UsageInfo>(); set.add(info1); set.add(info2); long timestamp1 = info1.getTimestamp(); long timestamp2 = info2.getTimestamp(); converter.writeRequestInfos(writer, set, timestamp1, timestamp2); assertWriter(writer, MessageFormat.format( "<request date=\"{0}\" timestamp=\"{1}\" user=\"{2}\" referer=\"/referer1\">/project1</request>\n" + "<request date=\"{3}\" timestamp=\"{4}\" user=\"{5}\" referer=\"/referer2\">/project2</request>", FormatUtils.formatUTCWithMillis(timestamp1), Long.toString(timestamp1), info1.getUserHash(), FormatUtils.formatUTCWithMillis(timestamp2), Long.toString(timestamp2), info2.getUserHash())); } @Test public void testWriteUserInfoEntry() throws Exception { UserInfo info = new UserInfo("hugo", "department", "location", 4711L); long timestamp = info.getTimestamp(); converter.writeInfoEntry(writer, info); assertWriter(writer, MessageFormat.format( "<user date=\"{0}\" timestamp=\"{1}\" department=\"department\" location=\"location\">{2}</user>", FormatUtils.formatUTCWithMillis(timestamp), Long.toString(timestamp), info.getUserHash())); } @Test public void testWriteProjectInfo() throws Exception { Project project = new Project(); project.setUuid(TestUUIDs.TEST_UUIDS[0]); long now = System.currentTimeMillis(); project.setRegistered(now); project.setProjectId("testproject"); project.setName("Test Project"); converter.writeProjectInfo(writer, project, 4711L); assertWriter(writer, MessageFormat.format( "<project date=\"{0}\" timestamp=\"{1}\">\n" + " <uuid>{2}</uuid>\n" + " <id>testproject</id>\n" + " <name>Test Project</name>\n" + " <link rel=\"project\" href=\"http://localhost/api/projects/{2}\"/>\n" + " <link rel=\"browse\" href=\"http://localhost/projects/testproject\"/>\n" + "</project>", FormatUtils.formatUTCWithMillis(4711L), Long.toString(4711L), TestUUIDs.TEST_UUIDS[0].toString())); } private void assertWriter(StringBufferHierarchicalStreamWriter writer, String expected) { assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + expected, writer.toString()); } @Test public void testWriteAverageResponseTimes() throws Exception { TreeMap<String,Long> map = new TreeMap<String,Long>(); map.put("/project2", 1234L); map.put("/project1", 5678L); converter.writeAverageResponseTimes(writer, map); assertWriter(writer, "<request avgResponseTime=\"5678\">/project1</request>\n" + "<request avgResponseTime=\"1234\">/project2</request>"); } @Test public void testWriteRequestCounts() throws Exception { TreeMap<String,Long> requests = new TreeMap<String,Long>(); requests.put("/project2", 2L); requests.put("/project1", 1L); TreeMap<String,Long> avgResponseTimes = new TreeMap<String,Long>(); avgResponseTimes.put("/project2", 1234L); avgResponseTimes.put("/project1", 5678L); converter.writeRequestCounts(writer, requests, avgResponseTimes); assertWriter(writer, "<request count=\"1\" avgResponseTime=\"5678\">/project1</request>\n" + "<request count=\"2\" avgResponseTime=\"1234\">/project2</request>"); } @Test public void testWriteCounts() throws Exception { TreeMap<String,Long> entries = new TreeMap<String,Long>(); entries.put("project2", 2L); entries.put("project1", 1L); converter.writeCounts(writer, "foobar", entries); assertWriter(writer, "<foobar count=\"1\">project1</foobar>\n" + "<foobar count=\"2\">project2</foobar>"); } }