Пример #1
0
        public void HelperWithManageabilityProviderForMissingSectionDoesNothing()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey userKey = new MockRegistryKey(false);

            currentUser.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), userKey);
            MockRegistryKey machineKey = new MockRegistryKey(false);

            localMachine.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), machineKey);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(AltSectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsFalse(manageabilityProvider.called);
            Assert.AreEqual(0, currentUser.GetRequests().Count);
            Assert.AreEqual(0, localMachine.GetRequests().Count);

            Assert.IsTrue(MockRegistryKey.CheckAllClosed(userKey, machineKey));
        }
Пример #2
0
        public void WillForwardChangeEventInConfigurationSetting()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.ConfigurationSettingChanged += OnConfigurationSettingChanged;

            helper.UpdateConfigurationManageability(configurationAccessor);

            IEnumerator <ConfigurationSetting> publishedSettings = wmiPublisher.GetPublishedInstances().GetEnumerator();

            Assert.IsTrue(publishedSettings.MoveNext());

            Assert.IsNull(notifiedChangeSource);
            ((ConfigurationSetting)publishedSettings.Current).Commit(); // commit changes
            Assert.AreEqual(SectionName, notifiedChangeSource);
        }
Пример #3
0
        public void HelperWillNotSendRegistryKeysIfNotAvailable()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey machineKey = new MockRegistryKey(false);

            localMachine.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), machineKey);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsTrue(manageabilityProvider.called);
            Assert.IsTrue(manageabilityProvider.readGroupPolicies);
            Assert.AreEqual(1, currentUser.GetRequests().Count);
            Assert.IsNull(manageabilityProvider.userKey);
            Assert.AreEqual(1, localMachine.GetRequests().Count);
            Assert.AreSame(machineKey, manageabilityProvider.machineKey);

            Assert.IsTrue(MockRegistryKey.CheckAllClosed(machineKey));
        }
Пример #4
0
        public void HelperWillRevokePublishedSettingsOnReprocess()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(1, wmiPublisher.GetPublishedInstances().Count);
            ConfigurationSetting publishedSetting = new List <ConfigurationSetting>(wmiPublisher.GetPublishedInstances())[0];

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(1, wmiPublisher.GetPublishedInstances().Count);
            ConfigurationSetting rePublishedSetting = new List <ConfigurationSetting>(wmiPublisher.GetPublishedInstances())[0];

            Assert.AreNotSame(publishedSetting, rePublishedSetting);
        }
Пример #5
0
        public void HelperWithManageabilityProviderForExistingSectionDoesInvokeWithApproriateParameters()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey userKey = new MockRegistryKey(false);

            currentUser.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), userKey);
            MockRegistryKey machineKey = new MockRegistryKey(false);

            localMachine.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), machineKey);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsTrue(manageabilityProvider.called);
            Assert.AreEqual(1, wmiPublisher.GetPublishedInstances().Count);
            Assert.AreEqual(1, currentUser.GetRequests().Count);
            Assert.AreSame(userKey, manageabilityProvider.userKey);
            Assert.AreEqual(1, localMachine.GetRequests().Count);
            Assert.AreSame(machineKey, manageabilityProvider.machineKey);

            Assert.IsTrue(MockRegistryKey.CheckAllClosed(userKey, machineKey));
        }
Пример #6
0
        public void HelperIgnoresUpdateSectionsListWithMappedProviderForMissingSection()
        {
            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsFalse(manageabilityProvider.called);
        }
Пример #7
0
        public void UpdateOnSectionReappliesPoliciesAndRepublishesWmiObjects()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey userKey = new MockRegistryKey(false);

            currentUser.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), userKey);
            userKey.AddBooleanValue(RegistryKeyBase.PolicyValueName, true);
            userKey.AddStringValue(MockConfigurationSectionManageabilityProvider.ValuePropertyName, "Overriden");
            MockRegistryKey machineKey = new MockRegistryKey(false);

            localMachine.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), machineKey);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.ConfigurationSettingChanged += OnConfigurationSettingChangedTriggerUpdate;
            helper.UpdateConfigurationManageability(configurationAccessor);

            // check the original setting was published alright.
            IEnumerator <ConfigurationSetting> publishedInstances = wmiPublisher.GetPublishedInstances().GetEnumerator();

            Assert.IsTrue(publishedInstances.MoveNext());
            TestConfigurationSettings originalSetting = publishedInstances.Current as TestConfigurationSettings;

            Assert.IsNotNull(originalSetting);
            Assert.AreEqual("Overriden", originalSetting.Value);
            Assert.IsFalse(publishedInstances.MoveNext());

            // change and notify
            originalSetting.Value = "Foo";
            originalSetting.Commit();

            // check the updated setting is indeed updated and a new instance
            // the gp override should still take precedence
            publishedInstances = wmiPublisher.GetPublishedInstances().GetEnumerator();
            Assert.IsTrue(publishedInstances.MoveNext());
            TestConfigurationSettings updatedSetting = publishedInstances.Current as TestConfigurationSettings;

            Assert.IsNotNull(updatedSetting);
            Assert.AreNotSame(originalSetting, updatedSetting);
            Assert.AreEqual("Overriden", updatedSetting.Value);
            Assert.IsFalse(publishedInstances.MoveNext());
        }
