Source code for gwsumm.plot.guardian.tests.test_main

# -*- coding: utf-8 -*-
# Copyright (C) Alex Urban (2020)
#
# This file is part of GWSumm.
#
# GWSumm 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, either version 3 of the License, or
# (at your option) any later version.
#
# GWSumm is distributed in the hope that it will 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 GWSumm.  If not, see <http://www.gnu.org/licenses/>.

"""Tests for the `gwsumm.plot.guardian` command-line interface
"""

import os
import shutil

from gwpy.timeseries import (
    TimeSeries,
    TimeSeriesList,
)

from .... import globalv
from ....archive import write_data_archive
from .. import __main__ as guardian_cli

__author__ = 'Alex Urban <alexander.urban@ligo.org>'

# -- test configuration

CONFIG = """
[tab-ISC_LOCK]
type = guardian
node = ISC_LOCK
name = %(node)s
; node states
600 = Low noise
"""

# -- test data

SUFFICES = [
    "STATE_N",
    "REQUEST_N",
    "NOMINAL_N",
    "OK",
    "MODE",
    "OP",
]
DATA = {
    key: TimeSeriesList(
        TimeSeries([600] * 3600 * 16, sample_rate=16, name=key, channel=key)
    ) for key in ["L1:GRD-ISC_LOCK_{}".format(suff) for suff in SUFFICES]
}


# -- utils --------------------------------------------------------------------

def _get_inputs(workdir):
    """Prepare, and return paths to, input data products
    """
    # set global timeseries data
    globalv.DATA = DATA
    # get path to data files
    ini = os.path.join(workdir, "config.ini")
    archive = os.path.abspath(os.path.join(workdir, "archive.h5"))
    # write to data files
    with open(ini, 'w') as f:
        f.write(CONFIG)
    write_data_archive(archive)
    # reset global data and return
    globalv.DATA = {}
    return (ini, archive)


# -- cli tests ----------------------------------------------------------------

[docs] def test_main(tmpdir, caplog): outdir = str(tmpdir) plot = os.path.join(outdir, "guardian.png") (ini, archive) = _get_inputs(outdir) args = [ 'ISC_LOCK', '0', '3600', ini, '--plot-params', 'title=Test figure', '--output-file', plot, '--verbose', '--archive', archive, ] # test output guardian_cli.main(args) assert os.path.exists(plot) assert len(os.listdir(outdir)) == 3 # 2 inputs, 1 output assert 'Read data archive from {}'.format(archive) in caplog.text assert 'Processing:' in caplog.text assert 'Plot saved to {}'.format(plot) in caplog.text assert 'Archive recorded as {}'.format(archive) in caplog.text # clean up shutil.rmtree(outdir, ignore_errors=True)