コード例 #1
0
        public bool TryAddDescriptorForLocation(Guid mountPointId, out IReadOnlyList <IInstallUnitDescriptor> descriptorList)
        {
            IMountPoint mountPoint = null;

            try
            {
                if (!((SettingsLoader)(_environmentSettings.SettingsLoader)).TryGetMountPointFromId(mountPointId, out mountPoint))
                {
                    descriptorList = null;
                    return(false);
                }

                if (InstallUnitDescriptorFactory.TryCreateFromMountPoint(_environmentSettings, mountPoint, out descriptorList))
                {
                    foreach (IInstallUnitDescriptor descriptor in descriptorList)
                    {
                        AddOrReplaceDescriptor(descriptor);
                    }
                }
                else
                {
                    return(false);
                }
            }
            finally
            {
                if (mountPoint != null)
                {
                    _environmentSettings.SettingsLoader.ReleaseMountPoint(mountPoint);
                }
            }

            return(true);
        }
コード例 #2
0
        public void InstallUnitDescriptorFactoryDispatchesToNupkgDescriptorFactoryAndCreatesDescriptorTest()
        {
            EngineEnvironmentSettings.SettingsLoader.Components.Register(typeof(NupkgInstallUnitDescriptorFactory));

            string    serializedDescriptor = @"
{
    ""3A06B18C-224E-46E3-95EB-8E411DB61B0B"":
    {
        ""FactoryId"": """ + NupkgInstallUnitDescriptorFactory.FactoryId.ToString() + @""",
        ""MountPointId"": ""D1ADBDAF-0382-4EEA-A43C-8356A8BEFAA9"",
        ""Identifier"": ""TestPackage"",
        ""Details"": {
            ""Version"": ""1.2.3"",
            ""Author"": ""Microsoft"",
        }
    }
}";
            JObject   descriptorJObject    = JObject.Parse(serializedDescriptor);
            JProperty descriptorProperty   = descriptorJObject.Properties().First();

            Assert.True(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorProperty, out IInstallUnitDescriptor parsedDescriptor));

            NupkgInstallUnitDescriptor nupkgDescriptor = parsedDescriptor as NupkgInstallUnitDescriptor;

            Assert.NotNull(nupkgDescriptor);

            Assert.Equal(NupkgInstallUnitDescriptorFactory.FactoryId, nupkgDescriptor.FactoryId);
            Assert.Equal("TestPackage", nupkgDescriptor.Identifier);
            Assert.Equal("D1ADBDAF-0382-4EEA-A43C-8356A8BEFAA9", nupkgDescriptor.MountPointId.ToString(), ignoreCase: true);
            Assert.Equal("1.2.3", nupkgDescriptor.Version);

            Assert.Equal("1.2.3", nupkgDescriptor.Details["Version"]);
        }
コード例 #3
0
        public void InstallUnitDescriptorFactoryDispatchesToNupkgDescriptorFactoryAndCreatesDescriptorTest()
        {
            EngineEnvironmentSettings.SettingsLoader.Components.Register(typeof(NupkgInstallUnitDescriptorFactory));

            string  serializedDescriptor = @"
{
    ""FactoryId"": """ + NupkgInstallUnitDescriptorFactory.FactoryId.ToString() + @""",
    ""Details"": {
        ""MountPointId"": ""D1ADBDAF-0382-4EEA-A43C-8356A8BEFAA9"",
        ""PackageName"": ""TestPackage"",
        ""Version"": ""1.2.3""
    }
}";
            JObject descriptorJObject    = JObject.Parse(serializedDescriptor);

            Assert.True(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorJObject, out IInstallUnitDescriptor parsedDescriptor));

            NupkgInstallUnitDescriptor nupkgDescriptor = parsedDescriptor as NupkgInstallUnitDescriptor;

            Assert.NotNull(nupkgDescriptor);

            Assert.Equal(NupkgInstallUnitDescriptorFactory.FactoryId, nupkgDescriptor.FactoryId);
            Assert.Equal("TestPackage", nupkgDescriptor.Identifier);
            Assert.Equal("TestPackage", nupkgDescriptor.PackageName);
            Assert.Equal("D1ADBDAF-0382-4EEA-A43C-8356A8BEFAA9", nupkgDescriptor.MountPointId.ToString(), ignoreCase: true);
            Assert.Equal("1.2.3", nupkgDescriptor.Version);

            Assert.Equal("D1ADBDAF-0382-4EEA-A43C-8356A8BEFAA9", nupkgDescriptor.Details["MountPointId"], ignoreCase: true);
            Assert.Equal("TestPackage", nupkgDescriptor.Details["PackageName"]);
            Assert.Equal("1.2.3", nupkgDescriptor.Details["Version"]);
        }
コード例 #4
0
        public void InstallUnitDescriptorFactoryFailsGracefullyOnMissingDetailsTest()
        {
            string  serializedDescriptor = @"
{
    ""FactoryId"": ""25AB3648-DC67-4A95-A658-5EEE8ADC2695"",
}";
            JObject descriptorJObject    = JObject.Parse(serializedDescriptor);

            Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorJObject, out IInstallUnitDescriptor descriptor));
        }
コード例 #5
0
        public void InstallUnitDescriptorFactoryFailsGracefullyOnMissingFactoryIdTest()
        {
            string  serializedDescriptor = @"
{
    ""Details"": {
    }
}";
            JObject descriptorJObject    = JObject.Parse(serializedDescriptor);

            Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorJObject, out IInstallUnitDescriptor descriptor));
        }
