Skip to content

Commit

Permalink
Add tests for #8484
Browse files Browse the repository at this point in the history
m
  • Loading branch information
jmarrec committed Mar 1, 2021
1 parent ad0249b commit 6572493
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 0 deletions.
6 changes: 6 additions & 0 deletions src/EnergyPlus/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1026,6 +1026,12 @@ if(BUILD_TESTING)
COMMAND "${PYTHON_EXECUTABLE}" -m unittest "${API_TEST_TARGET_DIR}/test_DataTransferTypes.py"
WORKING_DIRECTORY "${API_TEST_TARGET_DIR}")

configure_file("${PROJECT_SOURCE_DIR}/tst/EnergyPlus/api/test_OutputFiles.py" "${API_TEST_TARGET_DIR}/test_OutputFiles.py" @ONLY)
add_test(
NAME "API.test_OutputFiles"
COMMAND "${PYTHON_EXECUTABLE}" -m unittest "${API_TEST_TARGET_DIR}/test_OutputFiles.py"
WORKING_DIRECTORY "${API_TEST_TARGET_DIR}")

endif()
endif()

Expand Down
159 changes: 159 additions & 0 deletions tst/EnergyPlus/api/test_OutputFiles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
# EnergyPlus, Copyright (c) 1996-2021, The Board of Trustees of the University
# of Illinois, The Regents of the University of California, through Lawrence
# Berkeley National Laboratory (subject to receipt of any required approvals
# from the U.S. Dept. of Energy), Oak Ridge National Laboratory, managed by UT-
# Battelle, Alliance for Sustainable Energy, LLC, and other contributors. All
# rights reserved.
#
# NOTICE: This Software was developed under funding from the U.S. Department of
# Energy and the U.S. Government consequently retains certain rights. As such,
# the U.S. Government has been granted for itself and others acting on its
# behalf a paid-up, nonexclusive, irrevocable, worldwide license in the
# Software to reproduce, distribute copies to the public, prepare derivative
# works, and perform publicly and display publicly, and to permit others to do
# so.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# (1) Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# (2) 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.
#
# (3) Neither the name of the University of California, Lawrence Berkeley
# National Laboratory, the University of Illinois, U.S. Dept. of Energy nor
# the names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# (4) Use of EnergyPlus(TM) Name. If Licensee (i) distributes the software in
# stand-alone form without changes from the version obtained under this
# License, or (ii) Licensee makes a reference solely to the software
# portion of its product, Licensee must refer to the software as
# "EnergyPlus version X" software, where "X" is the version number Licensee
# obtained under this License and may not use a different name for the
# software. Except as specifically required in this Section (4), Licensee
# shall not use in a company name, a product name, in advertising,
# publicity, or other promotional activities any name, trade name,
# trademark, logo, or other designation of "EnergyPlus", "E+", "e+" or
# confusingly similar designation, without the U.S. Department of Energy's
# prior written consent.
#
# 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.

import glob as gb
import os
import shlex
import tempfile
import unittest

from pyenergyplus.api import EnergyPlusAPI


class TestAPISysExit(unittest.TestCase):
"""
unittest on EnergyPlusAPI for #8484 - [pyenergyplus] EnergyPlus output not
flushed to eplusout.err
"""

@classmethod
def setUpClass(cls):
"""
A class method called before tests in an individual class are run
"""
cls.api = EnergyPlusAPI()

def setUp(self):
"""
Prepare each test fixture, with a new state
"""
self.state = self.api.state_manager.new_state()

def test_proper_run(self):
"""
Test for #8484 - [pyenergyplus] EnergyPlus output not flushed to eplusout.err
"""
with tempfile.TemporaryDirectory() as tempdir:
print(tempdir)
cmd_args = shlex.split(f'-d {tempdir} -D @IDF_FILE@')
return_code = self.api.runtime.run_energyplus(self.state, cmd_args)
self.assertEqual(return_code, 0)
out_files = gb.glob(os.path.join(tempdir, "*"))
# We need to find out files, and we expect NONE of them to be empty
self.assertGreater(len(out_files), 10)
empty_files = list(filter(lambda f: os.stat(f).st_size == 0,
out_files))
msg = f"Did not expect empty files, but found {len(empty_files)}:"
for f in empty_files:
msg += f"\n * {os.path.relpath(f, tempdir)}"
self.assertFalse(empty_files, msg)

# Check that the eplusout.err is not truncated, that the last line
# is what we expect it to be
with open(os.path.join(tempdir, 'eplusout.err'), 'r') as f:
lines = f.read().splitlines()
self.assertTrue(lines, "eplusout.err is empty!")
self.assertIn("EnergyPlus Completed Successfully", lines[-1])

def test_wrong_file_sys_exit(self):
"""
Test for #8484 - When the simulation starts, but fails, we should still
find proper content in the eplusout.err
"""

idf_content = """
Version,9.0;
Timestep,4;
Building,
Simple One Zone (Wireframe DXF), !- Name
0, !- North Axis {deg}
Suburbs, !- Terrain
0.04, !- Loads Convergence Tolerance Value {W}
0.004, !- Temperature Convergence Tolerance Value {dC}
MinimalShadowing, !- Solar Distribution
30, !- Maximum Number of Warmup Days
6; !- Minimum Number of Warmup Days
HeatBalanceAlgorithm,ConductionTransferFunction;
SurfaceConvectionAlgorithm:Inside,TARP;
SurfaceConvectionAlgorithm:Outside,DOE-2;
GlobalGeometryRules,
UpperLeftCorner, !- Starting Vertex Position
CounterClockWise, !- Vertex Entry Direction
World; !- Coordinate System
"""

with tempfile.TemporaryDirectory() as tempdir:
idf_file = os.path.join(tempdir, 'wrong_version.idf')

with open(idf_file, 'w') as f:
f.write(idf_content)

cmd_args = shlex.split(f'-d {tempdir} -D {idf_file}')
return_code = self.api.runtime.run_energyplus(self.state, cmd_args)
self.assertEqual(return_code, 1)
with open(os.path.join(tempdir, 'eplusout.err'), 'r') as f:
lines = f.read().splitlines()
self.assertTrue(lines, "eplusout.err is empty!")
self.assertIn("EnergyPlus Terminated", lines[-1])


if __name__ == '__main__':
unittest.main()

0 comments on commit 6572493

Please sign in to comment.