openstack-sdk-dotnet/OpenStack/OpenStack.Test/ServiceLocation/ServiceLocationAssemblyScannerTests.cs
Wayne Foley 52ca59f4fa Removed the OpenStack.Common assembly and combined it into a single OpenStack assembly.
Refactored the service location code to be compliant with PCLs.
Converted the Openstack assembly into a PCL, and updated the tests.
As part of the PCL converstion minor tweeks to stirng comparison and use of System.Security were updated.

Implements: blueprint convert-to-pcl-lib
Change-Id: I2091d009c506f6ee183d16a817902dfc341fab5a
2014-04-10 10:25:40 -07:00

223 lines
7.9 KiB
C#

// /* ============================================================================
// Copyright 2014 Hewlett Packard
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ============================================================================ */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Management;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenStack.Common.ServiceLocation;
namespace OpenStack.Test.ServiceLocation
{
[TestClass]
public class ServiceLocationAssemblyScannerTests
{
internal class TestRegistrar : IServiceLocationRegistrar
{
public void Register(IServiceLocationManager manager, IServiceLocator locator)
{
}
}
internal class OtherTestRegistrar : IServiceLocationRegistrar
{
public void Register(IServiceLocationManager manager, IServiceLocator locator)
{
}
}
internal class NonDefaultTestRegistrar : IServiceLocationRegistrar
{
public NonDefaultTestRegistrar(string beans)
{
//this is here to force a non-default constructor, this should not be loaded as a registrar.
}
public void Register(IServiceLocationManager manager, IServiceLocator locator)
{
throw new NotImplementedException();
}
}
[TestMethod]
public void CanAddNewAssembly()
{
var sweeper = new ServiceLocationAssemblyScanner();
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var temp = assemblies.First();
Assert.IsFalse(sweeper.HasNewAssemblies);
sweeper.AddAssembly(temp);
Assert.IsTrue(sweeper.HasNewAssemblies);
Assert.AreEqual(1,sweeper._assemblies.Count);
}
[TestMethod]
public void CanAddExistingAssembly()
{
var sweeper = new ServiceLocationAssemblyScanner();
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var temp = assemblies.First();
Assert.IsFalse(sweeper.HasNewAssemblies);
sweeper.AddAssembly(temp);
Assert.IsTrue(sweeper.HasNewAssemblies);
sweeper.AddAssembly(temp);
Assert.IsTrue(sweeper.HasNewAssemblies);
Assert.AreEqual(1, sweeper._assemblies.Count);
}
[TestMethod]
public void CanGetRegistrarTypes()
{
var sweeper = new ServiceLocationAssemblyScanner();
Assert.IsFalse(sweeper.HasNewAssemblies);
sweeper.AddAssembly(this.GetType().Assembly);
Assert.IsTrue(sweeper.HasNewAssemblies);
var types = sweeper.GetRegistrarTypes().ToList();
Assert.IsTrue(sweeper.HasNewAssemblies);
Assert.AreEqual(2, types.Count());
Assert.IsTrue(types.Contains(typeof(TestRegistrar)));
Assert.IsTrue(types.Contains(typeof(OtherTestRegistrar)));
}
[TestMethod]
public void CanGetRegistrarTypesWithAssemblyThatHasNoRegistrars()
{
var sweeper = new ServiceLocationAssemblyScanner();
Assert.IsFalse(sweeper.HasNewAssemblies);
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var temp = assemblies.First();
sweeper.AddAssembly(temp);
Assert.IsTrue(sweeper.HasNewAssemblies);
var types = sweeper.GetRegistrarTypes().ToList();
Assert.IsTrue(sweeper.HasNewAssemblies);
Assert.AreEqual(0, types.Count());
}
[TestMethod]
public void CanGetRegistrarTypesWithEmptyAssembliesCollection()
{
var sweeper = new ServiceLocationAssemblyScanner();
Assert.IsFalse(sweeper.HasNewAssemblies);
var types = sweeper.GetRegistrarTypes().ToList();
Assert.IsFalse(sweeper.HasNewAssemblies);
Assert.AreEqual(0, types.Count());
}
[TestMethod]
public void NoNewRegistrarsIfNoNewAssemblies()
{
bool getRegistrarsCalled = false;
var sweeper = new ServiceLocationAssemblyScanner();
sweeper.GetRegistrarTypes = () => { getRegistrarsCalled = false;
return new List<Type>();
};
var regs = sweeper.GetRegistrars();
Assert.IsFalse(getRegistrarsCalled);
Assert.AreEqual(0, regs.Count());
}
[TestMethod]
public void NewRegistrarsIfNewAssembliesPresent()
{
bool getRegistrarsCalled = false;
var sweeper = new ServiceLocationAssemblyScanner();
sweeper.HasNewAssemblies = true;
sweeper.GetRegistrarTypes = () =>
{
getRegistrarsCalled = true;
return new List<Type>() { typeof(TestRegistrar)};
};
var regs = sweeper.GetRegistrars().ToList();
Assert.IsTrue(getRegistrarsCalled);
Assert.AreEqual(1, regs.Count());
Assert.IsTrue(regs.First() is TestRegistrar);
}
[TestMethod]
public void ExistingRegistrarIsOverwritenWhenNewAssemblyFoundThatContainsIt()
{
bool getRegistrarsCalled = false;
var sweeper = new ServiceLocationAssemblyScanner();
sweeper._registrars.Add(typeof(TestRegistrar));
sweeper.HasNewAssemblies = true;
sweeper.GetRegistrarTypes = () =>
{
getRegistrarsCalled = true;
return new List<Type>() { typeof(TestRegistrar) };
};
var regs = sweeper.GetRegistrars().ToList();
Assert.IsTrue(getRegistrarsCalled);
Assert.AreEqual(1, regs.Count());
Assert.IsTrue(regs.First() is TestRegistrar);
Assert.AreEqual(1, sweeper._registrars.Count);
Assert.AreEqual(typeof(TestRegistrar), sweeper._registrars.First());
}
[TestMethod]
public void CanGetOnlyRegistrars()
{
var sweeper = new ServiceLocationAssemblyScanner();
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
assemblies.Remove(this.GetType().Assembly);
assemblies.ForEach(sweeper.AddAssembly);
Assert.IsTrue(sweeper.HasNewAssemblies);
var registrars = sweeper.GetRegistrars();
Assert.IsFalse(sweeper.HasNewAssemblies);
Assert.AreEqual(1, registrars.Count());
}
[TestMethod]
public void CanGetNewRegistrars()
{
var sweeper = new ServiceLocationAssemblyScanner();
var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
Assert.IsFalse(sweeper.HasNewAssemblies);
var registrars = sweeper.GetRegistrars();
Assert.IsFalse(sweeper.HasNewAssemblies);
Assert.AreEqual(0, registrars.Count());
sweeper.AddAssembly( this.GetType().Assembly );
Assert.IsTrue(sweeper.HasNewAssemblies);
registrars = sweeper.GetRegistrars();
Assert.IsFalse(sweeper.HasNewAssemblies);
Assert.AreEqual(2, registrars.Count());
}
}
}