build: turn on integration tests in ctest by default (#1381)
They can still be skipped by passing `-DSKIP_INTEGRATION_TESTS=ON` for the build configuration. Fix integration tests so they run correctly when building out of tree. Use FindPython3 in CMake to fix build and integration tests on Windows.
This commit is contained in:
parent
ceeb378a85
commit
84009d82ef
|
@ -26,7 +26,7 @@ option(FULLY_STATIC "Attempt fully static linking of all CLI apps" OFF)
|
|||
# Enable CMake's test infrastructure.
|
||||
enable_testing()
|
||||
|
||||
option(SKIP_INTEGRATION_TESTS "Skip the packager integration tests" ON)
|
||||
option(SKIP_INTEGRATION_TESTS "Skip the packager integration tests" OFF)
|
||||
|
||||
# Subdirectories with their own CMakeLists.txt
|
||||
add_subdirectory(packager)
|
||||
|
|
|
@ -13,7 +13,7 @@ if(BUILD_SHARED_LIBS)
|
|||
|
||||
# Custom commands aren't targets, but have outputs.
|
||||
add_custom_command(
|
||||
DEPENDS mpd_generator packager libpackager
|
||||
DEPENDS mpd_generator packager libpackager pssh_box_py
|
||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||
OUTPUT ${TEST_INSTALL_DIR}
|
||||
COMMAND
|
||||
|
|
|
@ -66,6 +66,11 @@ include("gtest.cmake")
|
|||
# Include our module for building protos.
|
||||
include("protobuf.cmake")
|
||||
|
||||
# Find Python3 used by integration tests, license notice and version string
|
||||
if(NOT Python3_EXECUTABLE)
|
||||
find_package(Python3 COMPONENTS Interpreter REQUIRED)
|
||||
endif()
|
||||
|
||||
# Subdirectories with their own CMakeLists.txt, all of whose targets are built.
|
||||
add_subdirectory(file)
|
||||
add_subdirectory(kv_pairs)
|
||||
|
@ -228,9 +233,22 @@ add_custom_target(packager_test_py_copy ALL
|
|||
|
||||
if(NOT SKIP_INTEGRATION_TESTS)
|
||||
add_test (NAME packager_test_py
|
||||
COMMAND ${PYTHON_EXECUTABLE} packager_test.py
|
||||
COMMAND "${Python3_EXECUTABLE}" packager_test.py
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
|
||||
set(test_environment_vars "PACKAGER_SRC_DIR=${CMAKE_SOURCE_DIR}")
|
||||
list(APPEND test_environment_vars "PACKAGER_BIN=$<TARGET_FILE:packager>")
|
||||
list(APPEND test_environment_vars "MPD_GENERATOR_BIN=$<TARGET_FILE:mpd_generator>")
|
||||
if(BUILD_SHARED_LIBS)
|
||||
list(APPEND test_environment_vars "BUILD_TYPE=shared")
|
||||
else()
|
||||
list(APPEND test_environment_vars "BUILD_TYPE=static")
|
||||
endif()
|
||||
|
||||
set_tests_properties(packager_test_py PROPERTIES
|
||||
ENVIRONMENT "${test_environment_vars}"
|
||||
)
|
||||
endif()
|
||||
|
||||
configure_file(packager.pc.in packager.pc @ONLY)
|
||||
|
@ -238,12 +256,6 @@ configure_file(packager.pc.in packager.pc @ONLY)
|
|||
# Always install the binaries.
|
||||
install(TARGETS mpd_generator packager)
|
||||
|
||||
# Always install the python tools.
|
||||
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/pssh-box.py
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/pssh-box-protos
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
# With shared libraries, also install the library, headers, and pkgconfig.
|
||||
# The static library isn't usable as a standalone because it doesn't include
|
||||
# its static dependencies (zlib, absl, etc).
|
||||
|
|
|
@ -17,10 +17,8 @@ class PackagerApp(object):
|
|||
"""Main integration class for testing the packager binaries."""
|
||||
|
||||
def __init__(self):
|
||||
self.packager_binary = os.path.join(test_env.SCRIPT_DIR,
|
||||
self._GetBinaryName('packager'))
|
||||
self.mpd_generator_binary = os.path.join(
|
||||
test_env.SCRIPT_DIR, self._GetBinaryName('mpd_generator'))
|
||||
self.packager_binary = test_env.PACKAGER_BIN
|
||||
self.mpd_generator_binary = test_env.MPD_GENERATOR_BIN
|
||||
# Set this to empty for now in case GetCommandLine() is called before
|
||||
# Package().
|
||||
self.packaging_command_line = ''
|
||||
|
@ -28,15 +26,10 @@ class PackagerApp(object):
|
|||
'Please run from output directory, e.g. out/Debug/packager_test.py\n'
|
||||
' Missing: ' + self.packager_binary)
|
||||
|
||||
def _GetBinaryName(self, name):
|
||||
if platform.system() == 'Windows':
|
||||
name += '.exe'
|
||||
return name
|
||||
|
||||
def GetEnv(self):
|
||||
env = os.environ.copy()
|
||||
if (platform.system() == 'Darwin' and
|
||||
test_env.options.libpackager_type == 'shared_library'):
|
||||
test_env.BUILD_TYPE == 'shared'):
|
||||
env['DYLD_FALLBACK_LIBRARY_PATH'] = test_env.SCRIPT_DIR
|
||||
return env
|
||||
|
||||
|
|
|
@ -485,7 +485,7 @@ class PackagerAppTest(unittest.TestCase):
|
|||
use_fake_clock=True,
|
||||
allow_codec_switching=False,
|
||||
dash_force_segment_list=False,
|
||||
force_cl_index=False):
|
||||
force_cl_index=None):
|
||||
|
||||
flags = ['--single_threaded']
|
||||
|
||||
|
@ -570,8 +570,10 @@ class PackagerAppTest(unittest.TestCase):
|
|||
if allow_codec_switching:
|
||||
flags += ['--allow_codec_switching']
|
||||
|
||||
if force_cl_index:
|
||||
if force_cl_index is True:
|
||||
flags += ['--force_cl_index']
|
||||
elif force_cl_index is False:
|
||||
flags += ['--noforce_cl_index']
|
||||
|
||||
if ad_cues:
|
||||
flags += ['--ad_cues', ad_cues]
|
||||
|
@ -754,7 +756,8 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._GetStream('video', trick_play_factor=2),
|
||||
]
|
||||
|
||||
self.assertPackageSuccess(streams, self._GetFlags(output_dash=True))
|
||||
self.assertPackageSuccess(streams, self._GetFlags(output_dash=True,
|
||||
force_cl_index=False))
|
||||
self._CheckTestResults('audio-video-with-two-trick-play')
|
||||
|
||||
def testAudioVideoWithTwoTrickPlayDecreasingRate(self):
|
||||
|
@ -765,7 +768,8 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
self._GetStream('video', trick_play_factor=1),
|
||||
]
|
||||
|
||||
self.assertPackageSuccess(streams, self._GetFlags(output_dash=True))
|
||||
self.assertPackageSuccess(streams, self._GetFlags(output_dash=True,
|
||||
force_cl_index=False))
|
||||
# Since the stream descriptors are sorted in packager app, a different
|
||||
# order of trick play factors gets the same mpd.
|
||||
self._CheckTestResults('audio-video-with-two-trick-play')
|
||||
|
@ -1510,8 +1514,8 @@ class PackagerFunctionalTest(PackagerAppTest):
|
|||
|
||||
# TODO(kqyang): Fix shared_library not supporting strip_parameter_set_nalus
|
||||
# problem.
|
||||
@unittest.skipUnless(
|
||||
test_env.options.libpackager_type == 'static_library',
|
||||
@unittest.skipIf(
|
||||
test_env.BUILD_TYPE == 'shared',
|
||||
'libpackager shared_library does not support '
|
||||
'--strip_parameter_set_nalus flag.'
|
||||
)
|
||||
|
|
|
@ -14,21 +14,38 @@ flags through the command line interface.
|
|||
|
||||
import argparse
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
|
||||
|
||||
def GetBinaryName(name):
|
||||
if platform.system() == 'Windows':
|
||||
name += '.exe'
|
||||
return name
|
||||
|
||||
# Define static global objects and attributes.
|
||||
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||
SRC_DIR = os.environ.get('PACKAGER_SRC_DIR')
|
||||
if not SRC_DIR:
|
||||
# fallback to computing src dir from script dir
|
||||
SRC_DIR = os.path.join(SCRIPT_DIR, os.pardir, os.pardir)
|
||||
|
||||
PACKAGER_BIN = os.environ.get('PACKAGER_BIN')
|
||||
if not PACKAGER_BIN:
|
||||
PACKAGER_BIN = os.path.join(SCRIPT_DIR,
|
||||
GetBinaryName('packager'))
|
||||
|
||||
MPD_GENERATOR_BIN = os.environ.get('MPD_GENERATOR_BIN')
|
||||
if not MPD_GENERATOR_BIN:
|
||||
MPD_GENERATOR_BIN = os.path.join(SCRIPT_DIR,
|
||||
GetBinaryName('mpd_generator'))
|
||||
|
||||
BUILD_TYPE = os.environ.get('BUILD_TYPE', 'static')
|
||||
|
||||
# Parse arguments and calculate dynamic global objects and attributes.
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument('--test_update_golden_files', action='store_true')
|
||||
|
||||
parser.add_argument('--libpackager_type', default='static_library',
|
||||
choices=['static_library', 'shared_library'])
|
||||
|
||||
parser.add_argument('--v')
|
||||
parser.add_argument('--vmodule')
|
||||
# Overwrite the test to encryption key/iv specified in the command line.
|
||||
|
|
|
@ -2,8 +2,31 @@
|
|||
<!--Generated with https://github.com/shaka-project/shaka-packager version <tag>-<hash>-<test>-->
|
||||
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011" minBufferTime="PT2S" type="static" mediaPresentationDuration="PT2.736067S">
|
||||
<Period id="0">
|
||||
<AdaptationSet id="0" contentType="audio" subsegmentStartsWithSAP="1" subsegmentAlignment="true">
|
||||
<Representation id="0" bandwidth="133334" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AdaptationSet id="0" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
||||
<Representation id="0" bandwidth="973483" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<BaseURL>bear-640x360-video.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-937" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="video" width="640" height="360" maxFrameRate="30000/22022" par="16:9">
|
||||
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" value="0"/>
|
||||
<Representation id="1" bandwidth="211545" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1" frameRate="30000/30030" maxPlayoutRate="30" codingDependency="false">
|
||||
<BaseURL>bear-640x360-video-trick_play_factor_1.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-937" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
<Representation id="2" bandwidth="211545" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1" frameRate="30000/22022" maxPlayoutRate="60" codingDependency="false">
|
||||
<BaseURL>bear-640x360-video-trick_play_factor_2.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-925" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="2" contentType="audio" subsegmentStartsWithSAP="1" subsegmentAlignment="true">
|
||||
<Representation id="3" bandwidth="133334" codecs="mp4a.40.2" mimeType="audio/mp4" audioSamplingRate="44100">
|
||||
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
|
||||
<BaseURL>bear-640x360-audio.mp4</BaseURL>
|
||||
<SegmentBase indexRange="804-871" timescale="44100">
|
||||
|
@ -11,28 +34,5 @@
|
|||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="1" contentType="video" width="640" height="360" frameRate="30000/1001" subsegmentAlignment="true" par="16:9">
|
||||
<Representation id="1" bandwidth="973483" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1">
|
||||
<BaseURL>bear-640x360-video.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-937" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
<AdaptationSet id="2" contentType="video" width="640" height="360" maxFrameRate="30000/22022" par="16:9">
|
||||
<EssentialProperty schemeIdUri="http://dashif.org/guidelines/trickmode" value="1"/>
|
||||
<Representation id="2" bandwidth="211545" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1" frameRate="30000/22022" maxPlayoutRate="60" codingDependency="false">
|
||||
<BaseURL>bear-640x360-video-trick_play_factor_2.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-925" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
<Representation id="3" bandwidth="211545" codecs="avc1.64001e" mimeType="video/mp4" sar="1:1" frameRate="30000/30030" maxPlayoutRate="30" codingDependency="false">
|
||||
<BaseURL>bear-640x360-video-trick_play_factor_1.mp4</BaseURL>
|
||||
<SegmentBase indexRange="870-937" timescale="30000">
|
||||
<Initialization range="0-869"/>
|
||||
</SegmentBase>
|
||||
</Representation>
|
||||
</AdaptationSet>
|
||||
</Period>
|
||||
</MPD>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
# https://developers.google.com/open-source/licenses/bsd
|
||||
|
||||
execute_process(
|
||||
COMMAND python3 generate_license_notice.py "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
COMMAND "${Python3_EXECUTABLE}" generate_license_notice.py "${CMAKE_CURRENT_BINARY_DIR}"
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE STATUS)
|
||||
if(NOT STATUS EQUAL 0)
|
||||
|
|
|
@ -31,3 +31,9 @@ add_custom_command(
|
|||
${CMAKE_BINARY_DIR}/packager/)
|
||||
|
||||
add_custom_target(pssh_box_py ALL DEPENDS ${PSSH_BOX_OUTPUTS})
|
||||
|
||||
# Always install the python tools.
|
||||
install(PROGRAMS ${CMAKE_BINARY_DIR}/packager/pssh-box.py
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/packager/pssh-box-protos
|
||||
DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
# https://developers.google.com/open-source/licenses/bsd
|
||||
|
||||
execute_process(
|
||||
COMMAND python3 generate_version_string.py
|
||||
COMMAND "${Python3_EXECUTABLE}" generate_version_string.py
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
|
||||
RESULT_VARIABLE STATUS
|
||||
OUTPUT_VARIABLE PACKAGER_VERSION
|
||||
|
|
Loading…
Reference in New Issue