コード例 #6
0
        public void InstallUnitDescriptorFactoryFailsGracefullyOnUnknownDescriptorFactoryIdTest()
        {
            // guid was randomly generated, doesn't match any descriptor factory
            string  serializedDescriptor = @"
{
    ""FactoryId"": ""25AB3648-DC67-4A95-A658-5EEE8ADC2695"",
    ""Details"": {
    }
}";
            JObject descriptorJObject    = JObject.Parse(serializedDescriptor);

            Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorJObject, out IInstallUnitDescriptor descriptor));
        }
コード例 #7
0
        public static InstallUnitDescriptorCache FromJObject(IEngineEnvironmentSettings environmentSettings, JObject cacheObj)
        {
            List <IInstallUnitDescriptor> allDescriptors = new List <IInstallUnitDescriptor>();

            foreach (JProperty descriptorProperty in cacheObj.PropertiesOf(nameof(Descriptors)))
            {
                if (InstallUnitDescriptorFactory.TryParse(environmentSettings, descriptorProperty, out IInstallUnitDescriptor parsedDescriptor))
                {
                    allDescriptors.Add(parsedDescriptor);
                }
            }

            return(new InstallUnitDescriptorCache(environmentSettings, allDescriptors));
        }
コード例 #8
0
        public void InstallUnitDescriptorFactoryFailsGracefullyOnStructuredDetailsDataTest()
        {
            string  serializedDescriptor = @"
{
    ""FactoryId"": ""25AB3648-DC67-4A95-A658-5EEE8ADC2695"",
    ""Details"": {
        ""OuterKey"" : {
            ""InnerKey"": ""InnerValue""
        }
    }
}";
            JObject descriptorJObject    = JObject.Parse(serializedDescriptor);

            Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorJObject, out IInstallUnitDescriptor descriptor));
        }
コード例 #9
0
        public void InstallUnitDescriptorFactoryFailsGracefullyOnUnknownDescriptorFactoryIdTest()
        {
            // guid was randomly generated, doesn't match any descriptor factory
            string    serializedDescriptor = @"
{
  ""2DB9FBE1-5DFA-4A56-A9B7-8291236D7580"": 
    {
        ""FactoryId"": ""25AB3648-DC67-4A95-A658-5EEE8ADC2695"",
        ""Details"": {
        }
    }
}";
            JObject   descriptorObject     = JObject.Parse(serializedDescriptor);
            JProperty descriptorProperty   = descriptorObject.Properties().First();

            Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, descriptorProperty, out IInstallUnitDescriptor descriptor));
        }
コード例 #10
0
        public static InstallUnitDescriptorCache FromJObject(IEngineEnvironmentSettings environmentSettings, JObject cacheObj)
        {
            List <IInstallUnitDescriptor> allDescriptors = new List <IInstallUnitDescriptor>();

            foreach (JProperty prop in cacheObj.PropertiesOf(nameof(Descriptors)))
            {
                JObject descriptorObj = prop.Value as JObject;

                if (InstallUnitDescriptorFactory.TryParse(environmentSettings, descriptorObj, out IInstallUnitDescriptor parsedDescriptor))
                {
                    allDescriptors.Add(parsedDescriptor);
                }
            }

            Dictionary <Guid, string> installedItems = new Dictionary <Guid, string>();

            foreach (KeyValuePair <string, string> item in cacheObj.ToStringDictionary(propertyName: nameof(InstalledItems)))
            {
                installedItems[Guid.Parse(item.Key)] = item.Value;
            }

            return(new InstallUnitDescriptorCache(environmentSettings, allDescriptors, installedItems));
        }
コード例 #11
0
 public void InstallUnitDescriptorFactoryTryParseFailsGracefullyOnNullDescriptorObjectTest()
 {
     Assert.False(InstallUnitDescriptorFactory.TryParse(EngineEnvironmentSettings, null, out IInstallUnitDescriptor descriptor));
 }
コード例 #12
0
        public bool TryAddDescriptorForLocation(Guid mountPointId)
        {
            IMountPoint mountPoint = null;

            try
            {
                if (!((SettingsLoader)(_environmentSettings.SettingsLoader)).TryGetMountPointFromId(mountPointId, out mountPoint))
                {
                    return(false);
                }

                string uninstallString = mountPoint.Info.Place;

                //Adjust the uninstall string for NuGet packages if needed
                if (uninstallString.EndsWith(".nupkg", StringComparison.OrdinalIgnoreCase))
                {
                    bool isFile = false;
                    if (mountPoint.Info.ParentMountPointId == Guid.Empty)
                    {
                        isFile = _environmentSettings.Host.FileSystem.FileExists(mountPoint.Info.Place);
                    }
                    else if (((SettingsLoader)(_environmentSettings.SettingsLoader)).TryGetMountPointFromId(mountPoint.Info.ParentMountPointId, out IMountPoint parentMountPoint))
                    {
                        try
                        {
                            isFile = parentMountPoint.FileInfo(mountPoint.Info.Place)?.Exists ?? false;
                        }
                        finally
                        {
                            _environmentSettings.SettingsLoader.ReleaseMountPoint(parentMountPoint);
                        }
                    }

                    if (isFile)
                    {
                        if (NupkgInstallUnitDescriptorFactory.TryGetPackageInfoFromNuspec(mountPoint, out string packageName, out string _))
                        {
                            uninstallString = packageName;
                        }
                    }
                }

                _installedItems[mountPointId] = uninstallString;

                if (!InstallUnitDescriptorFactory.TryCreateFromMountPoint(_environmentSettings, mountPoint, out IReadOnlyList <IInstallUnitDescriptor> descriptorList))
                {
                    return(false);
                }

                foreach (IInstallUnitDescriptor descriptor in descriptorList)
                {
                    AddOrReplaceDescriptor(descriptor);
                }
            }
            finally
            {
                if (mountPoint != null)
                {
                    _environmentSettings.SettingsLoader.ReleaseMountPoint(mountPoint);
                }
            }

            return(true);
        }