Skip to content

Commit

Permalink
unit test fix and unique identifier implementation
Browse files Browse the repository at this point in the history
Fixes unit test for Sinjection build task
adds unique identifier for the installation
  • Loading branch information
codingadventures committed May 30, 2018
1 parent c50f1c8 commit cc0a850
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 13 deletions.
2 changes: 2 additions & 0 deletions Src/BridgeVs.Build/SInjection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
using System.Reflection;
using System.Threading;
using BridgeVs.Build.Util;
using BridgeVs.Shared.Common;
using BridgeVs.Shared.Logging;
using Mono.Cecil;
using Mono.Cecil.Pdb;
Expand Down Expand Up @@ -125,6 +126,7 @@ public SInjection(string assemblyLocation, string snkCertificatePath = null, Pat
_assemblyLocation = assemblyLocation;
_snkCertificatePath = snkCertificatePath;
_mode = mode;

Log.Write("Assembly being Injected {0}", assemblyLocation);

// if (IsAssemblyInExcludedList(Path.GetFileName(assemblyLocation))) return;
Expand Down
23 changes: 21 additions & 2 deletions Src/BridgeVs.Locations/Common/CommonRegistryConfigurations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@ public class CommonRegistryConfigurations
{
private const string ErrorTrackingRegistryValue = "SentryErrorTracking";
private const string SerializationMethodRegistryValue = "SerializationMethod";
public static string LoggingRegistryValue = "Logging";
public const string LoggingRegistryValue = "Logging";

// ReSharper disable once InconsistentNaming
private const string LINQPadInstallationPathRegistryValue = "LINQPadInstallationPath";
// ReSharper disable once InconsistentNaming
private const string LINQPadVersionPathRegistryValue = "LINQPadVersion";

public const string InstallationGuidRegistryValue = "UniqueId";


// ReSharper disable once InconsistentNaming
public static string GetLINQPadInstallationPath(string vsVersion)
Expand Down Expand Up @@ -65,7 +67,7 @@ public static void SetErrorTracking(string vsVersion, bool enabled)
public static string GetOriginalAssemblyLocation(Type @type, string vsVersion)
{
bool isSystemAssembly(string name) => name.Contains("Microsoft") || name.Contains("System") || name.Contains("mscorlib");

string registryKeyPath = $@"Software\LINQBridgeVs\{vsVersion}\Solutions";

using (RegistryKey key = Registry.CurrentUser.OpenSubKey(registryKeyPath))
Expand Down Expand Up @@ -145,5 +147,22 @@ public static void SetLogging(string vsVersion, bool enabled)
key?.SetValue(LoggingRegistryValue, enabled);
}
}

public static string GetUniqueGuid(string vsVersion)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey($@"Software\LINQBridgeVs\{vsVersion}"))
{
return key?.GetValue(InstallationGuidRegistryValue) as string;

}
}

public static void SetUniqueGuid(string vsVersion, string guid)
{
using (RegistryKey key = Registry.CurrentUser.CreateSubKey($@"Software\LINQBridgeVs\{vsVersion}"))
{
key?.SetValue(InstallationGuidRegistryValue, guid);
}
}
}
}
4 changes: 2 additions & 2 deletions Src/BridgeVs.Locations/Logging/RavenWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ private RavenWrapper()
HttpRequester request = req as HttpRequester;
//GDPR compliant, no personal data sent: no server name, no username stored, no ip address
request.Data.JsonPacket.ServerName = "linqbridgevs";
request.Data.JsonPacket.Contexts.Device.Name = "linqbridgevs";
request.Data.JsonPacket.User.Username = "linqbridgevs-" + DateTime.Now.ToLongTimeString();
request.Data.JsonPacket.Contexts.Device.Name = "linqbridgevs";
request.Data.JsonPacket.User.Username = CommonRegistryConfigurations.GetUniqueGuid(VisualStudioVersion);
request.Data.JsonPacket.Release = "1.4.6"; //read it from somewhere
request.Data.JsonPacket.User.IpAddress = "0.0.0.0";
return request;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ public static class PackageConfigurator
public static List<string> Dependencies => new List<string>
{
"BridgeVs.Grapple.dll",
"BridgeVs.Locations.dll",
"BridgeVs.Shared.dll",
"BridgeVs.Logging.dll",
"Newtonsoft.Json.dll",
"System.IO.Abstractions.dll",
"SharpRaven.dll"
Expand Down Expand Up @@ -127,7 +125,7 @@ private static bool IsLINQPadInstalled(string vsVersion)
return false;
}

