public async void PackagesInstallNullFqn() { PackageInstallationOptions options = new PackageInstallationOptions(); HttpResponseMessage response = await Controller.PackagesInstall(null, options); Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); }
public async void PackagesInstall() { PackageInstallationOptions options = new PackageInstallationOptions(); HttpResponseMessage response = await Controller.PackagesInstall("test", options); Assert.Equal(HttpStatusCode.OK, response.StatusCode); }
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); }
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); }
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); }
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); }
/// <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))); }
/// <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); }