def test_01_version_increment(self, test): """ Activations result in a Device version number increment""" globalConfig.test = test devicesWithAdvertisements = self.find_device_advertisement() versionNumbersBeforeActivation = [] for device in devicesWithAdvertisements: versionNumbersBeforeActivation.append(device['version']) output = getOutputList()[0] action = output.findAcceptableTestRoute() activation = Activation() activation.addAction(action) activation.fireActivation() versionIncremented = False counter = 0 devicesWithAdvertisements = self.find_device_advertisement() for device in devicesWithAdvertisements: if device['version'] != versionNumbersBeforeActivation[counter]: versionIncremented = True if versionIncremented: return test.PASS() else: return test.FAIL( "No devices in the Node API incremented version number on activation." )
def check_delayed_activation(self, activationTime, activationType): active = Active() active.unrouteAll() preActivationState = active.buildJSONObject() outputList = getOutputList() testRouteAction = outputList[0].findAcceptableTestRoute() activation = Activation() activation.addAction(testRouteAction) activation.type = activationType activation.activationTimestamp = activationTime try: activation.fireActivation() except NMOSTestException as e: time.sleep(2) raise e pendingState = active.buildJSONObject() if not compare_json(preActivationState, pendingState): msg = globalConfig.test.FAIL("Scheduled Activation completed immediately") raise NMOSTestException(msg) time.sleep(2) active.assertActionCompleted(testRouteAction, retries=5) time.sleep(1)
def test_15_block_constraint(self, test): """It is not possible to make an out-of-block route when block_size is anything other than 1""" globalConfig.test = test inputList = getInputList() constraintSet = False constrainedInputs = [] for inputInstance in inputList: if inputInstance.getBlockSize() > 1: constraintSet = True constrainedInputs.append(inputInstance) if not constraintSet: return test.NA("No inputs constrain by block.") chosenInput = constrainedInputs[0] output = chosenInput.getRoutableOutputs() action = Action( chosenInput.id, output.id ) activation = Activation() activation.addAction(action) try: activation.fireActivation() except NMOSTestException: return test.PASS() return test.FAIL("Was able to break block size routing constraint")
def unrouteAll(self): outputList = getOutputList() activation = Activation() for outputInstance in outputList: for channelID in range(0, len(outputInstance.getChannelList())): action = Action(None, outputInstance.id, None, channelID) activation.addAction(action) activation.fireActivation()
def test_02_immediate_activation(self, test): """Immediate activation can be called on the API""" globalConfig.test = test outputList = getOutputList() testRouteAction = outputList[0].findAcceptableTestRoute() activation = Activation() activation.addAction(testRouteAction) activation.fireActivation() activeResource = Active() activeResource.assertActionCompleted(testRouteAction) return test.PASS()
def test_06_locking_response(self, test): """Attempting to change a locked route results in a 423 response""" globalConfig.test = test outputList = getOutputList() testRouteAction = outputList[0].findAcceptableTestRoute() activation = Activation() activation.addAction(testRouteAction) activation.type = SCHEDULED_RELATIVE_ACTIVATION activation.activationTimestamp = "5:0" activation.fireActivation() activation.checkLock() return test.PASS()
def test_05_delete_activations(self, test): """Activations can be deleted once created""" globalConfig.test = test Active().unrouteAll() outputList = getOutputList() testRouteAction = outputList[0].findAcceptableTestRoute() activation = Activation() activation.addAction(testRouteAction) activation.type = SCHEDULED_RELATIVE_ACTIVATION activation.activationTimestamp = "2:0" try: activation.fireActivation() except NMOSTestException as e: time.sleep(2) raise e time.sleep(1) activation.delete() return test.PASS()
def test_14_reordering_constraint(self, test): """It is not possible to re-order channels when re-ordering is set to `false`""" globalConfig.test = test inputList = getInputList() constrainedInputs = [] constraintSet = False for inputInstance in inputList: if not inputInstance.getReordering(): constrainedInputs.append(inputInstance) constraintSet = True if not constraintSet: return test.NA("No inputs prevent re-ordering.") # Filter out inputs where the constraint can't be tested because the # block size prevents re-ordering anyway filteredInputs = [] for inputInstance in constrainedInputs: blockSize = inputInstance.getBlockSize() if len(inputInstance.getChannelList) >= blockSize * 2: # Constraint makes no sense, can't re-order to to block size filteredInputs.append(inputInstance) # Filter out inputs where there is no output that channels could be # re-ordered into targetOutputList = {} testableInputs = [] for inputInstance in filteredInputs: routableOutputList = inputInstance.getRoutableOutputs() for outputInstance in routableOutputList: if len(outputInstance.getChannelList) >= inputInstance.getBlockSize() * 2: targetOutputList[inputInstance.id] = outputInstance if inputInstance.id in targetOutputList.keys: testableInputs.append(inputInstance) # Cross over blocks one and two on an input and output # e.g for a block size of 2: # IN OUT # 0 ____ ____ 0 # 1 ___ \ / ___ 1 # \ X / # X X # 2 ___/ X \___ 2 # 3 ____/ \____ 3 activation = Activation() for inputInstance in testableInputs: for inputChannelIndex in range(0, inputInstance.getBlockSize()): outputChannelIndex = inputChannelIndex + blockSize blockOneAction = Action( inputInstance.id, targetOutputList[inputInstance.id], inputChannelIndex, outputChannelIndex ) blockTwoAction = Action( inputInstance.id, targetOutputList[inputInstance.id], outputChannelIndex, inputChannelIndex ) activation.addAction(blockOneAction) activation.addAction(blockTwoAction) try: activation.fireActivation() except NMOSTestException: return test.PASS() return test.FAIL("Channels could be re-ordered despite re-ordering constraint.")