Skip to content

Commit

Permalink
Merge pull request #2184 from NuGet/anurse/2168-removenugetexeautoupdate
Browse files Browse the repository at this point in the history
Fix #2168 by just disabling the nuget.exe auto-update. We'll manually update it
  • Loading branch information
analogrelay committed Jun 2, 2014
2 parents 172ba7e + 5b5a78a commit eaef5a9
Show file tree
Hide file tree
Showing 7 changed files with 3 additions and 323 deletions.
8 changes: 0 additions & 8 deletions src/NuGetGallery/Controllers/ApiController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -280,14 +280,6 @@ private async Task<ActionResult> CreatePackageInternal()
{
await PackageFileService.SavePackageFileAsync(package, uploadStream);
}

if (
packageToPush.Metadata.Id.Equals(Constants.NuGetCommandLinePackageId,
StringComparison.OrdinalIgnoreCase) && package.IsLatestStable)
{
// If we're pushing a new stable version of NuGet.CommandLine, update the extracted executable.
await NugetExeDownloaderService.UpdateExecutableAsync(packageToPush);
}
}

return new HttpStatusCodeResult(HttpStatusCode.Created);
Expand Down
10 changes: 0 additions & 10 deletions src/NuGetGallery/Controllers/PackagesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ public partial class PackagesController : AppController
private readonly IAutomaticallyCuratePackageCommand _autoCuratedPackageCmd;
private readonly IAppConfiguration _config;
private readonly IMessageService _messageService;
private readonly INuGetExeDownloaderService _nugetExeDownloaderService;
private readonly IPackageService _packageService;
private readonly IPackageFileService _packageFileService;
private readonly ISearchService _searchService;
Expand All @@ -46,7 +45,6 @@ public PackagesController(
IMessageService messageService,
ISearchService searchService,
IAutomaticallyCuratePackageCommand autoCuratedPackageCmd,
INuGetExeDownloaderService nugetExeDownloaderService,
IPackageFileService packageFileService,
IEntitiesContext entitiesContext,
IAppConfiguration config,
Expand All @@ -59,7 +57,6 @@ public PackagesController(
_messageService = messageService;
_searchService = searchService;
_autoCuratedPackageCmd = autoCuratedPackageCmd;
_nugetExeDownloaderService = nugetExeDownloaderService;
_packageFileService = packageFileService;
_entitiesContext = entitiesContext;
_config = config;
Expand Down Expand Up @@ -892,13 +889,6 @@ public virtual async Task<ActionResult> VerifyPackage(VerifyPackageRequest formD

// tell Lucene to update index for the new package
_indexingService.UpdateIndex();

// If we're pushing a new stable version of NuGet.CommandLine, update the extracted executable.
if (package.PackageRegistration.Id.Equals(Constants.NuGetCommandLinePackageId, StringComparison.OrdinalIgnoreCase) &&
package.IsLatestStable)
{
await _nugetExeDownloaderService.UpdateExecutableAsync(nugetPackage);
}
}

// delete the uploaded binary in the Uploads container
Expand Down
2 changes: 0 additions & 2 deletions src/NuGetGallery/Services/INuGetExeDownloaderService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,5 @@ namespace NuGetGallery
public interface INuGetExeDownloaderService
{
Task<ActionResult> CreateNuGetExeDownloadActionResultAsync(Uri requestUrl);

Task UpdateExecutableAsync(INupkg package);
}
}
45 changes: 2 additions & 43 deletions src/NuGetGallery/Services/NuGetExeDownloaderService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,57 +11,16 @@ public class NuGetExeDownloaderService : INuGetExeDownloaderService
{
private const int MaxNuGetExeFileSize = 10 * 1024 * 1024;
private readonly IFileStorageService _fileStorageService;
private readonly IPackageFileService _packageFileService;
private readonly IPackageService _packageService;

public NuGetExeDownloaderService(
IPackageService packageService,
IPackageFileService packageFileService,
IFileStorageService fileStorageService)
{
_packageService = packageService;
_packageFileService = packageFileService;
_fileStorageService = fileStorageService;
}

public async Task<ActionResult> CreateNuGetExeDownloadActionResultAsync(Uri requestUrl)
public Task<ActionResult> CreateNuGetExeDownloadActionResultAsync(Uri requestUrl)
{
await EnsureNuGetExe();
return await _fileStorageService.CreateDownloadFileActionResultAsync(requestUrl, Constants.DownloadsFolderName, "nuget.exe");
}

public Task UpdateExecutableAsync(INupkg nupkg)
{
return ExtractNuGetExe(nupkg);
}

private async Task EnsureNuGetExe()
{
if (await _fileStorageService.FileExistsAsync(Constants.DownloadsFolderName, "nuget.exe"))
{
// Ensure the file exists on blob storage.
return;
}

var package = _packageService.FindPackageByIdAndVersion("NuGet.CommandLine", version: null, allowPrerelease: false);
if (package == null)
{
throw new InvalidOperationException("Unable to find NuGet.CommandLine.");
}

using (Stream packageStream = await _packageFileService.DownloadPackageFileAsync(package))
{
var nupkg = new Nupkg(packageStream, leaveOpen: true);
await ExtractNuGetExe(nupkg);
}
}

private Task ExtractNuGetExe(INupkg package)
{
using (Stream nugetExeStream = package.GetSizeVerifiedFileStream(@"tools\NuGet.exe", MaxNuGetExeFileSize))
{
return _fileStorageService.SaveFileAsync(Constants.DownloadsFolderName, "nuget.exe", nugetExeStream);
}
return _fileStorageService.CreateDownloadFileActionResultAsync(requestUrl, Constants.DownloadsFolderName, "nuget.exe");
}
}
}
47 changes: 0 additions & 47 deletions tests/NuGetGallery.Facts/Controllers/ApiControllerFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -182,53 +182,6 @@ public void WillCreateAPackageWithTheUserMatchingTheApiKey()
controller.MockPackageService.Verify(x => x.CreatePackage(It.IsAny<INupkg>(), user, false));
controller.MockEntitiesContext.VerifyCommitted();
}

