content: /*
   * 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.junit.Test;
  
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.databind.AnnotationIntrospector;
  import com.fasterxml.jackson.databind.ObjectMapper;
  import com.fasterxml.jackson.databind.ObjectReader;
  import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
  
  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.setSerializationInclusion(JsonInclude.Include.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());
  
    }
  
  
  }
  