/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.ambari.server.controller.logging; import static org.junit.Assert.assertEquals; import java.io.StringReader; import org.codehaus.jackson.map.AnnotationIntrospector; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectReader; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector; import org.junit.Test; public class LogLineResultTest { private static final String TEST_JSON_DATA_SINGLE_ENTRY = "{" + " \"cluster\" : \"clusterone\"," + " \"method\" : \"chooseUnderReplicatedBlocks\"," + " \"level\" : \"INFO\"," + " \"event_count\" : 1," + " \"ip\" : \"192.168.1.1\"," + " \"type\" : \"hdfs_namenode\"," + " \"thread_name\" : \"thread-id-one\"," + " \"seq_num\" : 10584," + " \"path\" : \"/var/log/hadoop/hdfs/hadoop-hdfs-namenode-c6401.ambari.apache.org.log\"," + " \"file\" : \"UnderReplicatedBlocks.java\"," + " \"line_number\" : 394," + " \"host\" : \"c6401.ambari.apache.org\"," + " \"log_message\" : \"chooseUnderReplicatedBlocks selected 2 blocks at priority level 0; Total=2 Reset bookmarks? false\"," + " \"logger_name\" : \"BlockStateChange\"," + " \"id\" : \"9c5562fb-123f-47c8-aaf5-b5e407326c08\"," + " \"message_md5\" : \"-3892769501348410581\"," + " \"logtime\" : 1458148749036," + " \"event_md5\" : \"1458148749036-2417481968206345035\"," + " \"logfile_line_number\" : 2084," + " \"_ttl_\" : \"+7DAYS\"," + " \"_expire_at_\" : 1458753550322," + " \"_version_\" : 1528979784023932928" + " }"; @Test public void testBasicParsing() throws Exception { // setup a reader for the test JSON data StringReader stringReader = new StringReader(TEST_JSON_DATA_SINGLE_ENTRY); // setup the Jackson mapper/reader to read in the data structure ObjectMapper mapper = new ObjectMapper(); AnnotationIntrospector introspector = new JacksonAnnotationIntrospector(); mapper.setAnnotationIntrospector(introspector); mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); ObjectReader logLineResultReader = mapper.reader(LogLineResult.class); LogLineResult result = logLineResultReader.readValue(stringReader); // verify that all fields in this class are parsed as expected assertEquals("Cluster name not parsed properly", "clusterone", result.getClusterName()); assertEquals("Method Name not parsed properly", "chooseUnderReplicatedBlocks", result.getLogMethod()); assertEquals("Log Level not parsed properly", "INFO", result.getLogLevel()); assertEquals("event_count not parsed properly", "1", result.getEventCount()); assertEquals("ip address not parsed properly", "192.168.1.1", result.getIpAddress()); assertEquals("component type not parsed properly", "hdfs_namenode", result.getComponentType()); assertEquals("sequence number not parsed properly", "10584", result.getSequenceNumber()); assertEquals("log file path not parsed properly", "/var/log/hadoop/hdfs/hadoop-hdfs-namenode-c6401.ambari.apache.org.log", result.getLogFilePath()); assertEquals("log src file name not parsed properly", "UnderReplicatedBlocks.java", result.getSourceFile()); assertEquals("log src line number not parsed properly", "394", result.getSourceFileLineNumber()); assertEquals("host name not parsed properly", "c6401.ambari.apache.org", result.getHostName()); assertEquals("log message not parsed properly", "chooseUnderReplicatedBlocks selected 2 blocks at priority level 0; Total=2 Reset bookmarks? false", result.getLogMessage()); assertEquals("logger name not parsed properly", "BlockStateChange", result.getLoggerName()); assertEquals("id not parsed properly", "9c5562fb-123f-47c8-aaf5-b5e407326c08", result.getId()); assertEquals("message MD5 not parsed properly", "-3892769501348410581", result.getMessageMD5()); assertEquals("log time not parsed properly", "1458148749036", result.getLogTime()); assertEquals("event MD5 not parsed properly", "1458148749036-2417481968206345035", result.getEventMD5()); assertEquals("logfile line number not parsed properly", "2084", result.getLogFileLineNumber()); assertEquals("ttl not parsed properly", "+7DAYS", result.getTtl()); assertEquals("expire at not parsed properly", "1458753550322", result.getExpirationTime()); assertEquals("version not parsed properly", "1528979784023932928", result.getVersion()); assertEquals("thread_name not parsed properly", "thread-id-one", result.getThreadName()); } }