tbf/TBFTests/Rig/Network/Camera/CJMS11/CameraTest.cs

199 lines
6.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Threading.Tasks;
using Common;
using JetBrains.Annotations;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TBF.Rig.Generic;
using TBF.Rig.Network.Camera.CJMS11;
using TBF.Rig.Network.Camera.RoiForFixedStartCJMS11;
using TBF.Rig.Network.Camera.RoiForFixedStartCJMS11.common;
using Factory = TBF.Rig.Network.Camera.CJMS11.Factory;
namespace TBFTests.Rig.Network.Camera.CJMS11
{
[TestClass]
//[Ignore("Excluded from automatic test runs - manual execution only")]
[TestSubject(typeof(TBF.Rig.Network.Camera.CJMS11.Camera))]
public class CameraTest
{
private static string ipCamera1 = "192.168.0.170";
private static string ipCamera2 = "192.168.0.129";
public string IPCamera1 { get { return ipCamera1; } }
public string IPCamera2 { get { return ipCamera2; } }
private RoiCfg CreateTestRoiCfg()
{
var factory = new TBF.Rig.Network.Camera.RoiForFixedStartCJMS11.Factory();
var roi = new RoiCfg("TestRoi", factory);
roi.BlackAndWhite = false;
roi.LowResolution = true;
roi.ImageRotation = ImageRotation.None;
roi.ImageFrame = Frame.StandardFrame();
return roi;
}
[TestMethod]
public void Initialize()
{
TBF.Rig.Network.Camera.CJMS11.Camera camera = GetCamera(IPCamera1);
camera.RoiConfiguration = CreateTestRoiCfg();
camera.Initialize();
TBF.Rig.Network.Camera.CJMS11.Camera camera2 = GetCamera( IPCamera2);
camera2.RoiConfiguration = CreateTestRoiCfg();
camera2.Initialize();
// TBF.Rig.Network.Camera.CJMS11.Camera camera11 = GetCamera( IPCamera1);
// camera11.Initialize();
//
// TBF.Rig.Network.Camera.CJMS11.Camera camera12 = GetCamera( IPCamera2);
// camera12.Initialize();
}
[TestMethod]
public void Initialize_TwoCamerasInParallel()
{
var task1 = Task.Run(() =>
{
var camera = GetCamera(IPCamera1);
camera.Initialize();
});
var task2 = Task.Run(() =>
{
var camera = GetCamera(IPCamera2);
camera.Initialize();
});
// var task3 = Task.Run(() =>
// {
// var camera = GetCamera(IPCamera2);
// camera.Initialize();
// });
//
// var task4 = Task.Run(() =>
// {
// var camera = GetCamera(IPCamera1);
// camera.Initialize();
// });
Task.WaitAll(task1, task2/*, task3, task4*/); // blocks until both finish
// Optionally, add assertions or diagnostics
Assert.IsTrue(task1.IsCompleted);
Assert.IsTrue(task2.IsCompleted);
// Assert.IsTrue(task3.IsCompleted);
// Assert.IsTrue(task4.IsCompleted);
}
[TestMethod]
public async Task Initialize_TwoCamerasInParallelAsync()
{
var task1 = Task.Run(() =>
{
var camera = GetCamera(IPCamera1);
camera.Initialize();
});
var task2 = Task.Run(() =>
{
var camera = GetCamera(IPCamera2);
camera.Initialize();
});
await Task.WhenAll(task1, task2); // blocks until both finish
// Optionally, add assertions or diagnostics
Assert.IsTrue(task1.IsCompleted);
Assert.IsTrue(task2.IsCompleted);
}
[TestMethod]
public async Task GrabImageTest()
{
var task1 = Task.Run(() =>
{
var camera = GetCamera(IPCamera1);
Task<Image> saveImageTask = Task.Run(() => camera.SaveImageListenerAsynch());
var timeoutAnswerTask = Task.Delay(TimeSpan.FromSeconds(3));
var completedAnswerTask = Task.WhenAny(saveImageTask, timeoutAnswerTask).Result;
if (completedAnswerTask == timeoutAnswerTask)
{
Assert.Fail();
}
//Assert.IsTrue(saveImageTask.Result != null);
});
var task2 = Task.Run(() =>
{
var camera = GetCamera(IPCamera2);
camera.Initialize();
});
// var task3 = Task.Run(() =>
// {
// var camera = GetCamera(IPCamera2);
//
// Task<Image> saveImageTask = Task.Run(() => camera.SaveImageListenerAsynch());
// var timeoutAnswerTask = Task.Delay(TimeSpan.FromSeconds(3));
// var completedAnswerTask = Task.WhenAny(saveImageTask, timeoutAnswerTask).Result;
// if (completedAnswerTask == timeoutAnswerTask)
// {
// Assert.Fail();
// }
//
// //TODO BUMI enable check image
// //Assert.IsTrue(saveImageTask.Result != null);
// });
//
// var task4 = Task.Run(() =>
// {
// var camera = GetCamera(IPCamera1);
// camera.Initialize();
// });
await Task.WhenAll(task1, task2/*,task3, task4*/); // blocks until both finish
// Optionally, add assertions or diagnostics
Assert.IsTrue(task1.IsCompleted);
Assert.IsTrue(task2.IsCompleted);
// Assert.IsTrue(task3.IsCompleted);
// Assert.IsTrue(task4.IsCompleted);
}
private TBF.Rig.Network.Camera.CJMS11.Camera GetCamera(string ip)
{
Factory factory = new Factory();
CameraCfg config = new CameraCfg("CameraJMS", factory);
config.IPAddressCJMS = ip;
TBF.Rig.Network.Adapter.Factory factoryNetadapter = new TBF.Rig.Network.Adapter.Factory();
IComponentCfg configNetadapter = new TBF.Rig.Network.Adapter.NetadapterCfg("Network.Adapter", factoryNetadapter);
IList<IComponent> components = new List<IComponent>();
IComponent netAdapter = factoryNetadapter.GetComponent(configNetadapter, null);
components.Add(netAdapter);
return new TBF.Rig.Network.Camera.CJMS11.Camera(config, components);
}
}
}