Ejemplo n.º 1
0
        public async void PackagesInstallNullFqn()
        {
            PackageInstallationOptions options = new PackageInstallationOptions();

            HttpResponseMessage response = await Controller.PackagesInstall(null, options);

            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
        }
Ejemplo n.º 2
0
        public async void PackagesInstall()
        {
            PackageInstallationOptions options = new PackageInstallationOptions();

            HttpResponseMessage response = await Controller.PackagesInstall("test", options);

            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
Ejemplo n.º 3
0
        public async void PackagesInstallNotFound()
        {
            PackageManager.Setup(p => p.FindPackageArchiveAsync(It.IsAny <string>()))
            .ReturnsAsync(default(IPackageArchive));

            PackageInstallationOptions options = new PackageInstallationOptions();

            HttpResponseMessage response = await Controller.PackagesInstall("test", options);

            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
        }
Ejemplo n.º 4
0
        public async void PackagesInstallFailure()
        {
            PackageManager.Setup(p => p.InstallPackageAsync(It.IsAny <IPackageArchive>(), It.IsAny <PackageInstallationOptions>()))
            .ReturnsAsync(new Result <IPackage>(ResultCode.Failure));

            PackageInstallationOptions options = new PackageInstallationOptions();

            HttpResponseMessage response = await Controller.PackagesInstall("test", options);

            Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
        }
Ejemplo n.º 5
0
        public void Constructor()
        {
            PackageInstallationOptions test = new PackageInstallationOptions()
            {
                Overwrite        = false,
                PublicKey        = string.Empty,
                SkipVerification = false,
            };

            Assert.IsType <PackageInstallationOptions>(test);
            Assert.False(test.Overwrite);
            Assert.Equal(string.Empty, test.PublicKey);
            Assert.False(test.SkipVerification);
        }
Ejemplo n.º 6
0
        public async Task <HttpResponseMessage> PackagesInstall(string fqn, [FromBody] PackageInstallationOptions options)
        {
            HttpResponseMessage retVal;
            ParameterValidator  validator = new ParameterValidator(ModelState);

            if (string.IsNullOrEmpty(fqn))
            {
                retVal = Request.CreateResponse(HttpStatusCode.BadRequest, new ParameterValidator().AddError("fqn", "The specified Fully Qualified Name is null or empty.").Result, JsonFormatter());
            }
            else if (!validator.IsValid)
            {
                retVal = Request.CreateResponse(HttpStatusCode.BadRequest, validator.Result);
            }
            else
            {
                IPackageArchive findResult = await PackageManager.FindPackageArchiveAsync(fqn);

                if (findResult != default(IPackageArchive))
                {
                    PackageInstallationOptions installOptions = new PackageInstallationOptions()
                    {
                        Overwrite        = options.Overwrite,
                        SkipVerification = options.SkipVerification,
                        PublicKey        = options.PublicKey,
                    };

                    IResult <IPackage> installResult = await PackageManager.InstallPackageAsync(findResult, installOptions);

                    if (installResult.ResultCode != ResultCode.Failure)
                    {
                        retVal = Request.CreateResponse(HttpStatusCode.OK, installResult.ReturnValue, JsonFormatter());
                    }
                    else
                    {
                        HttpErrorResult result = new HttpErrorResult($"Failed to install Package '{fqn}'.", installResult);
                        retVal = Request.CreateResponse(HttpStatusCode.InternalServerError, result, JsonFormatter());
                    }
                }
                else
                {
                    retVal = Request.CreateResponse(HttpStatusCode.NotFound);
                }
            }

            return(retVal);
        }
Ejemplo n.º 7
0
 /// <summary>
 ///     Asynchronously installs the specified <paramref name="packageArchive"/> with the specified <paramref name="options"/>.
 /// </summary>
 /// <param name="packageArchive">The <see cref="IPackageArchive"/> to install.</param>
 /// <param name="options">The <see cref="PackageInstallationOptions"/> for the installation.</param>
 /// <returns>A Result containing the result of the operation and the installed <see cref="IPackage"/>.</returns>
 public async Task <IResult <IPackage> > InstallPackageAsync(IPackageArchive packageArchive, PackageInstallationOptions options)
 {
     return(await Task.Run(() => InstallPackage(packageArchive, options)));
 }
Ejemplo n.º 8
0
        /// <summary>
        ///     Installs the specified <paramref name="packageArchive"/> with the specified <paramref name="options"/>.
        /// </summary>
        /// <param name="packageArchive">The <see cref="IPackageArchive"/> to install.</param>
        /// <param name="options">The <see cref="PackageInstallationOptions"/> for the installation.</param>
        /// <returns>A Result containing the result of the operation and the installed <see cref="IPackage"/>.</returns>
        public IResult <IPackage> InstallPackage(IPackageArchive packageArchive, PackageInstallationOptions options)
        {
            Guid guid = logger.EnterMethod(xLogger.Params(packageArchive, options), true);

            logger.Info($"Installing Package '{packageArchive?.FQN}' from '{packageArchive?.FileName}'...");

            IResult <IPackage> retVal      = new Result <IPackage>();
            string             destination = default(string);

            if (packageArchive == default(IPackageArchive))
            {
                retVal.AddError($"The specified Package Archive is null.");
            }
            else if (string.IsNullOrEmpty(packageArchive.FileName))
            {
                retVal.AddError($"The specified Package Archive contains a null or empty FileName.");
            }
            else if (!Platform.FileExists(packageArchive.FileName))
            {
                retVal.AddError($"The specified Package Archive file '{packageArchive.FileName}' can not be found.");
            }
            else if (options == default(PackageInstallationOptions))
            {
                retVal.AddError($"Installation options were specified but are null.");
            }
            else if (options?.PublicKey != default(string) && options.PublicKey == string.Empty)
            {
                retVal.AddError($"The PGP installation key is specified but is empty.");
            }
            else
            {
                PackageExtractor extractor = new PackageExtractor();
                extractor.Updated += (sender, e) => logger.Debug($"    PackageExtractor: {e.Message}");

                // determine the installation directory; should look like \path\to\Plugins\FQN\
                destination = ReplaceInvalidCharacters(packageArchive.FQN);
                destination = Path.Combine(PlatformManager.Directories.Packages, destination);

                logger.Debug($"Install directory: '{destination}'; overwrite={options.Overwrite}, skipVerification={options.SkipVerification}");

                try
                {
                    extractor.ExtractPackage(packageArchive.FileName, destination, options?.PublicKey, options.Overwrite, options.SkipVerification);
                }
                catch (Exception ex)
                {
                    logger.Exception(LogLevel.Debug, ex);
                    retVal.AddError(ex.Message);
                }

                ScanPackages();

                retVal.ReturnValue = FindPackage(packageArchive.FQN);
            }

            if (retVal.ResultCode != ResultCode.Failure)
            {
                logger.Debug($"Package {retVal.ReturnValue.FQN} installed successfully. Sending PackageInstalled Event...");
                Task.Run(() => PackageInstalled?.Invoke(this, new PackageInstallEventArgs(retVal.ReturnValue, destination)));
            }

            retVal.LogResult(logger);
            logger.ExitMethod(guid);
            return(retVal);
        }