Target Families
These samples show how to create target families and run tests against them.
C#
//-----------------------------------------------------------------------
// <copyright file="AdvancedTargetFamily.cs" company="Microsoft">
// Copyright © Microsoft Corporation. All rights reserved.
// </copyright>
//-----------------------------------------------------------------------
namespace Samples
{
using System.Collections.Generic;
using System.Linq;
using Microsoft.Windows.Kits.Hardware.ObjectModel;
using Microsoft.Windows.Kits.Hardware.ObjectModel.DBConnection;
public class AdvancedTargetFamily
{
public static void Main(string[] args)
{
string projectName = "my new project";
string controllerName = args[1];
// first, connect to the server
ProjectManager manager = new DatabaseProjectManager(controllerName);
//---------------
// machine and machine pool management
//---------------
// now, create a machine pool
MachinePool rootPool = manager.GetRootMachinePool();
MachinePool testPool = manager.GetRootMachinePool().CreateChildPool("TestPool");
// find all the computers in the default pool, and move them into the test pool
foreach (Machine machine in rootPool.DefaultPool.GetMachines())
{
rootPool.DefaultPool.MoveMachineTo(machine, testPool);
}
// now, make sure that the computers are in a ready state
foreach (Machine machine in testPool.GetMachines())
{
machine.SetMachineStatus(MachineStatus.Ready, -1);
}
// create a device family
string[] HardwareIds = { @"HID\VID_045E&PID_006A&REV_1717&Col01", @"HID\VID_045E&PID_006A&Col01", @"HID_DEVICE_SYSTEM_MOUSE" };
DeviceFamily mouseDeviceFamily = manager.CreateDeviceFamily("My Device Family", HardwareIds);
//---------------
// creating a project
//---------------
Project project = manager.CreateProject(projectName);
// now you have a group of computers in your test pool
// you must figure out what distinct list of OSPlatfoms are in there
HashSet<OSPlatform> platformList = new HashSet<OSPlatform>();
foreach (Machine machine in testPool.GetMachines())
{
if (platformList.Contains(machine.OSPlatform) == false)
{
platformList.Add(machine.OSPlatform);
}
}
//---------------
// creating a product instance, one for each OSType
//---------------
foreach (OSPlatform platform in platformList)
{
ProductInstance pi = project.CreateProductInstance("Product instance for " + platform.Description, testPool, platform);
TargetFamily targetFamily = pi.CreateTargetFamily(mouseDeviceFamily);
// next, enumerate all the devices in the system that use one of the hardware IDs in the device family
foreach (TargetData data in pi.FindTargetFromDeviceFamily(mouseDeviceFamily))
{
// check this first, to see if this can be added
if (targetFamily.IsValidTarget(data))
{
targetFamily.CreateTarget(data);
}
}
// start running these tests now
pi.QueueTest();
}
//-----------------
// some time passes, and no more computers are available to run these tests
// so now you must add more computers to the pool
//-----------------
foreach (Machine machine in testPool.DefaultPool.GetMachines())
{
// filter out any computer where the OSPlatform is not already part of the project
if (platformList.Contains(machine.OSPlatform))
{
rootPool.DefaultPool.MoveMachineTo(machine, testPool);
machine.SetMachineStatus(MachineStatus.Ready, -1);
// get the target family again
ProductInstance pi = project.GetProductInstances().Where(x => x.OSPlatform == machine.OSPlatform).First();
TargetFamily targetFamily = pi.GetTargetFamilies().Where(x => x.Family == mouseDeviceFamily).First();
foreach (TargetData data in pi.FindTargetFromDeviceFamily(mouseDeviceFamily))
{
if (targetFamily.IsValidTarget(data))
{
targetFamily.CreateTarget(data);
}
}
}
}
// now, reschedule any job that hasn't run yet
foreach (Test test in project.GetTests().Where(x => (x.Status == TestResultStatus.InQueue) || (x.Status == TestResultStatus.NotRun)))
{
foreach (TestResult result in test.GetTestResults().Where(x => x.Status == TestResultStatus.InQueue))
{
result.Cancel();
}
// this will reschedule the tests on the new hardware/targets, as needed
test.QueueTest();
}
}
}
}
Windows PowerShell®
$ObjectModel = [Reflection.Assembly]::LoadFrom($env:WTTSTDIO + "microsoft.windows.Kits.Hardware.objectmodel.dll")
$ObjectModel = [Reflection.Assembly]::LoadFrom($env:WTTSTDIO + "microsoft.windows.Kits.Hardware.objectmodel.dbconnection.dll")
Clear-Host
write-Host "Usage: %SystemRoot%\syswow64\WindowsPowerShell\v1.0\powershell.exe -file TargetFamily.ps1 <<ControllerMachineName>> "
$ControllerName = $args[0]
if ($ControllerName -eq $null -OR $ControllerName -eq "")
{
write-host "Need to supply the controller Name as a parameter to this script"
return
}
else
{
write-host connecting to the controller $ControllerName
}
# connect to the controller
$Manager = new-object -typename Microsoft.Windows.Kits.Hardware.ObjectModel.DBConnection.DatabaseProjectManager -Args $ControllerName, DTMJobs
$RootPool = $Manager.GetRootMachinePool()
$DefaultPool = $RootPool.DefaultPool
# create the pool
$TestPool = $RootPool.CreateChildPool("TestPool")
# find all the computers in the default pool, and move them into the test pool
$DefaultPool.GetMachines() | foreach {
write-host $_.Name
$DefaultPool.MoveMachineTo($_, $TestPool)
}
# now, make sure that the computers are in a ready state
$TestPool.GetMachines() | foreach { $_.SetMachineStatus([Microsoft.Windows.Kits.Hardware.ObjectModel.MachineStatus]::Ready, 1) }
# create a device family
[string[]]$HardwareIds = "HID\VID_045E&PID_006A&REV_1717&Col01", "HID\VID_045E&PID_006A&Col01", "HID_DEVICE_SYSTEM_MOUSE"
$DeviceFamily = $Manager.CreateDeviceFamily("My Device Family", $HardwareIds)
# create a project
$Project = $Manager.CreateProject("My Device Family Project {0}" -f [DateTime]::Now.ToString())
# create a product instance by using the operating system platform of the first computer that you find
$ProductInstance = $Project.CreateProductInstance("My Product Instance", $TestPool, $TestPool.GetMachines()[0].OSPlatform)
# create a target family by using the device family that you created earlier
$TargetFamily = $ProductInstance.CreateTargetFamily($DeviceFamily)
#find all the devices in this machine pool that are in this device family
$ProductInstance.FindTargetFromDeviceFamily($DeviceFamily) | foreach {
"attempting to add target $_.Name on machine $_.Machine.Name to TargetFamily"
# and add those to the target family
# check this first, to make sure that this can be added to the target family
if ($TargetFamily.IsValidTarget($_)) {
$TargetFamily.CreateTarget($_)
}
}
#schedule all tests
$Project.GetTests() | foreach {
"test {0} is {1}" -f $_.Name, $_.ScheduleOptions.ToString()
Write-Host "running test {0} " -f $_.Name
$_.QueueTest();
}