public void PerformanceCountersFromNonInstrumentedClassesAreNotAdded()
		{
			PerformanceCounterInstaller parentInstaller = new PerformanceCounterInstaller();
			PerformanceCounterInstallerBuilder builder
				= new PerformanceCounterInstallerBuilder(new Type[] { typeof(NonInstrumentedClass) });
			builder.Fill(parentInstaller);

			Assert.AreEqual(0, parentInstaller.Installers.Count);
		}
        public void TypeWithNoCountersReturnsEmptyInstallers()
        {
            Installer parentInstaller = new Installer();
			PerformanceCounterInstallerBuilder builder
				= new PerformanceCounterInstallerBuilder(new Type[] { typeof(NoCountersType) });
            builder.Fill(parentInstaller);

            Assert.AreEqual(0, parentInstaller.Installers.Count);
        }
		public void SingleCounterIsAddedToInstaller()
		{
			Installer parentInstaller = new Installer();
			PerformanceCounterInstallerBuilder builder
				= new PerformanceCounterInstallerBuilder(new Type[] { typeof(SingleCounterType) });
			builder.Fill(parentInstaller);

			Assert.AreEqual(1, parentInstaller.Installers.Count);
			Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());
			
			PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];

			CounterCreationData createdCounterData = installer.Counters[0];
			Assert.AreEqual("Bill", createdCounterData.CounterName);
			Assert.AreEqual("Help Bill", createdCounterData.CounterHelp);
			Assert.AreEqual(PerformanceCounterType.CounterMultiTimer, createdCounterData.CounterType);
		}
		public void MultipleCountersInSingleTypeAreAllAddedToInstaller()
		{
			Installer parentInstaller = new Installer();
			PerformanceCounterInstallerBuilder builder
				= new PerformanceCounterInstallerBuilder(new Type[] { typeof(MultipleCounterTypeForCategoryA) });
			builder.Fill(parentInstaller);

			Assert.AreEqual(1, parentInstaller.Installers.Count);
			Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());

			PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];

			Assert.AreEqual(2, installer.Counters.Count);
			CounterCreationData firstCounter = installer.Counters[0];
			CounterCreationData secondCounter = installer.Counters[1];
			Assert.IsFalse(Object.ReferenceEquals(firstCounter, secondCounter));
			Assert.IsFalse(firstCounter.Equals(secondCounter));
		}
        public void CounterCategoryInformationIsPopulatedIntoCreatedInstaller()
        {
            Installer parentInstaller = new Installer();
            PerformanceCounterInstallerBuilder builder
                = new PerformanceCounterInstallerBuilder(new Type[] { typeof(MultipleCounterTypeForCategoryA) });
            builder.Fill(parentInstaller);

            Assert.AreEqual(1, parentInstaller.Installers.Count);
            Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());

            PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];

            Assert.AreEqual(PerformanceCounterCategoryType.MultiInstance, installer.CategoryType);
            Assert.AreEqual("CategoryName", installer.CategoryName);
            Assert.AreEqual("This is the help", installer.CategoryHelp);
        }
 public void NoExceptionThrownIfNoInstrumentedTypesInList()
 {
     PerformanceCounterInstaller installer = new PerformanceCounterInstaller();
     PerformanceCounterInstallerBuilder builder =
         new PerformanceCounterInstallerBuilder(new Type[] { typeof(NonInstrumentedClass) });
     builder.Fill(installer);
 }
        public void IntersectingIdenticalCountersForSameCategoriesInDifferentTypesKeepsSingleCounter()
        {
            Installer parentInstaller = new Installer();
            PerformanceCounterInstallerBuilder builder
                = new PerformanceCounterInstallerBuilder(
                    new Type[] {
                        typeof(MultipleCounterTypeForCategoryA),
                        typeof(AlternativeMultipleCounterTypeForCategoryAWithRepeatedIdenticalCounterDefinition) });
            builder.Fill(parentInstaller);

            Assert.AreEqual(1, parentInstaller.Installers.Count);
            Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());

            PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];
            Assert.AreEqual(PerformanceCounterCategoryType.MultiInstance, installer.CategoryType);
            Assert.AreEqual("CategoryName", installer.CategoryName);
            Assert.AreEqual("This is the help", installer.CategoryHelp);

            Assert.AreEqual(3, installer.Counters.Count);
        }
 public void IntersectingDifferentCountersForSameCategoriesInDifferentTypesThrows()
 {
     Installer parentInstaller = new Installer();
     PerformanceCounterInstallerBuilder builder
         = new PerformanceCounterInstallerBuilder(
             new Type[] {
                 typeof(MultipleCounterTypeForCategoryA),
                 typeof(AlternativeMultipleCounterTypeForCategoryAWithRepeatedDifferentCounterDefinition) });
     builder.Fill(parentInstaller);
 }
        public void IntersectingCountersForDifferentCategoriesInDifferentTypesCreatesMultipleInstallers()
        {
            Installer parentInstaller = new Installer();
            PerformanceCounterInstallerBuilder builder
                = new PerformanceCounterInstallerBuilder(
                    new Type[] {
                        typeof(MultipleCounterTypeForCategoryA),
                        typeof(MultipleCounterTypeForCategoryB) });
            builder.Fill(parentInstaller);

            Assert.AreEqual(2, parentInstaller.Installers.Count);
            Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());
            Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[1].GetType());

            PerformanceCounterInstaller installer1 = (PerformanceCounterInstaller)parentInstaller.Installers[0];
            Assert.AreEqual(PerformanceCounterCategoryType.MultiInstance, installer1.CategoryType);
            Assert.AreEqual("CategoryName", installer1.CategoryName);
            Assert.AreEqual("This is the help", installer1.CategoryHelp);
            Assert.AreEqual(2, installer1.Counters.Count);
            Assert.IsFalse(Object.ReferenceEquals(installer1.Counters[0], installer1.Counters[1]));
            Assert.IsFalse(installer1.Counters[0].Equals(installer1.Counters[1]));

            PerformanceCounterInstaller installer2 = (PerformanceCounterInstaller)parentInstaller.Installers[1];
            Assert.AreEqual(PerformanceCounterCategoryType.MultiInstance, installer2.CategoryType);
            Assert.AreEqual("CategoryNameB", installer2.CategoryName);
            Assert.AreEqual("This is the help", installer2.CategoryHelp);
            Assert.AreEqual(2, installer2.Counters.Count);
            Assert.IsFalse(Object.ReferenceEquals(installer2.Counters[0], installer2.Counters[1]));
            Assert.IsFalse(installer2.Counters[0].Equals(installer2.Counters[1]));
        }
        public void DisjointCountersForSameCategoriesInDifferentTypesCreatesSingleInstaller()
        {
            Installer parentInstaller = new Installer();
            PerformanceCounterInstallerBuilder builder
                = new PerformanceCounterInstallerBuilder(new Type[] { typeof(MultipleCounterTypeForCategoryA), typeof(AlternativeMultipleCounterTypeForCategoryA) });
            builder.Fill(parentInstaller);

            Assert.AreEqual(1, parentInstaller.Installers.Count);
            Assert.AreSame(typeof(PerformanceCounterInstaller), parentInstaller.Installers[0].GetType());

            PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];
            Assert.AreEqual(PerformanceCounterCategoryType.MultiInstance, installer.CategoryType);
            Assert.AreEqual("CategoryName", installer.CategoryName);
            Assert.AreEqual("This is the help", installer.CategoryHelp);

            Assert.AreEqual(4, installer.Counters.Count);
        }
        public void CountersWithBaseCountersAreAddedToInstallerInCorrectOrder()
        {
            Installer parentInstaller = new Installer();
            PerformanceCounterInstallerBuilder builder = new PerformanceCounterInstallerBuilder(new Type[] { typeof(TypeWithComplexCounter) });
            builder.Fill(parentInstaller);

            PerformanceCounterInstaller installer = (PerformanceCounterInstaller)parentInstaller.Installers[0];

            Assert.AreEqual(2, installer.Counters.Count);

            CounterCreationData realCounter = installer.Counters[0];
            CounterCreationData baseCounter = installer.Counters[1];

            Assert.AreEqual("real name", realCounter.CounterName);
            Assert.AreEqual(PerformanceCounterType.RawFraction, realCounter.CounterType);

            Assert.AreEqual("base name", baseCounter.CounterName);
            Assert.AreEqual(PerformanceCounterType.RawBase, baseCounter.CounterType);
        }