def test_eq(self): assert opendnp3.AnalogCommandEvent() == opendnp3.AnalogCommandEvent( 0.0, opendnp3.CommandStatus.SUCCESS) assert opendnp3.AnalogOutputInt16() == opendnp3.AnalogOutputInt16( 0, opendnp3.CommandStatus.SUCCESS) assert opendnp3.AnalogOutputInt32() == opendnp3.AnalogOutputInt32( 0, opendnp3.CommandStatus.SUCCESS) assert opendnp3.AnalogOutputFloat32() == opendnp3.AnalogOutputFloat32( 0.0, opendnp3.CommandStatus.SUCCESS) assert opendnp3.AnalogOutputDouble64( ) == opendnp3.AnalogOutputDouble64(0.0, opendnp3.CommandStatus.SUCCESS) assert opendnp3.BinaryCommandEvent() == opendnp3.BinaryCommandEvent( opendnp3.Flags(0)) assert opendnp3.ControlRelayOutputBlock( ) == opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON) assert opendnp3.IINField() == opendnp3.IINField(0x0, 0x0) assert openpal.__eq__(openpal.TimeDuration(), openpal.TimeDuration()) assert openpal.__eq__(openpal.MonotonicTimestamp(), openpal.MonotonicTimestamp(0))
def test_Indexed(self): assert type(opendnp3.WithIndex(opendnp3.Binary(), 0)) == opendnp3.IndexedBinary assert type(opendnp3.WithIndex(opendnp3.DoubleBitBinary(), 0)) == opendnp3.IndexedDoubleBitBinary assert type(opendnp3.WithIndex(opendnp3.Analog(), 0)) == opendnp3.IndexedAnalog assert type(opendnp3.WithIndex(opendnp3.Counter(), 0)) == opendnp3.IndexedCounter assert type(opendnp3.WithIndex(opendnp3.FrozenCounter(), 0)) == opendnp3.IndexedFrozenCounter assert type(opendnp3.WithIndex(opendnp3.BinaryOutputStatus(), 0)) == opendnp3.IndexedBinaryOutputStatus assert type(opendnp3.WithIndex(opendnp3.AnalogOutputStatus(), 0)) == opendnp3.IndexedAnalogOutputStatus assert type(opendnp3.WithIndex(opendnp3.OctetString(), 0)) == opendnp3.IndexedOctetString assert type(opendnp3.WithIndex(opendnp3.TimeAndInterval(), 0)) == opendnp3.IndexedTimeAndInterval assert type(opendnp3.WithIndex(opendnp3.BinaryCommandEvent(), 0)) == opendnp3.IndexedBinaryCommandEvent assert type(opendnp3.WithIndex(opendnp3.AnalogCommandEvent(), 0)) == opendnp3.IndexedAnalogCommandEvent assert type(opendnp3.WithIndex(opendnp3.SecurityStat(), 0)) == opendnp3.IndexedSecurityStat assert type(opendnp3.WithIndex(opendnp3.ControlRelayOutputBlock(), 0)) == opendnp3.IndexedControlRelayOutputBlock assert type(opendnp3.WithIndex(opendnp3.AnalogOutputInt16(), 0)) == opendnp3.IndexedAnalogOutputInt16 assert type(opendnp3.WithIndex(opendnp3.AnalogOutputInt32(), 0)) == opendnp3.IndexedAnalogOutputInt32 assert type(opendnp3.WithIndex(opendnp3.AnalogOutputFloat32(), 0)) == opendnp3.IndexedAnalogOutputFloat32 assert type(opendnp3.WithIndex(opendnp3.AnalogOutputDouble64(), 0)) == opendnp3.IndexedAnalogOutputDouble64
def test_passing_kwargs(self): """ Create the class object with defined kwargs and test if the object is not empty. """ assert opendnp3.AnalogOutputInt16( status=opendnp3.CommandStatus.SUCCESS) is not None assert opendnp3.AnalogOutputInt32( status=opendnp3.CommandStatus.NO_SELECT) is not None assert opendnp3.AnalogOutputFloat32( status=opendnp3.CommandStatus.NOT_SUPPORTED) is not None assert opendnp3.AnalogOutputDouble64( status=opendnp3.CommandStatus.HARDWARE_ERROR) is not None assert opendnp3.ControlRelayOutputBlock( functionCode=opendnp3.ControlCode.NUL) is not None assert opendnp3.ControlRelayOutputBlock(rawCode=0xFF) is not None assert opendnp3.ControlRelayOutputBlock( rawCode=0xFF, status=opendnp3.CommandStatus.BLOCKED) is not None assert opendnp3.GroupVariationID(variation=0x2) is not None assert opendnp3.EventBufferConfig(maxDoubleBinaryEvents=5) is not None assert opendnp3.EventBufferConfig(maxFrozenCounterEvents=4) is not None assert opendnp3.EventBufferConfig( maxAnalogOutputStatusEvents=10) is not None assert opendnp3.EventBufferConfig(maxBinaryEvents=1, maxAnalogEvents=3, maxCounterEvents=2) is not None assert opendnp3.OutstationParams( indexMode=opendnp3.IndexMode.Contiguous) is not None assert opendnp3.OutstationParams( typesAllowedInClass0=opendnp3.StaticTypeBitField()) is not None assert opendnp3.OutstationParams( unsolClassMask=opendnp3.ClassField()) is not None assert opendnp3.OutstationParams(maxTxFragSize=20, maxRxFragSize=30, allowUnsolicited=True) is not None assert opendnp3.StartStopRangeUint8(stop=10) is not None assert opendnp3.StartStopRangeUint16(stop=20) is not None assert opendnp3.CountUint8(value=3) is not None assert opendnp3.CountUint16(value=27) is not None # CommandSet passing a list crob = opendnp3.ControlRelayOutputBlock(opendnp3.ControlCode.LATCH_ON) assert opendnp3.CommandSet( items=[opendnp3.WithIndex(crob, 0), opendnp3.WithIndex(crob, 1)]) is not None
def test_default_constructors(self): """ Create the class object with default values for instance variable and test if the object is not empty. """ assert asiodnp3.ConsoleLogger() is not None assert asiodnp3.DefaultListenCallbacks() is not None assert asiodnp3.DefaultMasterApplication() is not None assert asiodnp3.MasterStackConfig() is not None assert asiodnp3.PrintingChannelListener is not None assert asiodnp3.PrintingSOEHandler() is not None assert asiodnp3.UpdateBuilder() is not None assert asiopal.ChannelRetry() is not None assert asiopal.ResourceManager() is not None assert asiopal.SerialSettings() is not None assert asiopal.steady_clock_t() is not None assert opendnp3.AnalogCommandEvent() is not None assert opendnp3.AnalogOutputInt16() is not None assert opendnp3.AnalogOutputInt32() is not None assert opendnp3.AnalogOutputFloat32() is not None assert opendnp3.AnalogOutputDouble64() is not None assert opendnp3.BinaryCommandEvent() is not None assert opendnp3.ClassField() is not None assert opendnp3.ControlRelayOutputBlock() is not None assert opendnp3.DNPTime() is not None assert opendnp3.Flags() is not None assert opendnp3.GroupVariationID() is not None assert opendnp3.IndexedBinary() is not None assert opendnp3.IndexedDoubleBitBinary() is not None assert opendnp3.IndexedAnalog() is not None assert opendnp3.IndexedCounter() is not None assert opendnp3.IndexedFrozenCounter() is not None assert opendnp3.IndexedBinaryOutputStatus() is not None assert opendnp3.IndexedAnalogOutputStatus() is not None assert opendnp3.IndexedOctetString() is not None assert opendnp3.IndexedTimeAndInterval() is not None assert opendnp3.IndexedBinaryCommandEvent() is not None assert opendnp3.IndexedAnalogCommandEvent() is not None assert opendnp3.IndexedSecurityStat() is not None assert opendnp3.IndexedControlRelayOutputBlock() is not None assert opendnp3.IndexedAnalogOutputInt16() is not None assert opendnp3.IndexedAnalogOutputInt32() is not None assert opendnp3.IndexedAnalogOutputFloat32() is not None assert opendnp3.IndexedAnalogOutputDouble64() is not None assert opendnp3.Binary() is not None assert opendnp3.DoubleBitBinary() is not None assert opendnp3.BinaryOutputStatus() is not None assert opendnp3.Analog() is not None assert opendnp3.Counter() is not None assert opendnp3.FrozenCounter() is not None assert opendnp3.AnalogOutputStatus() is not None assert opendnp3.TimeAndInterval() is not None assert opendnp3.OctetData() is not None assert opendnp3.OctetString() is not None assert opendnp3.SecurityStat() is not None assert opendnp3.LinkHeaderFields() is not None assert opendnp3.LinkStatistics() is not None assert opendnp3.CommandSet() is not None assert opendnp3.HeaderInfo() is not None assert opendnp3.StartStopRangeUint8() is not None assert opendnp3.StartStopRangeUint16() is not None assert opendnp3.CountUint8() is not None assert opendnp3.CountUint16() is not None assert opendnp3.HeaderUnion() is not None assert opendnp3.Header() is not None assert opendnp3.MasterParams() is not None assert opendnp3.RestartOperationResult() is not None assert opendnp3.TaskConfig() is not None assert opendnp3.ApplicationIIN() is not None assert opendnp3.DatabaseSizes() is not None assert opendnp3.EventBufferConfig() is not None assert opendnp3.OutstationConfig() is not None assert opendnp3.OutstationParams() is not None assert opendnp3.StaticTypeBitField() is not None assert opendnp3.StackStatistics() is not None assert opendnp3.IINField() is not None assert openpal.ArrayBinaryConfig() is not None assert openpal.ArrayDoubleBitBinaryConfig() is not None assert openpal.ArrayAnalogConfig() is not None assert openpal.ArrayCounterConfig() is not None assert openpal.ArrayFrozenCounterConfig() is not None assert openpal.ArrayBOStatusConfig() is not None assert openpal.ArrayAOStatusConfig() is not None assert openpal.ArrayTimeAndIntervalConfig() is not None assert openpal.ArrayBuffer() is not None assert openpal.ArrayViewBinaryConfig() is not None assert openpal.ArrayViewDoubleBitBinaryConfig() is not None assert openpal.ArrayViewAnalogConfig() is not None assert openpal.ArrayViewCounterConfig() is not None assert openpal.ArrayViewFrozenCounterConfig() is not None assert openpal.ArrayViewBOStatusConfig() is not None assert openpal.ArrayViewAOStatusConfig() is not None assert openpal.ArrayViewTimeAndIntervalConfig() is not None assert openpal.ArrayViewBuffer() is not None assert openpal.Buffer() is not None assert openpal.RingBuffer16() is not None assert openpal.RSlice() is not None assert openpal.SecureBuffer() is not None assert openpal.SettableRSlice() is not None assert openpal.SettableWSlice() is not None assert openpal.StaticBuffer4() is not None assert openpal.StaticBuffer14() is not None assert openpal.StaticBuffer100() is not None assert openpal.StaticBuffer292() is not None assert openpal.WSlice() is not None assert openpal.MonotonicTimestamp() is not None assert openpal.TimeDurationBase() is not None assert openpal.TimeDuration() is not None assert openpal.UTCTimestamp() is not None assert openpal.LogFilters() is not None assert openpal.Logger() is not None assert openpal.SerializerBinary() is not None assert openpal.SerializerDoubleBitBinary() is not None assert openpal.SerializerBinaryOutputStatus() is not None assert openpal.SerializerAnalog() is not None assert openpal.SerializerCounter() is not None assert openpal.SerializerFrozenCounter() is not None assert openpal.SerializerAnalogOutputStatus() is not None assert openpal.SerializerTimeAndInterval() is not None assert openpal.SerializerAnalogOutputInt16() is not None assert openpal.SerializerAnalogOutputInt32() is not None assert openpal.SerializerAnalogOutputFloat32() is not None assert openpal.SerializerAnalogOutputDouble64() is not None
def test_passing_args(self): """ Create the class object with defined arguments and test if the object is not empty. """ assert asiodnp3.ConsoleLogger(True) is not None assert asiodnp3.DatabaseConfig(opendnp3.DatabaseSizes()) is not None assert asiodnp3.DNP3Manager(1) is not None assert asiodnp3.DNP3Manager( 1, asiodnp3.ConsoleLogger().Create()) is not None assert asiodnp3.OutstationStackConfig( opendnp3.DatabaseSizes()) is not None assert asiodnp3.X509Info(1, openpal.RSlice(), "test") is not None assert asiopal.ChannelRetry(openpal.TimeDuration(), openpal.TimeDuration()) is not None assert asiopal.ChannelRetry(openpal.TimeDuration(), openpal.TimeDuration(), asiopal.IOpenDelayStrategy()) is not None assert asiopal.Executor(asiopal.IO()) is not None assert asiopal.IPEndpoint("127.0.0.1", 502) is not None assert asiopal.LoggingConnectionCondition(openpal.Logger()) is not None assert asiopal.SerialChannel(asiopal.Executor( asiopal.IO())) is not None assert asiopal.TCPClient(openpal.Logger(), asiopal.Executor(asiopal.IO()), asiopal.IPEndpoint("127.0.0.1", 502), "adapter") is not None assert asiopal.ThreadPool(openpal.Logger(), asiopal.IO(), 1) is not None assert asiopal.TLSConfig("~/files/peerCert", "~/files/localCert", "~/files/privateKey") is not None assert opendnp3.AnalogOutputInt16( 1, opendnp3.CommandStatus.TIMEOUT) is not None assert opendnp3.AnalogOutputInt32( 1, opendnp3.CommandStatus.FORMAT_ERROR) is not None assert opendnp3.AnalogOutputFloat32( 1, opendnp3.CommandStatus.ALREADY_ACTIVE) is not None assert opendnp3.AnalogOutputDouble64( 1, opendnp3.CommandStatus.LOCAL) is not None assert opendnp3.BinaryCommandEvent(opendnp3.Flags()) is not None assert opendnp3.BinaryCommandEvent(opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.BinaryCommandEvent( True, opendnp3.CommandStatus.TOO_MANY_OPS) is not None assert opendnp3.BinaryCommandEvent( False, opendnp3.CommandStatus.NOT_AUTHORIZED, opendnp3.DNPTime()) is not None assert opendnp3.ClassField(opendnp3.PointClass.Class0) is not None assert opendnp3.ClassField(1) is not None assert opendnp3.ClassField(True, False, True, False) is not None assert opendnp3.ControlRelayOutputBlock( opendnp3.ControlCode.LATCH_ON, 1, 100, 100, opendnp3.CommandStatus.AUTOMATION_INHIBIT) is not None assert opendnp3.ControlRelayOutputBlock( 0x1, 1, 100, 100, opendnp3.CommandStatus.AUTOMATION_INHIBIT) is not None assert opendnp3.GroupVariationID(0x10, 0x1) is not None assert opendnp3.IINField(opendnp3.IINBit.ALL_STATIONS) is not None assert opendnp3.IndexedBinary(opendnp3.Binary(), 1) is not None assert opendnp3.IndexedDoubleBitBinary(opendnp3.DoubleBitBinary(), 1) is not None assert opendnp3.IndexedAnalog(opendnp3.Analog(), 1) is not None assert opendnp3.IndexedCounter(opendnp3.Counter(), 1) is not None assert opendnp3.IndexedFrozenCounter(opendnp3.FrozenCounter(), 1) is not None assert opendnp3.IndexedBinaryOutputStatus( opendnp3.BinaryOutputStatus(), 1) is not None assert opendnp3.IndexedAnalogOutputStatus( opendnp3.AnalogOutputStatus(), 1) is not None assert opendnp3.IndexedOctetString(opendnp3.OctetString(), 1) is not None assert opendnp3.IndexedTimeAndInterval(opendnp3.TimeAndInterval(), 1) is not None assert opendnp3.IndexedBinaryCommandEvent( opendnp3.BinaryCommandEvent(), 1) is not None assert opendnp3.IndexedAnalogCommandEvent( opendnp3.AnalogCommandEvent(), 1) is not None assert opendnp3.IndexedSecurityStat(opendnp3.SecurityStat(), 1) is not None assert opendnp3.IndexedControlRelayOutputBlock( opendnp3.ControlRelayOutputBlock(), 1) is not None assert opendnp3.IndexedAnalogOutputInt16(opendnp3.AnalogOutputInt16(), 1) is not None assert opendnp3.IndexedAnalogOutputInt32(opendnp3.AnalogOutputInt32(), 1) is not None assert opendnp3.IndexedAnalogOutputFloat32( opendnp3.AnalogOutputFloat32(), 1) is not None assert opendnp3.IndexedAnalogOutputDouble64( opendnp3.AnalogOutputDouble64(), 1) is not None assert opendnp3.Binary(True) is not None assert opendnp3.Binary(opendnp3.Flags()) is not None assert opendnp3.Binary(opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.Binary(False, opendnp3.Flags()) is not None assert opendnp3.Binary(True, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.DoubleBitBinary(opendnp3.DoubleBit(1), opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.BinaryOutputStatus(False, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.Analog(1.2, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.Counter(100, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.FrozenCounter(2000, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.AnalogOutputStatus(109.68, opendnp3.Flags(), opendnp3.DNPTime()) is not None assert opendnp3.TimeAndInterval(opendnp3.DNPTime(), 10, 0x1) is not None assert opendnp3.TimeAndInterval( opendnp3.DNPTime(), 10, opendnp3.IntervalUnits.Seconds) is not None assert opendnp3.OctetData(openpal.RSlice()) is not None assert opendnp3.OctetString(openpal.RSlice()) is not None assert opendnp3.SecurityStat(opendnp3.SecurityStatValue(), 0x1, opendnp3.DNPTime()) is not None assert opendnp3.SecurityStat(0x1, 10, 100) is not None assert opendnp3.SecurityStat(0x1, 10, 100, opendnp3.DNPTime()) is not None assert opendnp3.LinkConfig(True, True) is not None assert opendnp3.LinkConfig(True, False, 100, 10, 10, openpal.TimeDuration(), openpal.TimeDuration()) is not None assert opendnp3.LinkHeaderFields(opendnp3.LinkFunction.INVALID, False, True, False, 10, 10) is not None assert opendnp3.LinkStatistics( opendnp3.LinkStatisticsChannel(), opendnp3.LinkStatisticsParser()) is not None assert opendnp3.CommandPointResult( 100, 10, opendnp3.CommandPointState.INIT, opendnp3.CommandStatus.PROCESSING_LIMITED) is not None assert opendnp3.HeaderInfo(opendnp3.GroupVariation.Group10Var0, opendnp3.QualifierCode.UINT8_CNT, opendnp3.TimestampMode.SYNCHRONIZED, 100) is not None assert opendnp3.RestartOperationResult( opendnp3.TaskCompletion.SUCCESS, openpal.TimeDuration()) is not None assert opendnp3.DatabaseSizes(0, 1, 2, 3, 4, 5, 6, 7) is not None assert opendnp3.EventBufferConfig(0, 1, 2, 3, 4, 5, 6, 7) is not None assert opendnp3.OutstationConfig( opendnp3.OutstationParams(), opendnp3.EventBufferConfig()) is not None assert opendnp3.OutstationParams(opendnp3.IndexMode.Contiguous, 0x3, openpal.TimeDuration(), openpal.TimeDuration(), openpal.TimeDuration(), openpal.TimeDuration(), 10, 20, True, opendnp3.StaticTypeBitField(), opendnp3.ClassField()) is not None assert opendnp3.SimpleCommandHandler( opendnp3.CommandStatus.SUCCESS) is not None assert opendnp3.StaticTypeBitField(1) is not None assert opendnp3.StackStatistics( opendnp3.StackStatisticsLink(), opendnp3.StackStatisticsTransport()) is not None assert openpal.ArrayBinaryConfig(1) is not None assert openpal.ArrayDoubleBitBinaryConfig(1) is not None assert openpal.ArrayAnalogConfig(1) is not None assert openpal.ArrayCounterConfig(1) is not None assert openpal.ArrayFrozenCounterConfig(1) is not None assert openpal.ArrayBOStatusConfig(1) is not None assert openpal.ArrayAOStatusConfig(1) is not None assert openpal.ArrayTimeAndIntervalConfig(1) is not None assert openpal.ArrayBuffer(10) is not None assert openpal.Buffer(27) is not None assert openpal.Buffer(openpal.RSlice()) is not None assert openpal.LinkedListInt(5) is not None assert openpal.PairInt(5, 10) is not None assert openpal.RSlice(0xFF, 100) is not None assert openpal.SecureBuffer(10) is not None assert openpal.SecureBuffer(openpal.RSlice()) is not None assert openpal.WSlice(0x30, 20) is not None assert openpal.MonotonicTimestamp(100) is not None assert openpal.UTCTimestamp(900) is not None assert openpal.LogEntry("123", openpal.LogFilters(), "location 1", "test") is not None assert openpal.LogFilters(20) is not None assert openpal.LoggerSettings("234", openpal.LogFilters())
def test_pure_virtual_functions(self): """ Call the pure virtual function and test if it throws the correct exception error. """ try: asiodnp3.IChannel().GetStatistics() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IChannelListener().OnStateChange( opendnp3.ChannelState.CLOSED) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IListenCallbacks().AcceptConnection(123, "test") except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IMasterOperations().SetLogFilters(openpal.LogFilters()) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IMasterScan().Demand() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IMasterSession().GetStackStatistics() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IOutstation().SetRestartIIN() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiodnp3.IStack().Enable() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiopal.IOpenDelayStrategy().GetNextDelay(openpal.TimeDuration(), openpal.TimeDuration()) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: asiopal.IResource().Shutdown() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.IVisitorIndexedBinary().OnValue(opendnp3.IndexedBinary()) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.IVisitorDNPTime().OnValue(opendnp3.DNPTime()) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.IVisitorCommandPointResult().OnValue( opendnp3.CommandPointResult( 100, 10, opendnp3.CommandPointState.INIT, opendnp3.CommandStatus.PROCESSING_LIMITED)) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICollectionIndexedBinary().Count() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICollectionDNPTime().Count() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICollectionCommandPointResult().Count() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ITransactable().Start() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICommandCollectionControlRelayOutputBlock().Add( opendnp3.ControlRelayOutputBlock(), 1) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICommandCollectionAnalogOutputDouble64().Add( opendnp3.AnalogOutputDouble64(), 1) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICommandTaskResult( opendnp3.TaskCompletion.SUCCESS).Count() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.IMasterApplication().Now() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ISOEHandler().Process(opendnp3.HeaderInfo(), opendnp3.ICollectionIndexedBinary()) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ITaskCallback().OnStart() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.ICommandHandler().Start() except RuntimeError as err: assert "Tried to call pure virtual function" in str(err) try: opendnp3.IUpdateHandler().Update(opendnp3.Binary(True), 1) except RuntimeError as err: assert "Tried to call pure virtual function" in str(err)