Пример #8
0
        public void HelperIgnoresUpdateSectionsListWithoutMappedProvider()
        {
            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(0, currentUser.GetRequests().Count);
            Assert.AreEqual(0, localMachine.GetRequests().Count);
        }
        public void SubProvidersAreSetForNewInstance()
        {
            MockConfigurationElementManageabilityProvider subProvider1 = new MockConfigurationElementManageabilityProvider();
            MockConfigurationElementManageabilityProvider subProvider2 = new MockConfigurationElementManageabilityProvider();
            IDictionary <Type, ConfigurationElementManageabilityProvider> subProviders
                = new Dictionary <Type, ConfigurationElementManageabilityProvider>();

            subProviders.Add(typeof(String), subProvider1);
            subProviders.Add(typeof(Boolean), subProvider2);
            MockConfigurationSectionManageabilityProvider provider = new MockConfigurationSectionManageabilityProvider(subProviders);

            Assert.IsNull(provider.GetSubProvider(typeof(Int32)));
            Assert.AreSame(subProvider1, provider.GetSubProvider(typeof(String)));
            Assert.AreSame(subProvider2, provider.GetSubProvider(typeof(Boolean)));
        }
Пример #10
0
        public void HelperPerformsUpdateForSectionNotPreviouslyProcessed()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsTrue(manageabilityProvider.called);
        }
Пример #11
0
        public void UpdateOnSectionRepublishesWmiObjects()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey userKey    = new MockRegistryKey(false);
            MockRegistryKey machineKey = new MockRegistryKey(false);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.ConfigurationSettingChanged += OnConfigurationSettingChangedTriggerUpdate;
            helper.UpdateConfigurationManageability(configurationAccessor);

            // check the original setting was published alright.
            IEnumerator <ConfigurationSetting> publishedInstances = wmiPublisher.GetPublishedInstances().GetEnumerator();

            Assert.IsTrue(publishedInstances.MoveNext());
            TestConfigurationSettings originalSetting = publishedInstances.Current as TestConfigurationSettings;

            Assert.IsNotNull(originalSetting);
            Assert.AreEqual(originalValue, originalSetting.Value);
            Assert.IsFalse(publishedInstances.MoveNext());

            // change and notify
            originalSetting.Value = "Foo";
            originalSetting.Commit();

            // check the updated setting is indeed updated and a new instance
            publishedInstances = wmiPublisher.GetPublishedInstances().GetEnumerator();
            Assert.IsTrue(publishedInstances.MoveNext());
            TestConfigurationSettings updatedSetting = publishedInstances.Current as TestConfigurationSettings;

            Assert.IsNotNull(updatedSetting);
            Assert.AreNotSame(originalSetting, updatedSetting);
            Assert.AreEqual(originalSetting.Value, updatedSetting.Value);
            Assert.IsFalse(publishedInstances.MoveNext());
        }
Пример #12
0
        public void HelperWillSendAppropriateParameterIfWmiIsDisabled()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, false, wmiPublisher, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsTrue(manageabilityProvider.called);
            Assert.IsTrue(manageabilityProvider.readGroupPolicies);
            Assert.IsFalse(manageabilityProvider.generateWmiObjects);
            Assert.AreEqual(0, wmiPublisher.GetPublishedInstances().Count);
        }
Пример #13
0
        public void WmiSettingsArePublishedWithApplicationAndSectionName()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, false, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(1, wmiPublisher.GetPublishedInstances().Count);
            ConfigurationSetting publishedSetting = new List <ConfigurationSetting>(wmiPublisher.GetPublishedInstances())[0];

            Assert.AreEqual(ApplicationName, publishedSetting.ApplicationName);
            Assert.AreEqual(SectionName, publishedSetting.SectionName);
        }
Пример #14
0
        public void HelperRevokesPublishedObjectsForRemovedSection()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(1, wmiPublisher.GetPublishedInstances().Count);

            configurationSource.Remove(SectionName);
            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.AreEqual(0, wmiPublisher.GetPublishedInstances().Count);
        }
Пример #15
0
        public void WillNotRemoveRegisteredSectionWithDisabledPolicyIfPolicyOverridesAreDisabled()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockRegistryKey machineKey = new MockRegistryKey(false);

            localMachine.AddSubKey(ManageabilityHelper.BuildSectionKeyName(ApplicationName, SectionName), machineKey);
            machineKey.AddBooleanValue(AdmContentBuilder.AvailableValueName, false);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);
            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, false, registryAccessor, ApplicationName);

            Assert.IsTrue(configurationSource.Contains(SectionName));

            helper.UpdateConfigurationManageability(configurationAccessor);

            Assert.IsTrue(configurationSource.Contains(SectionName));
        }
Пример #16
0
        public void WillRemoveHandlerForChangeEventInConfigurationSettingWhenRevoked()
        {
            TestsConfigurationSection section = new TestsConfigurationSection(originalValue);

            configurationSource.Add(SectionName, section);

            MockConfigurationSectionManageabilityProvider manageabilityProvider
                = new MockConfigurationSectionManageabilityProvider(subProviders);

            manageabilityProviders.Add(SectionName, manageabilityProvider);

            ManageabilityHelper helper
                = new ManageabilityHelper(manageabilityProviders, true, registryAccessor, true, wmiPublisher, ApplicationName);

            helper.ConfigurationSettingChanged += OnConfigurationSettingChanged;

            helper.UpdateConfigurationManageability(configurationAccessor);

            IEnumerator <ConfigurationSetting> publishedSettings = wmiPublisher.GetPublishedInstances().GetEnumerator();

            Assert.IsTrue(publishedSettings.MoveNext());

            // same as before, check that the setting's commit will trigger the event
            Assert.IsNull(notifiedChangeSource);
            ((ConfigurationSetting)publishedSettings.Current).Commit(); // commit changes
            Assert.AreEqual(SectionName, notifiedChangeSource);

            // remove the section and update the manageability
            configurationSource.Remove(SectionName);
            helper.UpdateConfigurationManageability(configurationAccessor);

            // check that *the original* setting's commit will not trigger changes now
            notifiedChangeSource = null;
            ((ConfigurationSetting)publishedSettings.Current).Commit(); // commit changes
            Assert.IsNull(notifiedChangeSource);
        }