#!/usr/bin/env bash
#
# Copyright (C) 2009 Red Hat, Inc.
# Copyright (c) 2000-2001 Silicon Graphics, Inc.  All Rights Reserved.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it would be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#
# standard filters
#

_filter_date()
{
    $SED -re 's/[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/yyyy-mm-dd hh:mm:ss/'
}

_filter_vmstate_size()
{
    $SED -r -e 's/[0-9. ]{5} [KMGT]iB/     SIZE/' \
            -e 's/[0-9. ]{5} B/   SIZE/'
}

_filter_generated_node_ids()
{
    $SED -re 's/\#block[0-9]{3,}/NODE_NAME/'
}

_filter_qom_path()
{
    $SED -e 's#\(Attached to: *\) /.*#\1 PATH#'
}

# replace occurrences of the actual TEST_DIR value with TEST_DIR
_filter_testdir()
{
    $SED -e "s#$TEST_DIR/#TEST_DIR/#g" \
         -e "s#$SOCK_DIR/#SOCK_DIR/#g"
}

# replace occurrences of the actual IMGFMT value with IMGFMT
_filter_imgfmt()
{
    $SED -e "s#$IMGFMT#IMGFMT#g"
}

# Replace error message when the format is not supported and delete
# the output lines after the first one
_filter_qemu_img_check()
{
    $SED -e '/allocated.*fragmented.*compressed clusters/d' \
        -e 's/qemu-img: This image format does not support checks/No errors were found on the image./' \
        -e '/Image end offset: [0-9]\+/d'
}

# Removes \r from messages
_filter_win32()
{
    $SED -e 's/\r//g'
}

# sanitize qemu-io output
_filter_qemu_io()
{
    _filter_win32 | $SED -e "s/[0-9]* ops\; [0-9/:. sec]* ([0-9/.inf]* [EPTGMKiBbytes]*\/sec and [0-9/.inf]* ops\/sec)/X ops\; XX:XX:XX.X (XXX YYY\/sec and XXX ops\/sec)/" \
        -e "s/: line [0-9][0-9]*:  *[0-9][0-9]*\( Aborted\| Killed\)/:\1/" \
        -e "s/qemu-io> //g"
}

# replace occurrences of QEMU_PROG with "qemu"
_filter_qemu()
{
    $SED -e "s#\\(^\\|(qemu) \\)$(basename $QEMU_PROG):#\1QEMU_PROG:#" \
        -e 's#^QEMU [0-9]\+\.[0-9]\+\.[0-9]\+ monitor#QEMU X.Y.Z monitor#' \
        -e $'s#\r##' # QEMU monitor uses \r\n line endings
}

# replace problematic QMP output like timestamps
_filter_qmp()
{
    _filter_win32 | \
    $SED -e 's#\("\(micro\)\?seconds": \)[0-9]\+#\1 TIMESTAMP#g' \
        -e 's#^{"QMP":.*}$#QMP_VERSION#' \
        -e '/^    "QMP": {\s*$/, /^    }\s*$/ c\' \
        -e '    QMP_VERSION'
}

# readline makes HMP command strings so long that git complains
_filter_hmp()
{
    $SED -e $'s/^\\((qemu) \\)\\?.*\e\\[D/\\1/g' \
        -e $'s/\e\\[K//g'
}

# replace block job offset
_filter_block_job_offset()
{
    $SED -e 's/, "offset": [0-9]\+,/, "offset": OFFSET,/'
}

# replace block job len
_filter_block_job_len()
{
    $SED -e 's/, "len": [0-9]\+,/, "len": LEN,/g'
}

# replace actual image size (depends on the host filesystem)
_filter_actual_image_size()
{
    $SED -s 's/\("actual-size":\s*\)[0-9]\+/\1SIZE/g'
}

# replace driver-specific options in the "Formatting..." line
_filter_img_create()
{
    data_file_filter=()
    if data_file=$(_get_data_file "$TEST_IMG"); then
        data_file_filter=(-e "s# data_file=$data_file##")
    fi

    $SED "${data_file_filter[@]}" \
        -e "s#$REMOTE_TEST_DIR#TEST_DIR#g" \
        -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
        -e "s#$TEST_DIR#TEST_DIR#g" \
        -e "s#$SOCK_DIR#SOCK_DIR#g" \
        -e "s#$IMGFMT#IMGFMT#g" \
        -e 's#nbd:127.0.0.1:[0-9]\\+#TEST_DIR/t.IMGFMT#g' \
        -e 's#nbd+unix:///\??socket=SOCK_DIR/nbd#TEST_DIR/t.IMGFMT#g' \
        -e "s# encryption=off##g" \
        -e "s# cluster_size=[0-9]\\+##g" \
        -e "s# table_size=[0-9]\\+##g" \
        -e "s# compat=[^ ]*##g" \
        -e "s# compat6=\\(on\\|off\\)##g" \
        -e "s# static=\\(on\\|off\\)##g" \
        -e "s# zeroed_grain=\\(on\\|off\\)##g" \
        -e "s# subformat=[^ ]*##g" \
        -e "s# adapter_type=[^ ]*##g" \
        -e "s# hwversion=[^ ]*##g" \
        -e "s# lazy_refcounts=\\(on\\|off\\)##g" \
        -e "s# block_size=[0-9]\\+##g" \
        -e "s# block_state_zero=\\(on\\|off\\)##g" \
        -e "s# log_size=[0-9]\\+##g" \
        -e "s# refcount_bits=[0-9]\\+##g" \
        -e "s# key-secret=[a-zA-Z0-9]\\+##g" \
        -e "s# iter-time=[0-9]\\+##g" \
        -e "s# force_size=\\(on\\|off\\)##g"
}

