@ -30,122 +30,122 @@ class Scenario2(Scenario):
super ( ) . __init__ ( context )
def getScenario ( self ) :
return self . __class__ . __name__ [ 8 : ]
# def job(self, yieldObj: dict):
#
# testContext = self._context.copy()
#
# identifier = yieldObj['identifier']
# variantList = yieldObj['variants']
#
# variantIdentifier = '-'.join(variantList)
# variantLabel = f"{self.__class__.__name__} Variant {variantIdentifier}"
#
# sourceMediaDescriptor: MediaDescriptor = yieldObj['payload']
# assertSelectorList: list = yieldObj['assertSelectors']
# assertFuncList = yieldObj['assertFuncs']
# shouldFail = yieldObj['shouldFail']
#
# try:
# jellyfinSelectorIndex = assertSelectorList.index('J')
# jellyfinVariant = variantList[jellyfinSelectorIndex]
# testContext['use_jellyfin'] = jellyfinVariant == 'J1'
# except ValueError:
# jellyfinSelectorIndex = -1
#
#
# if self._context['test_variant'] and variantIdentifier != self._context['test_variant']:
# return
#
#
# self._logger.debug(f"Running Job: {variantLabel}")
#
# # Phase 1: Setup source files
# self.clearTestDirectory()
# mediaFilePath = createMediaTestFile(mediaDescriptor=sourceMediaDescriptor, directory=self._testDirectory, logger=self._logger, length = 2)
#
# # # Phase 2: Prepare database
# #
# # Phase 3: Run ffx
# commandSequence = [sys.executable,
# self._ffxExecutablePath,
# 'convert',
# mediaFilePath,
# '--no-prompt']
#
# if not testContext['use_jellyfin']:
# commandSequence += ['--no-jellyfin']
#
# self._logger.debug(f"{variantLabel}: Test sequence: {commandSequence}")
#
# out, err, rc = executeProcess(commandSequence, directory = self._testDirectory)
#
# if out:
# self._logger.debug(f"{variantLabel}: Process output: {out}")
# if rc:
# self._logger.debug(f"{variantLabel}: Process returned ERROR {rc} ({err})")
#
# # Phase 4: Evaluate results
#
# try:
#
# jobFailed = bool(rc)
#
# self._logger.debug(f"{variantLabel}: Should fail: {shouldFail} / actually failed: {jobFailed}")
#
# assert jobFailed == shouldFail, f"Process {'failed' if jobFailed else 'did not fail'}"
#
# if not jobFailed:
#
# resultFile = os.path.join(self._testDirectory, 'media.webm')
#
# assert os.path.isfile(resultFile), f"Result file 'media.webm' in path '{self._testDirectory}' wasn't created"
#
# resultFileProperties = FileProperties(testContext, resultFile)
# resultMediaDescriptor = resultFileProperties.getMediaDescriptor()
#
# if testContext['use_jellyfin']:
# sourceMediaDescriptor.applyJellyfinOrder()
# resultMediaDescriptor.applySourceIndices(sourceMediaDescriptor)
#
# resultMediaTracks = resultMediaDescriptor.getAllTrackDescriptors()
#
# for assertIndex in range(len(assertSelectorList)):
#
# assertSelector = assertSelectorList[assertIndex]
# assertFunc = assertFuncList[assertIndex]
# assertVariant = variantList[assertIndex]
#
# if assertSelector == 'M':
# assertFunc()
# for variantIndex in range(len(assertVariant)):
# assert assertVariant[variantIndex].lower() == resultMediaTracks[variantIndex].getType().indicator(), f"Stream #{variantIndex} is not of type {resultMediaTracks[variantIndex].getType().label()}"
#
# elif assertSelector == 'AD' or assertSelector == 'AT':
# assertFunc(resultMediaDescriptor.getAudioTracks())
#
# elif assertSelector == 'SD' or assertSelector == 'ST':
# assertFunc(resultMediaDescriptor.getSubtitleTracks())
#
# elif type(assertSelector) is str:
# if assertSelector == 'J':
# assertFunc()
#
#
# self._reportLogger.info(f"{variantLabel}: Test passed")
#
# except AssertionError as ae:
def job ( self , yieldObj : dict ) :
testContext = self . _context . copy ( )
identifier = yieldObj [ ' identifier ' ]
variantList = yieldObj [ ' variants ' ]
variantIdentifier = ' - ' . join ( variantList )
variantLabel = f " { self . __class__ . __name__ } Variant { variantIdentifier } "
sourceMediaDescriptor : MediaDescriptor = yieldObj [ ' payload ' ]
assertSelectorList : list = yieldObj [ ' assertSelectors ' ]
assertFuncList = yieldObj [ ' assertFuncs ' ]
shouldFail = yieldObj [ ' shouldFail ' ]
try :
jellyfinSelectorIndex = assertSelectorList . index ( ' J ' )
jellyfinVariant = variantList [ jellyfinSelectorIndex ]
testContext [ ' use_jellyfin ' ] = jellyfinVariant == ' J1 '
except ValueError :
jellyfinSelectorIndex = - 1
if self . _context [ ' test_variant ' ] and variantIdentifier != self . _context [ ' test_variant ' ] :
return
self . _logger . debug ( f " Running Job: { variantLabel } " )
# Phase 1: Setup source files
self . clearTestDirectory ( )
mediaFilePath = createMediaTestFile ( mediaDescriptor = sourceMediaDescriptor , directory = self . _testDirectory , logger = self . _logger , length = 2 )
# # Phase 2: Prepare database
#
# self._reportLogger.error(f"{variantLabel}: Test FAILED ({ae})")
# Phase 3: Run ffx
commandSequence = [ sys . executable ,
self . _ffxExecutablePath ,
' convert ' ,
mediaFilePath ,
' --no-prompt ' ]
if not testContext [ ' use_jellyfin ' ] :
commandSequence + = [ ' --no-jellyfin ' ]
self . _logger . debug ( f " { variantLabel } : Test sequence: { commandSequence } " )
out , err , rc = executeProcess ( commandSequence , directory = self . _testDirectory )
if out :
self . _logger . debug ( f " { variantLabel } : Process output: { out } " )
if rc :
self . _logger . debug ( f " { variantLabel } : Process returned ERROR { rc } ( { err } ) " )
# Phase 4: Evaluate results
try :
jobFailed = bool ( rc )
self . _logger . debug ( f " { variantLabel } : Should fail: { shouldFail } / actually failed: { jobFailed } " )
assert jobFailed == shouldFail , f " Process { ' failed ' if jobFailed else ' did not fail ' } "
if not jobFailed :
resultFile = os . path . join ( self . _testDirectory , ' media.webm ' )
assert os . path . isfile ( resultFile ) , f " Result file ' media.webm ' in path ' { self . _testDirectory } ' wasn ' t created "
resultFileProperties = FileProperties ( testContext , resultFile )
resultMediaDescriptor = resultFileProperties . getMediaDescriptor ( )
if testContext [ ' use_jellyfin ' ] :
sourceMediaDescriptor . applyJellyfinOrder ( )
resultMediaDescriptor . applySourceIndices ( sourceMediaDescriptor )
resultMediaTracks = resultMediaDescriptor . getAllTrackDescriptors ( )
for assertIndex in range ( len ( assertSelectorList ) ) :
assertSelector = assertSelectorList [ assertIndex ]
assertFunc = assertFuncList [ assertIndex ]
assertVariant = variantList [ assertIndex ]
if assertSelector == ' M ' :
assertFunc ( )
for variantIndex in range ( len ( assertVariant ) ) :
assert assertVariant [ variantIndex ] . lower ( ) == resultMediaTracks [ variantIndex ] . getType ( ) . indicator ( ) , f " Stream # { variantIndex } is not of type { resultMediaTracks [ variantIndex ] . getType ( ) . label ( ) } "
elif assertSelector == ' AD ' or assertSelector == ' AT ' :
assertFunc ( resultMediaDescriptor . getAudioTracks ( ) )
elif assertSelector == ' SD ' or assertSelector == ' ST ' :
assertFunc ( resultMediaDescriptor . getSubtitleTracks ( ) )
elif type ( assertSelector ) is str :
if assertSelector == ' J ' :
assertFunc ( )
self . _reportLogger . info ( f " { variantLabel } : Test passed " )
except AssertionError as ae :
self . _reportLogger . error ( f " { variantLabel } : Test FAILED ( { ae } ) " )
def run ( self ) :
pass
# MC_list = MediaCombinator.getAllClassReferences()
# for MC in MC_list:
# self._logger.debug(f"MC={MC.__name__}")
# mc = MC(context = self._context)
# for y in mc.getYield():
# self.job(y)
MC_list = MediaCombinator . getAllClassReferences ( )
for MC in MC_list :
self . _logger . debug ( f " MC= { MC . __name__ } " )
mc = MC ( context = self . _context )
for y in mc . getYield ( ) :
self . job ( y )