[Fact]
public void CreatePackageRefreshesNuGetExeIfCommandLinePackageIsUploaded()
{
// Arrange
var nuGetPackage = new Mock<INupkg>();
nuGetPackage.Setup(x => x.Metadata.Id).Returns("NuGet.CommandLine");
nuGetPackage.Setup(x => x.Metadata.Version).Returns(new SemanticVersion("1.0.42"));
var user = new User() { EmailAddress = "confirmed@email.com" };
var controller = new TestableApiController();
var apiKey = Guid.NewGuid();
controller.MockPackageService.Setup(p => p.CreatePackage(nuGetPackage.Object, It.IsAny<User>(), false))
.Returns(new Package { IsLatestStable = true });
controller.MockNuGetExeDownloaderService.Setup(s => s.UpdateExecutableAsync(nuGetPackage.Object)).Verifiable();
controller.SetCurrentUser(user);
controller.SetupPackageFromInputStream(nuGetPackage);

// Act
controller.CreatePackagePut();

// Assert
controller.MockNuGetExeDownloaderService.Verify();
}

[Fact]
public void CreatePackageDoesNotRefreshNuGetExeIfItIsNotLatestStable()
{
// Arrange
var nuGetPackage = new Mock<INupkg>();
nuGetPackage.Setup(x => x.Metadata.Id).Returns("NuGet.CommandLine");
nuGetPackage.Setup(x => x.Metadata.Version).Returns(new SemanticVersion("2.0.0-alpha"));
var user = new User() { EmailAddress = "confirmed@email.com" };
var controller = new TestableApiController();
var apiKey = Guid.NewGuid();
controller.MockPackageService.Setup(p => p.CreatePackage(nuGetPackage.Object, It.IsAny<User>(), false))
.Returns(new Package { IsLatest = true, IsLatestStable = false });
controller.MockNuGetExeDownloaderService.Setup(s => s.UpdateExecutableAsync(nuGetPackage.Object)).Verifiable();
controller.SetCurrentUser(user);
controller.SetupPackageFromInputStream(nuGetPackage);

// Act
controller.CreatePackagePut();

// Assert
controller.MockNuGetExeDownloaderService.Verify(s => s.UpdateExecutableAsync(It.IsAny<INupkg>()), Times.Never());
controller.MockEntitiesContext.VerifyCommitted();
}
}

