void TestModeForReceiveOperation(XModemProtocol.XModemMode mode) { var randomData = _rdg.GetRandomData(40000).ToList(); var communicator = new ComSendCollection(); var context = new Context { Mode = mode, Data = randomData, Communicator = communicator, }; var cts = new List <List <byte> >(context.Packets); cts.Add(new List <byte> { context.Options.EOT }); var expectedData = new List <List <byte> > { new List <byte> { context.Mode == XModemProtocol.XModemMode.Checksum ? context.Options.NAK : context.Options.C }, }; expectedData.AddRange(Enumerable.Repeat(new List <byte> { context.Options.ACK }, cts.Count).ToList()); IOperation operation = new ReceiveOperation(); context.Data = new List <byte>(); communicator.CollectionToSend = cts; operation.Go(context); Assert.AreEqual(expectedData, communicator.BytesRead); }
void TestModeForSendOperation(XModemProtocol.XModemMode mode) { var communicator = new ComSendCollection(); var context = new Context { Mode = mode, Data = _rdg.GetRandomData(40000).ToList(), Communicator = communicator, }; var dts = new List <List <byte> > { new List <byte> { mode == XModemProtocol.XModemMode.Checksum ? context.Options.NAK : context.Options.C } }; double payloadCount = mode == XModemProtocol.XModemMode.OneK ? 1024.0 : 128.0; int ackCount = (int)Math.Ceiling(context.Data.Count / payloadCount) + 1; dts.AddRange(Enumerable.Repeat(new List <byte> { context.Options.ACK }, ackCount)); communicator.CollectionToSend = dts; IOperation operation = new SendOperation(); operation.Go(context); var expectedData = new List <List <byte> >(context.Packets); expectedData.Add(new List <byte> { context.Options.EOT }); Assert.AreEqual(expectedData, communicator.BytesRead); }
void RunTest(Action <XModemProtocol.XModemMode> method) { var modes = new XModemProtocol.XModemMode[] { XModemProtocol.XModemMode.Checksum, XModemProtocol.XModemMode.CRC, XModemProtocol.XModemMode.OneK, }; foreach (var mode in modes) { method(mode); } }
public void InitializeReceiveTest() { IContext context = new Context(); var communicator = new ComSendCollection(); var cts = new CancellationTokenSource(); IInitializer ini = new InitializeReceive(); var options = new XModemProtocolOptions(); bool excThrown = false; // Attach communicator. context.Communicator = communicator; // Drop options to minimums allowed. options.ReceiverInitializationTimeout = 0; options.ReceiverMaxNumberOfInitializationBytesForCRC = 0; options.ReceiverMaxNumberOfInitializationBytesInTotal = 0; context.Options = options; // Modes to test in succeeding loop. var modes = new XModemProtocol.XModemMode[] { XModemProtocol.XModemMode.OneK, XModemProtocol.XModemMode.CRC, XModemProtocol.XModemMode.Checksum, }; foreach (var mode in modes) { // Update mode. context.Mode = mode; // Construct expected data from operation. var expectedData = new List <List <byte> >(); switch (mode) { case XModemProtocol.XModemMode.Checksum: expectedData = new List <List <byte> >(Enumerable.Repeat(new List <byte> { context.Options.NAK }, context.Options.ReceiverMaxNumberOfInitializationBytesInTotal)); break; default: expectedData.AddRange(Enumerable.Repeat(new List <byte> { context.Options.C }, context.Options.ReceiverMaxNumberOfInitializationBytesForCRC)); expectedData.AddRange(Enumerable.Repeat(new List <byte> { context.Options.NAK }, context.Options.ReceiverMaxNumberOfInitializationBytesInTotal - context.Options.ReceiverMaxNumberOfInitializationBytesForCRC)); break; } // Run test, and catch inevitable XModemProtocolException. excThrown = false; try { ini.Initialize(context); } catch (XModemProtocolException ex) { excThrown = ex.AbortArgs.Reason == XModemProtocol.XModemAbortReason.InitializationFailed; } // Test to see if XModemProtocolException was thrown, and reason was XModemProtocol.XModemAbortReason.InitializationFailed. Assert.IsTrue(excThrown); // Test to see if communicator read expected data which was receiver attempting to begin communication. Assert.AreEqual(expectedData, communicator.BytesRead); // Clear communicator buffers. communicator.BytesToSend = null; communicator.BytesRead = null; } // Test cancellation function of initializer. excThrown = false; context.Token = cts.Token; Task testRun = Task.Run(() => { try { ini.Initialize(context); } catch (XModemProtocolException ex) { excThrown = ex.AbortArgs.Reason == XModemProtocol.XModemAbortReason.Cancelled; } }); Task.Run(() => cts.Cancel()); testRun.Wait(); // Test to see if XModemProtocolException was thrown, and reason was XModemProtocol.XModemAbortReason.Cancelled. Assert.IsTrue(excThrown); }
public void InitializeSendTest() { IContext context = new Context(); var communicator = new ComSendCollection(); var cts = new CancellationTokenSource(); IInitializer ini = new InitializeSend(); var options = new XModemProtocolOptions(); bool excThrown = false; // Attach communicator. context.Communicator = communicator; // Drop options to speed up test. options.SenderInitializationTimeout = 1000; context.Options = options; // 1). Test to see if CRC initialization is accepted by OneK, and CRC // and if checksum initialization is accepted by Checksum. // Modes to test in succeeding loop. var modes = new XModemProtocol.XModemMode[] { XModemProtocol.XModemMode.OneK, XModemProtocol.XModemMode.CRC, XModemProtocol.XModemMode.Checksum, }; foreach (var mode in modes) { context.Mode = mode; // Assign proper initialization byte by mode. switch (mode) { case XModemProtocol.XModemMode.Checksum: communicator.BytesToSend = new List <byte> { context.Options.NAK }; break; default: communicator.BytesToSend = new List <byte> { context.Options.C }; break; } ini.Initialize(context); // Test to see if mode is does not change. Assert.AreEqual(mode, context.Mode); } // 2). Test to see if checksum byte downgrades CRC and OneK to // Checksum. // Modes to test in succeeding loop. modes = new XModemProtocol.XModemMode[] { XModemProtocol.XModemMode.OneK, XModemProtocol.XModemMode.CRC, }; communicator.BytesToSend = new List <byte> { context.Options.NAK }; foreach (var mode in modes) { context.Mode = mode; // Test to see if mode changes. ini.Initialize(context); Assert.AreEqual(XModemProtocol.XModemMode.Checksum, context.Mode); } // 3). Test to see if Checksum mode will not respond to CRC initialization. communicator.BytesToSend = new List <byte> { context.Options.C }; try { ini.Initialize(context); } catch (XModemProtocolException ex) { excThrown = ex.AbortArgs.Reason == XModemProtocol.XModemAbortReason.InitializationFailed; } // Test to see if XModemProtocolException was thrown, and reason was XModemProtocol.XModemAbortReason.InitializationFailed. Assert.IsTrue(excThrown); // 4). Test timeout function of initializer. communicator.BytesToSend = null; excThrown = false; try { ini.Initialize(context); } catch (XModemProtocolException ex) { excThrown = ex.AbortArgs.Reason == XModemProtocol.XModemAbortReason.InitializationFailed; } // Test to see if XModemProtocolException was thrown, and reason was XModemProtocol.XModemAbortReason.InitializationFailed. Assert.IsTrue(excThrown); // 5). Test cancellation function of initializer. excThrown = false; context.Token = cts.Token; Task testRun = Task.Run(() => { try { ini.Initialize(context); } catch (XModemProtocolException ex) { excThrown = ex.AbortArgs.Reason == XModemProtocol.XModemAbortReason.Cancelled; } }); Task.Run(() => cts.Cancel()); testRun.Wait(); // Test to see if XModemProtocolException was thrown, and reason was XModemProtocol.XModemAbortReason.Cancelled. Assert.IsTrue(excThrown); }