public void TestUpload() { UploadJobWorker worker = null; AtemMockServerWrapper.Each(_output, _pool, (a, b) => worker?.HandleCommand(a, b), DeviceTestCases.MacroTransfer, helper => { helper.DisposeSdkClient = true; var pool = helper.SdkClient.SdkSwitcher as IBMDSwitcherMacroPool; Assert.NotNull(pool); for (int i = 0; i < 5; i++) { AtemState stateBefore = helper.Helper.BuildLibState(); uint index = Randomiser.RangeInt((uint)stateBefore.Macros.Pool.Count); string name = Guid.NewGuid().ToString(); byte[] op = new CutTransitionMacroOp { Index = MixEffectBlockId.One }.ToByteArray(); byte[] fakeOp = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte[] combined = op.Concat(fakeOp).ToArray(); worker = new UploadJobWorker((uint)combined.Length, _output, 0xffff, index, DataTransferUploadRequestCommand.TransferMode.Write2 | DataTransferUploadRequestCommand.TransferMode.Clear2); // var cb = new TestMediaPoolStills.LockCallback(); // helper.SendAndWaitForChange(stateBefore, () => { .Lock(cb); }); // Assert.True(cb.Wait.WaitOne(2000)); pool.CreateMacro((uint)combined.Length, out IBMDSwitcherMacro macro); macro.GetBytes(out IntPtr buffer); Marshal.Copy(combined, 0, buffer, combined.Length); var uploadCb = new TransferCallback(); pool.AddCallback(uploadCb); pool.Upload(index, name, "not now", macro, out IBMDSwitcherTransferMacro transfer); MacroState.ItemState macroState = stateBefore.Macros.Pool[(int)index]; macroState.Name = name; macroState.Description = "not now"; macroState.HasUnsupportedOps = true; macroState.IsUsed = true; helper.HandleUntil(uploadCb.Wait, 1000); Assert.True(uploadCb.Wait.WaitOne(500)); Assert.Equal(_BMDSwitcherMacroPoolEventType.bmdSwitcherMacroPoolEventTypeTransferCompleted, uploadCb.Result); Assert.Equal(BitConverter.ToString(combined), BitConverter.ToString(worker.Buffer)); helper.Helper.CheckStateChanges(stateBefore); } }); }
public void TestDownload() { DownloadJobWorker worker = null; AtemMockServerWrapper.Each(_output, _pool, (a, b) => worker?.HandleCommand(a, b), DeviceTestCases.MacroTransfer, helper => { helper.DisposeSdkClient = true; var pool = helper.SdkClient.SdkSwitcher as IBMDSwitcherMacroPool; Assert.NotNull(pool); for (int i = 0; i < 5; i++) { AtemState stateBefore = helper.Helper.BuildLibState(); uint index = Randomiser.RangeInt((uint)stateBefore.Macros.Pool.Count); string name = Guid.NewGuid().ToString(); byte[] op = new CutTransitionMacroOp { Index = MixEffectBlockId.One }.ToByteArray(); byte[] fakeOp = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte[] combined = op.Concat(fakeOp).ToArray(); worker = new DownloadJobWorker(_output, 0xffff, index, combined); // var cb = new TestMediaPoolStills.LockCallback(); // helper.SendAndWaitForChange(stateBefore, () => { .Lock(cb); }); // Assert.True(cb.Wait.WaitOne(2000)); var downloadCb = new TransferCallback(); pool.AddCallback(downloadCb); pool.Download(index, out IBMDSwitcherTransferMacro transfer); helper.HandleUntil(downloadCb.Wait, 1000); Assert.True(downloadCb.Wait.WaitOne(500)); Assert.Equal(_BMDSwitcherMacroPoolEventType.bmdSwitcherMacroPoolEventTypeTransferCompleted, downloadCb.Result); transfer.GetMacro(out IBMDSwitcherMacro macro); macro.GetBytes(out IntPtr buffer); byte[] bytes = new byte[macro.GetSize()]; Marshal.Copy(buffer, bytes, 0, bytes.Length); Assert.Equal(BitConverter.ToString(combined), BitConverter.ToString(bytes)); helper.Helper.CheckStateChanges(stateBefore); } }); }
public void TestAbortUpload() { AbortedUploadJobWorker worker = null; AtemMockServerWrapper.Each(_output, _pool, (a, b) => worker?.HandleCommand(a, b), DeviceTestCases.MacroTransfer, helper => { helper.DisposeSdkClient = true; var pool = helper.SdkClient.SdkSwitcher as IBMDSwitcherMacroPool; Assert.NotNull(pool); for (int i = 0; i < 3; i++) { AtemState stateBefore = helper.Helper.BuildLibState(); uint index = Randomiser.RangeInt((uint)stateBefore.Macros.Pool.Count); byte[] op = new CutTransitionMacroOp { Index = MixEffectBlockId.One }.ToByteArray(); byte[] fakeOp = { 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; byte[] combined = op.Concat(fakeOp).ToArray(); worker = new AbortedUploadJobWorker(_output); pool.CreateMacro((uint)combined.Length, out IBMDSwitcherMacro macro); macro.GetBytes(out IntPtr buffer); Marshal.Copy(combined, 0, buffer, combined.Length); var uploadCb = new TransferCallback(); pool.AddCallback(uploadCb); pool.Upload(index, "some thing", "not now", macro, out IBMDSwitcherTransferMacro transfer); // Short bit of work before the abort helper.HandleUntil(uploadCb.Wait, 1000); transfer.Cancel(); helper.HandleUntil(uploadCb.Wait, 1000); Assert.True(uploadCb.Wait.WaitOne(500)); Assert.Equal(_BMDSwitcherMacroPoolEventType.bmdSwitcherMacroPoolEventTypeTransferCancelled, uploadCb.Result); helper.Helper.CheckStateChanges(stateBefore); } }); }