blob: 91fcf6806180792370f7b6154cf292b750aaf3cb [file] [log] [blame]
/*******************************************************************************
* 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 BackupQuery(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>");
}
}