private static void SetEnvironment(string vsVersion, string vsEdition)
private static void DeployMsBuildTargets(string vsVersion, string vsEdition)
{
string msBuildDir = CreateMsBuildTargetDirectory(vsVersion, vsEdition);
//Copy the CustomAfter and CustomBefore to the default MSbuild v4.0 location
Expand Down Expand Up @@ -245,7 +243,9 @@ public static bool Install(string vsVersion, string vsEdition)
//Always check if installation folder has changed
SetInstallationFolder(vsVersion);

SetEnvironment(vsVersion, vsEdition);
DeployMsBuildTargets(vsVersion, vsEdition);

GenerateGuidForCurrentInstallation(vsVersion);

DeleteExistingVisualizers(vsVersion);

Expand All @@ -254,6 +254,11 @@ public static bool Install(string vsVersion, string vsEdition)
return true;
}

private static void GenerateGuidForCurrentInstallation(string vsVersion)
{
CommonRegistryConfigurations.SetUniqueGuid(vsVersion, Guid.NewGuid().ToString());
}

public static void DeployDependencies(string vsVersion)
{
string currentLocation = Path.GetDirectoryName(typeof(PackageConfigurator).Assembly.Location);
Expand Down
18 changes: 18 additions & 0 deletions Src/BridgeVs.VsPackage.Helper/Settings/PackageSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,24 @@ public sealed class PackageSettings : DialogPage

private string _linqPadInstallationPath = Defaults.LINQPadInstallationPath;

[Category("Installation")]
[DisplayName("ID")]
[Description("Unique installation ID. Please if you open a bug refer to this ID.")]
[ReadOnly(true)]
public string InstallationId
{
get
{
var dte = (DTE)GetService(typeof(SDTE));
if (dte != null)
{
return CommonRegistryConfigurations.GetUniqueGuid(dte.Version);
}

return string.Empty;
}
}

[Category("LINQPad")]
[DisplayName("Installation Path")]
[Description("Sets the path to the LINQPad exe")]
Expand Down
24 changes: 19 additions & 5 deletions Test/BridgeVs.Build.Test/SInjectionBuildTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Reflection;
using System.IO;
using System.Reflection;
using BridgeVs.Build.Tasks;
using BridgeVs.Model.Test;
using Microsoft.VisualStudio.TestTools.UnitTesting;
Expand All @@ -8,21 +9,34 @@ namespace BridgeVs.Build.Test
[TestClass]
public class SInjectionBuildTest
{
private static Assembly _assemblyModel;
private static string _assemblyToInjectLocation;

[ClassInitialize]
public static void Init(TestContext context)
{
_assemblyModel = typeof(CustomType1).Assembly;
Assembly assemblyModel = typeof(CustomType1).Assembly;
//need to copy the assembly because it is loaded in the app domain and cannot
//be changed as it's readonly
string fileName = Path.GetFileNameWithoutExtension(assemblyModel.Location);
string newFileName = fileName + "_test";
string location = Path.GetDirectoryName(assemblyModel.Location);
_assemblyToInjectLocation = Path.Combine(location, newFileName) + ".dll";
File.Copy(assemblyModel.Location, _assemblyToInjectLocation, true);
}


[ClassCleanup]
public static void Cleanup()
{
File.Delete(_assemblyToInjectLocation);
}

[TestMethod]
[TestCategory("UnitTest")]
public void SInjection_BuildTask_Test_Should_Succeed()
{
SInjectionBuildTask sInjectionBuildTask = new SInjectionBuildTask
{
Assembly = _assemblyModel.Location
Assembly = _assemblyToInjectLocation
};

bool result = sInjectionBuildTask.Execute();
Expand Down

0 comments on commit cc0a850

Please sign in to comment.