Exemple #1
0
        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);
                }
            });
        }
Exemple #2
0
        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);
                }
            });
        }
Exemple #3
0
        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);
                }
            });
        }