Tuesday, October 6, 2015

TFS2015 API

Microsoft has taken a twist in their API as it now can work in 2 modes:
  • Soap - same objects as before
  • REST - new to TFS 2015, new objects which usually end with "HttpClient"

also now you need to install Nuget packages to get the TFS API dlls.
PackageDescriptionPrimary usage
Microsoft.TeamFoundationServer.ExtendedClientIntegrate with Microsoft Team Foundation Server (2012, 2013, 2015) and Visual Studio Online from desktop-based Windows applications. Work with and manage version control, work items, and build, and other resources from your client application.Existing Windows apps leveraging an older version of the TFS Client OM.
Microsoft.TeamFoundationServer.ClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based, ASP.NET, and other Windows applications. Provides access to version control, work item tracking, build, and more via public REST APIs.Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Online.
Microsoft.VisualStudio.Services.ClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based, ASP.NET, and other Windows applications. Provides access to shared platform services such as account, profile, identity, security, and more via public REST APIs.Windows desktop apps and services that need to interact with "shared platform" services (account, profile, identity, security, etc).
Microsoft.VisualStudio.Services.InteractiveClientIntegrate with Team Foundation Server 2015 and Visual Studio Online from desktop-based Windows applications that require interactive sign-in by a user.Windows desktop applications not utilizing basic authentication or OAuth for authentication.
taken from: https://www.visualstudio.com/en-us/integrate/get-started/client-libraries/dotnet

as seen in the above table you will need to install the "Microsoft.TeamFoundationServer.ExtendedClient" package to upgrade your old TFS apps.
this package also installs the other packages.
the down side of using these packages is that you get all the references that it contains and you need to remove unnecessary ones (there will be a lot of them).

example for using REST objects can be found at: https://www.visualstudio.com/en-us/integrate/get-started/client-libraries/samples

ImDisk Simple USB Drive

ImDisk is a dll which contains methods to emulate various storage devices (HDD, USB, CD).
unfortunately I haven't seen any seen any examples that i can use.
although there is a very detailed documents on the methods
http://www.ltr-data.se/library/ImDiskNet/html/b33f1e89-3d92-fc08-248d-14c5c2efd549.htm

so here is a simple example how to create a USB drive and disconnect it
// get device handle and free drive letter
uint deviceID = 0;
IntPtr statusControl = IntPtr.Zero;

string driveLetter = ImDiskAPI.FindFreeDriveLetter() + ":";

// create device          
// 40mb = 4096*1024*10
ImDiskAPI.CreateDevice(4096 * 1024 * 10, 0, 0, 0, 0, ImDiskFlags.Removable , @"USB", false, driveLetter, ref deviceID, statusControl);

Console.ReadKey();

// remove device        
ImDiskAPI.APIFlags = DLL.ImDiskAPIFlags.ForceDismount;
ImDiskAPI.RemoveDevice(driveLetter);

Monday, December 29, 2014

TFS2013 Web.Config Transformation in Build

Hi
i have been looking around how to create web.config transformation when using tfs build.
there are 3 options:
  • Use publish profile -         this is done by creating a publish profile (right click on the project and select publish), then add to the build definition, "MSBuild Arguments"
         /p:DeployOnBuild=true /p:PublishProfile=<ProjectLocation>\Properties\PublishProfiles\Test.pubxml
  • Add "xmlTransform" task to the csproj -  open the csproj file for edit (Unload and edit) and add right before the end
<Target Name="TransformConfigFiles" AfterTargets="AfterBuild" Condition="'$(TransformConfigFiles)'=='true'">
    <ItemGroup>
      <DeleteAfterBuild Include="$(WebProjectOutputDir)Web.*.config" />
    </ItemGroup>
    <TransformXml Source="Web.config" Transform="$(ProjectConfigTransformFileName)" Destination="$(WebProjectOutputDir)Web.config" />
    <Delete Files="@(DeleteAfterBuild)" />
</Target>
          in order to control this, you need to add to the build definition, "MSBuild Arguments"
          /p: TransformConfigFiles=true
  • Force MSBuild to run Config transformation - this is done by add to the build definition, "MSBuild Arguments"
          /p:UseWPP_CopyWebApplication=True /p:PipelineDependsOnBuild=False




