# Copyright 2025 Google LLC
#
# Licensed 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.

#/usr/bin/env python
"""
Tests for pebble.loghashing.dehashing
"""
LOOKUP_DICT = {"13108": "activity.c:activity tracking started",
               "45803": "ispp.c:Start Authentication Process (%d) %s"}

from pebble.loghashing.dehashing import (dehash_line, parse_line, parse_support_line, parse_message,
                                         dehash_str, parse_args)

def test_dehash_file():
    """
    Test for dehash_file()
    """
    pass

def test_dehash_line():
    """
    Test for dehash_line()
    """
    # Console Line - No arguments
    assert ("D A 21:35:14.375 activity.c:804> activity tracking started" ==
            dehash_line("D A 21:35:14.375 :804> LH:3334", LOOKUP_DICT))

    # Console Line - Arguments
    assert ("D A 21:35:14.375 ispp.c:872> Start Authentication Process (2) Success" ==
            dehash_line("D A 21:35:14.375 :872> LH:b2eb 2 `Success`", LOOKUP_DICT))

    # Support Line - No arguments
    assert ("2015-09-05 02:16:16:000GMT activity.c:804> activity tracking started" ==
            dehash_line("2015-09-05 02:16:16:000GMT :804 LH:3334", LOOKUP_DICT))

    # Support Line - Arguments
    assert ("2015-09-05 02:16:19:000GMT ispp.c:872> Start Authentication Process (2) Success" ==
            dehash_line("2015-09-05 02:16:19:000GMT :872 LH:b2eb 2 `Success`", LOOKUP_DICT))

def test_parse_line():
    """
    Test for parse_line()
    """
    # No arguments
    assert ("D A 21:35:14.375 activity.c:804> activity tracking started" ==
            parse_line("D A 21:35:14.375 :804> LH:3334", LOOKUP_DICT))

    # Arguments
    assert ("D A 21:35:14.375 ispp.c:872> Start Authentication Process (2) Success" ==
            parse_line("D A 21:35:14.375 :872> LH:b2eb 2 `Success`", LOOKUP_DICT))

def test_parse_support_line():
    """
    Test for parse_support_line()
    """
    # No arguments
    assert ("2015-09-05 02:16:16:000GMT activity.c:804> activity tracking started" ==
            parse_support_line("2015-09-05 02:16:16:000GMT :804 LH:3334", LOOKUP_DICT))

    # Arguments
    assert ("2015-09-05 02:16:19:000GMT ispp.c:872> Start Authentication Process (2) Success" ==
            parse_support_line("2015-09-05 02:16:19:000GMT :872 LH:b2eb 2 `Success`", LOOKUP_DICT))

def test_parse_message():
    """
    Test for parse_message()
    """
    # Console Line - No arguments
    assert ({'msg': 'activity tracking started', 'line': '804', 'file': 'activity.c'} ==
            parse_message(":804> LH:3334", LOOKUP_DICT))

    # Console Line - Arguments
    assert ({'msg': 'Start Authentication Process (2) Success', 'line': '872', 'file': 'ispp.c'} ==
            parse_message(":872> LH:b2eb 2 `Success`", LOOKUP_DICT))

    # Support Line - No arguments
    assert ({'msg': 'activity tracking started', 'line': '804', 'file': 'activity.c'} ==
            parse_message(":804 LH:3334", LOOKUP_DICT))

    # Support Line - Arguments
    assert ({'msg': 'Start Authentication Process (2) Success', 'line': '872', 'file': 'ispp.c'} ==
            parse_message(":872 LH:b2eb 2 `Success`", LOOKUP_DICT))

def test_dehash_str():
    """
    Test for dehash_str()
    """
    # No arguments
    assert ("activity.c:activity tracking started" ==
            dehash_str("3334", LOOKUP_DICT))

    # Arguments
    assert ("ispp.c:Start Authentication Process (%d) %s" ==
            dehash_str("b2eb", LOOKUP_DICT))

def test_parse_args():
    """
    Test for parse_args()
    """
    # No `` delimted strings
    assert ["foo", "bar", "baz"] == parse_args("foo bar baz")

    # `` delimited strings
    assert ["foo", "bar baz"] == parse_args("foo `bar baz`")