_filter_img_info()
{
    if [[ "$1" == "--format-specific" ]]; then
        local format_specific=1
        shift
    else
        local format_specific=0
    fi

    discard=0
    regex_json_spec_start='^ *"format-specific": \{'
    $SED -e "s#$REMOTE_TEST_DIR#TEST_DIR#g" \
        -e "s#$IMGPROTO:$TEST_DIR#TEST_DIR#g" \
        -e "s#$TEST_DIR#TEST_DIR#g" \
        -e "s#$SOCK_DIR#SOCK_DIR#g" \
        -e "s#$IMGFMT#IMGFMT#g" \
        -e 's#nbd://127.0.0.1:[0-9]\\+$#TEST_DIR/t.IMGFMT#g' \
        -e 's#nbd+unix:///\??socket=SOCK_DIR/nbd#TEST_DIR/t.IMGFMT#g' \
        -e 's#json.*vdisk-id.*vxhs"}}#TEST_DIR/t.IMGFMT#' \
        -e "/encrypted: yes/d" \
        -e "/cluster_size: [0-9]\\+/d" \
        -e "/table_size: [0-9]\\+/d" \
        -e "/compat: '[^']*'/d" \
        -e "/compat6: \\(on\\|off\\)/d" \
        -e "s/cid: [0-9]\+/cid: XXXXXXXXXX/" \
        -e "/static: \\(on\\|off\\)/d" \
        -e "/zeroed_grain: \\(on\\|off\\)/d" \
        -e "/subformat: '[^']*'/d" \
        -e "/adapter_type: '[^']*'/d" \
        -e "/hwversion: '[^']*'/d" \
        -e "/lazy_refcounts: \\(on\\|off\\)/d" \
        -e "/block_size: [0-9]\\+/d" \
        -e "/block_state_zero: \\(on\\|off\\)/d" \
        -e "/log_size: [0-9]\\+/d" \
        -e "s/iters: [0-9]\\+/iters: 1024/" \
        -e "s/uuid: [-a-f0-9]\\+/uuid: 00000000-0000-0000-0000-000000000000/" | \
    while IFS='' read -r line; do
        if [[ $format_specific == 1 ]]; then
            discard=0
        elif [[ $line == "Format specific information:" ]]; then
            discard=1
        elif [[ $line =~ $regex_json_spec_start ]]; then
            discard=2
            regex_json_spec_end="^${line%%[^ ]*}\\},? *$"
        fi
        if [[ $discard == 0 ]]; then
            echo "$line"
        elif [[ $discard == 1 && ! $line ]]; then
            echo
            discard=0
        elif [[ $discard == 2 && $line =~ $regex_json_spec_end ]]; then
            discard=0
        fi
    done
}

# filter out offsets and file names from qemu-img map; good for both
# human and json output
_filter_qemu_img_map()
{
    # Assuming the data_file value in $IMGOPTS contains a '$TEST_IMG',
    # create a filter that replaces the data file name by $TEST_IMG.
    # Example:
    #   In $IMGOPTS: 'data_file=$TEST_IMG.data_file'
    #   Then data_file_pattern == '\(.*\).data_file'
    #   And  data_file_filter  == -e 's#\(.*\).data_file#\1#
    data_file_filter=()
    if data_file_pattern=$(_get_data_file '\\(.*\\)'); then
        data_file_filter=(-e "s#$data_file_pattern#\\1#")
    fi

    $SED -e 's/\([0-9a-fx]* *[0-9a-fx]* *\)[0-9a-fx]* */\1/g' \
        -e 's/"offset": [0-9]\+/"offset": OFFSET/g' \
        -e 's/Mapped to *//' \
        "${data_file_filter[@]}" \
        | _filter_testdir | _filter_imgfmt
}

_filter_nbd()
{
    # nbd.c error messages contain function names and line numbers that are
    # prone to change.  Message ordering depends on timing between send and
    # receive callbacks sometimes, making them unreliable.
    #
    # Filter out the TCP port number since this changes between runs.
    $SED -e '/nbd\/.*\.c:/d' \
        -e 's#127\.0\.0\.1:[0-9]*#127.0.0.1:PORT#g' \
        -e "s#?socket=$SOCK_DIR#?socket=SOCK_DIR#g" \
        -e 's#\(foo\|PORT/\?\|.sock\): Failed to .*$#\1#'
}

_filter_qmp_empty_return()
{
    grep -v '{"return": {}}'
}

_filter_json_filename()
{
    $PYTHON -c 'import sys
result, *fnames = sys.stdin.read().split("json:{")
depth = 0
for fname in fnames:
    depth += 1 # For the opening brace in the split separator
    for chr_i, chr in enumerate(fname):
        if chr == "{":
            depth += 1
        elif chr == "}":
            depth -= 1
            if depth == 0:
                break

    # json:{} filenames may be nested; filter out everything from
    # inside the outermost one
    if depth == 0:
        chr_i += 1 # First character past the filename
        result += "json:{ /* filtered */ }" + fname[chr_i:]

sys.stdout.write(result)'
}

# make sure this script returns success
true
