base-stats: Add basic test for hdf5 stats
Also rethrow hdf5 exceptions to propagate error message Related JIRA issue: https://gem5.atlassian.net/browse/GEM5-1028 Change-Id: I67badcf261f04cd446d016a4ad3d7393bad9a6ba Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/47740 Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu> Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -253,8 +253,15 @@ Hdf5::appendStat(const Info &info, int rank, hsize_t *dims, const double *data)
|
||||
props.setDeflate(1);
|
||||
|
||||
fspace = H5::DataSpace(rank, dims, max_dims.data());
|
||||
data_set = group.createDataSet(info.name, H5::PredType::NATIVE_DOUBLE,
|
||||
fspace, props);
|
||||
try {
|
||||
data_set = group.createDataSet(info.name,
|
||||
H5::PredType::NATIVE_DOUBLE, fspace, props);
|
||||
} catch (const H5::Exception &e) {
|
||||
std::string err = "Failed creating H5::DataSet " + info.name + "; ";
|
||||
err += e.getDetailMsg() + " in " + e.getFuncName();
|
||||
// Rethrow std exception so that it's passed on to the Python world
|
||||
throw std::runtime_error(err);
|
||||
}
|
||||
|
||||
if (enableDescriptions && !info.desc.empty()) {
|
||||
addMetaData(data_set, "description", info.desc);
|
||||
|
||||
65
tests/gem5/stats/test_hdf5.py
Normal file
65
tests/gem5/stats/test_hdf5.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Copyright (c) 2021 Huawei International
|
||||
# All rights reserved.
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
# not be construed as granting a license to any other intellectual
|
||||
# property including but not limited to intellectual property relating
|
||||
# to a hardware implementation of the functionality of the software
|
||||
# licensed hereunder. You may use the software subject to the license
|
||||
# terms below provided that you ensure that this notice is replicated
|
||||
# unmodified and in its entirety in all distributions of the software,
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met: redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer;
|
||||
# redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution;
|
||||
# neither the name of the copyright holders nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
'''
|
||||
Test file for the hdf5 stats.
|
||||
It just runs an SE simulation with the hdf5 stats and checks that the
|
||||
simulation succeeds and the stats file exists.
|
||||
No specific checks on the stats are performed.
|
||||
'''
|
||||
import re
|
||||
import os
|
||||
from testlib import *
|
||||
|
||||
ok_exit_regex = re.compile(
|
||||
r'Exiting @ tick \d+ because exiting with last active thread context'
|
||||
)
|
||||
|
||||
path = joinpath(config.bin_path, 'test-progs', 'hello', 'bin', 'arm', 'linux')
|
||||
filename = 'hello'
|
||||
url = (config.resource_url + '/test-progs/hello/bin/arm/linux/hello')
|
||||
test_program = DownloadedProgram(url, path, filename)
|
||||
|
||||
stdout_verifier = verifier.MatchRegex(ok_exit_regex)
|
||||
h5_verifier = verifier.CheckH5StatsExist()
|
||||
gem5_verify_config(
|
||||
name='hdf5_test',
|
||||
verifiers=[stdout_verifier, h5_verifier],
|
||||
fixtures=(test_program,),
|
||||
config=os.path.join(config.base_dir, 'configs', 'example','se.py'),
|
||||
config_args=['--cmd', joinpath(test_program.path, filename)],
|
||||
gem5_args=['--stats-file=h5://stats.h5'],
|
||||
valid_isas=(constants.arm_tag,)
|
||||
)
|
||||
@@ -11,6 +11,7 @@
|
||||
# modified or unmodified, in source code or in binary form.
|
||||
#
|
||||
# Copyright (c) 2017 Mark D. Hill and David A. Wood
|
||||
# Copyright (c) 2021 Huawei International
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
@@ -40,6 +41,7 @@
|
||||
Built in test cases that verify particular details about a gem5 run.
|
||||
'''
|
||||
import re
|
||||
import os
|
||||
|
||||
from testlib import test_util
|
||||
from testlib.configuration import constants
|
||||
@@ -59,6 +61,17 @@ class Verifier(object):
|
||||
return test_util.TestFunction(self._test,
|
||||
name=name, fixtures=self.fixtures)
|
||||
|
||||
class CheckH5StatsExist(Verifier):
|
||||
def __init__(self, stats_file='stats.h5'):
|
||||
super(CheckH5StatsExist, self).__init__()
|
||||
self.stats_file = stats_file
|
||||
|
||||
def test(self, params):
|
||||
tempdir = params.fixtures[constants.tempdir_fixture_name].path
|
||||
h5_file = joinpath(tempdir, self.stats_file)
|
||||
if not os.path.isfile(h5_file):
|
||||
test_util.fail('Could not find h5 stats file %s', h5_file)
|
||||
|
||||
class MatchGoldStandard(Verifier):
|
||||
'''
|
||||
Compares a standard output to the test output and passes if they match,
|
||||
|
||||
Reference in New Issue
Block a user