public class TheDeletePackageAction
Expand Down
123 changes: 0 additions & 123 deletions tests/NuGetGallery.Facts/Controllers/PackagesControllerFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ private static PackagesController CreateController(
Mock<ISearchService> searchService = null,
Exception readPackageException = null,
Mock<IAutomaticallyCuratePackageCommand> autoCuratePackageCmd = null,
Mock<INuGetExeDownloaderService> downloaderService = null,
Mock<IAppConfiguration> config = null,
Mock<IPackageFileService> packageFileService = null,
Mock<IEntitiesContext> entitiesContext = null,
Expand All @@ -50,7 +49,6 @@ private static PackagesController CreateController(
messageService = messageService ?? new Mock<IMessageService>();
searchService = searchService ?? CreateSearchService();
autoCuratePackageCmd = autoCuratePackageCmd ?? new Mock<IAutomaticallyCuratePackageCommand>();
downloaderService = downloaderService ?? new Mock<INuGetExeDownloaderService>(MockBehavior.Strict);
config = config ?? new Mock<IAppConfiguration>();

if (packageFileService == null)
Expand All @@ -73,7 +71,6 @@ private static PackagesController CreateController(
messageService.Object,
searchService.Object,
autoCuratePackageCmd.Object,
downloaderService.Object,
packageFileService.Object,
entitiesContext.Object,
config.Object,
Expand Down Expand Up @@ -1526,126 +1523,6 @@ public async Task WillCurateThePackage()

fakeAutoCuratePackageCmd.Verify(fake => fake.Execute(fakePackage, fakeNuGetPackage.Object, false));
}

[Fact]
public async Task WillExtractNuGetExe()
{
// Arrange
var fakeUploadFileService = new Mock<IUploadFileService>();
fakeUploadFileService.Setup(x => x.DeleteUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult(0));
fakeUploadFileService.Setup(x => x.GetUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult<Stream>(Stream.Null));
var fakePackageService = new Mock<IPackageService>();
var commandLinePackage = new Package
{
PackageRegistration = new PackageRegistration { Id = "NuGet.CommandLine" },
Version = "2.0.0",
IsLatestStable = true
};
fakePackageService.Setup(x => x.CreatePackage(It.IsAny<INupkg>(), It.IsAny<User>(), It.IsAny<bool>())).Returns(commandLinePackage);
var nugetExeDownloader = new Mock<INuGetExeDownloaderService>(MockBehavior.Strict);
nugetExeDownloader.Setup(d => d.UpdateExecutableAsync(It.IsAny<INupkg>())).Returns(Task.FromResult(0)).Verifiable();
var controller = CreateController(
packageService: fakePackageService,
uploadFileService: fakeUploadFileService,
downloaderService: nugetExeDownloader);
controller.SetCurrentUser(TestUtility.FakeUser);

// Act
await controller.VerifyPackage(new VerifyPackageRequest() { Listed = false, Edit = null });

// Assert
nugetExeDownloader.Verify();
}

[Fact]
public async Task WillNotExtractNuGetExeIfIsNotLatestStable()
{
// Arrange
var fakeUploadFileService = new Mock<IUploadFileService>();

var fakePackageService = new Mock<IPackageService>();
var commandLinePackage = new Package
{
PackageRegistration = new PackageRegistration { Id = "NuGet.CommandLine" },
Version = "2.0.0",
IsLatestStable = false
};

fakePackageService.Setup(x => x.CreatePackage(It.IsAny<INupkg>(), It.IsAny<User>(), It.IsAny<bool>())).Returns(commandLinePackage);

fakeUploadFileService.Setup(x => x.GetUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult<Stream>(
CreateTestPackageStream(commandLinePackage)));
fakeUploadFileService.Setup(x => x.DeleteUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult(0));

var nugetExeDownloader = new Mock<INuGetExeDownloaderService>(MockBehavior.Strict);
var controller = CreateController(
packageService: fakePackageService,
uploadFileService: fakeUploadFileService,
downloaderService: nugetExeDownloader);
controller.SetCurrentUser(TestUtility.FakeUser);

// Act
await controller.VerifyPackage(new VerifyPackageRequest() { Listed = false, Edit = null });

// Assert
nugetExeDownloader.Verify(d => d.UpdateExecutableAsync(It.IsAny<INupkg>()), Times.Never());
}

[Theory]
[InlineData("nuget-commandline")]
[InlineData("nuget.x.commandline")]
[InlineData("nuget.command")]
public async Task WillNotExtractNuGetExeIfIsItDoesNotMatchId(string id)
{
// Arrange
var fakeUploadFileService = new Mock<IUploadFileService>();

var fakePackageService = new Mock<IPackageService>();
var commandLinePackage = new Package { PackageRegistration = new PackageRegistration { Id = id }, Version = "2.0.0", IsLatestStable = true };

fakeUploadFileService.Setup(x => x.GetUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult<Stream>(
CreateTestPackageStream(commandLinePackage)));
fakeUploadFileService.Setup(x => x.DeleteUploadFileAsync(TestUtility.FakeUser.Key)).Returns(Task.FromResult(0));

fakePackageService.Setup(x => x.CreatePackage(It.IsAny<INupkg>(), It.IsAny<User>(), It.IsAny<bool>())).Returns(commandLinePackage);
var nugetExeDownloader = new Mock<INuGetExeDownloaderService>(MockBehavior.Strict);
var controller = CreateController(
packageService: fakePackageService,
uploadFileService: fakeUploadFileService,
downloaderService: nugetExeDownloader);
TestUtility.SetupUrlHelperForUrlGeneration(controller, new Uri("http://1.1.1.1"));
controller.SetCurrentUser(TestUtility.FakeUser);

// Act
await controller.VerifyPackage(new VerifyPackageRequest() { Listed = false, Edit = null });

// Assert
nugetExeDownloader.Verify(d => d.UpdateExecutableAsync(It.IsAny<INupkg>()), Times.Never());
}

private Stream CreateTestPackageStream(Package commandLinePackage)
{
var packageStream = new MemoryStream();
var builder = new PackageBuilder
{
Id = commandLinePackage.PackageRegistration.Id,
Version = SemanticVersion.Parse(commandLinePackage.Version),
Authors =
{
"dummyAuthor",
},
Description = commandLinePackage.Description ?? "dummyDesription",
};

// Make the package buildable by adding a dependency
if (builder.Files.Count == 0 && !builder.DependencySets.Any(s => s.Dependencies.Any()))
{
builder.DependencySets.Add(new PackageDependencySet(null, new[] { new NuGet.PackageDependency("dummy") }));
}

builder.Save(packageStream);
return packageStream;
}
}

public class TheUploadProgressAction
Expand Down
Loading

0 comments on commit eaef5a9

Please sign in to comment.