just don't forge, if you are using TFS2013 with old build templates (2010/2012) you will also need to add "/p:VisualStudioVersion=12.0"

Saturday, November 22, 2014

Import Unit Tests to Test Cases

Using UI Automation and Unit tests in general is a good thing,
but VS does not provide a simple way of associating the tests to test cases.
you have to open a test case and associate the unit test, for one, two it ok,
for more then 10 its very tedious
in VS2010 we had a nice extesion called "Pronto",
in VS 2012 and above this does not work any more.

luckly the TCM command comes very handy here:
tcm testcase /import /collection:http://mytfs:8080/tfs/mycollection /teamproject:"myTeamProject" /storage:"fullpath_to_UT_DLL" [/filter:"test category"] [/syncsuite:"test suite id to update"]

this command will pass over all matching unit tests in the dll and add / update testcases.

MSDN TCM link : http://msdn.microsoft.com/en-us/library/ff942470.aspx

Saturday, July 19, 2014

TFS2013 Build, New Features Overview 1

TFS2013, brought many ALM ,cource control and  web access changes.
one of these changes was the integration of Git as a source control from Team projects.
another small one was adding scripts to the build templates.

TFS2013 brings us 2 new Build Templates
  1. TFVCTemplate.12.Xaml
  2. GitVCTemplate.12.Xaml
i will talk most on the TfvcTemplate.
here the template ,as you can see it's very simple compared to the previous versions (tfs2010 /2012).


here is the exception handling 
 here is the finally clause of the Try. the most important activity here is the "Reset the Environment".
this activity clears all the TF build environment variable which will talk about later.
 the template contains no If statements or parallel. so how does it control the activities?
simple each activity has an Enable switch.
also you might notice that there is no "for-each" like for the MSBuild like previous versions.
this means that a lot of the logic was entered to the MSBuild Activity.
you might also notice that there is no Get Build or Create workspace.
this was done to expose some common variables to the power shell scripts

CodedUI - Running tests on remote machines

CodedUI is just one of many UI testing tools.
It's a great tool for testing UI although it has it's problems.
but this post does not talk about the problems or it's wonderful abilities.

I want to show you how you can run the codedui Test from a build machine or directly from VS2010/2012 on VMs.

first of all we need to install a Test Rig, meaning install Test Controller and Test agents
you can use the following link to do that: http://msdn.microsoft.com/en-us/library/vstudio/hh546459.aspx

P.S: since we are not using the Lab Management don't associate the controller with a collection. also make sure the test agent runs in interactive mode.

we then need to set up the test settings file to execute the test remotely and give it the test controller name.

set the test setting file as active


now we are ready to run the codedui tests and they will run on the VM.
but it fails, it says something about remote connection not active?
well yes one of the draw backs of running on VMs you need an active RDP connection and minimized is no good, it must be up.

luckily there is a workaround, every OS running as VM has a console session that is always open against the host. we use the following command to use it:
tscon RDP-Tcp#0 /Dest:Console

more information about TsCon: http://technet.microsoft.com/en-us/library/cc770988.aspx

just 2 things:
1. you are local admin on the machine (you need permissions on Console session)
2. after you run this command you are automatically disconnected!!!

because of option 2 i always add the video data collector
[image]
so i can see the test result. the CodedUI log is hard to decipher.

you will notice that the test if it failed was usually due to the low resolution of the console.
for this problem i created a special data collector that has the ability to change the resolution of the machine,
I created a "Change Resolution Data Collector".

https://onedrive.live.com/redir?resid=C4BEA458C5283F0B!270&authkey=!APVYd1IOyjoryDk&ithint=file%2c.msi

Sunday, April 28, 2013

Check SQL Server Installed Components

Once in while i get to a client that performs the TFS installation on his own, generally most of them do a bad installation (maybe i just go to the bad ones....)
the first thing i do is to check the SQL installation.
basically there are 2 ways:
1. Add/Remove Programs (Slow and painfully...)
2. SQL Server features discovery Report (short and informative)

to get to the report, we Open "SQL Server Installation Center"
 

 
Click on "Tools->Installed SQL Server features discovery Report"
 
you'll get an HTML report of all the features installed on the machine with their version.