Browse Source

Add SharpDevelop user agent in NuGet feed requests.

pull/53/merge
Matt Ward 12 years ago
parent
commit
a933b8e838
  1. 4
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 12
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryFactoryEvents.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs
  4. 14
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs
  5. 18
      src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryFactoryEventArgs.cs
  6. 37
      src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopHttpUserAgent.cs
  7. 35
      src/AddIns/Misc/PackageManagement/Project/Src/UserAgentGeneratorForRepositoryRequests.cs
  8. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  9. 25
      src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs
  10. 90
      src/AddIns/Misc/PackageManagement/Test/Src/UserAgentGeneratorForRepositoryRequestsTests.cs

4
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -158,6 +158,7 @@ @@ -158,6 +158,7 @@
<Compile Include="Src\FileConflictViewModel.cs" />
<Compile Include="Src\IClassKindUpdater.cs" />
<Compile Include="Src\IDocumentNamespaceCreator.cs" />
<Compile Include="Src\IPackageRepositoryFactoryEvents.cs" />
<Compile Include="Src\IPackageViewModelParent.cs" />
<Compile Include="Src\IUpdatePackagesAction.cs" />
<Compile Include="Src\IPackageExtensions.cs" />
@ -236,6 +237,7 @@ @@ -236,6 +237,7 @@
<Compile Include="Src\MSBuildBasedProjectExtensions.cs" />
<Compile Include="Src\PackageLicenseViewModel.cs" />
<Compile Include="Src\PackageManagementServiceProvider.cs" />
<Compile Include="Src\PackageRepositoryFactoryEventArgs.cs" />
<Compile Include="Src\ParentPackagesOperationEventArgs.cs" />
<Compile Include="Src\ProjectBuilder.cs" />
<Compile Include="Src\ProjectRootElementExtensions.cs" />
@ -252,9 +254,11 @@ @@ -252,9 +254,11 @@
<Compile Include="Src\Scripting\RunAllProjectPackageScriptsAction.cs" />
<Compile Include="Src\ServiceWithWorkbenchOwner.cs" />
<Compile Include="Src\SharpDevelopCredentialProvider.cs" />
<Compile Include="Src\SharpDevelopHttpUserAgent.cs" />
<Compile Include="Src\UpdatePackagesAction.cs" />
<Compile Include="Src\UpdatePackagesActionFactory.cs" />
<Compile Include="Src\UpdateSolutionPackagesAction.cs" />
<Compile Include="Src\UserAgentGeneratorForRepositoryRequests.cs" />
<Compile Include="Src\VirtualMethodUpdater.cs" />
<Compile Include="Src\NewProjectsCreated.cs" />
<Compile Include="Src\OpenMSBuildProjects.cs" />

12
src/AddIns/Misc/PackageManagement/Project/Src/IPackageRepositoryFactoryEvents.cs

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace ICSharpCode.PackageManagement
{
public interface IPackageRepositoryFactoryEvents
{
event EventHandler<PackageRepositoryFactoryEventArgs> RepositoryCreated;
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementServices.cs

@ -24,11 +24,13 @@ namespace ICSharpCode.PackageManagement @@ -24,11 +24,13 @@ namespace ICSharpCode.PackageManagement
static readonly IPackageRepositoryCache projectTemplatePackageRepositoryCache;
static readonly RegisteredProjectTemplatePackageSources projectTemplatePackageSources;
static readonly PackageRepositoryCache packageRepositoryCache;
static readonly UserAgentGeneratorForRepositoryRequests userAgentGenerator;
static PackageManagementServices()
{
options = new PackageManagementOptions();
packageRepositoryCache = new PackageRepositoryCache(options.PackageSources, options.RecentPackages);
userAgentGenerator = new UserAgentGeneratorForRepositoryRequests(packageRepositoryCache);
registeredPackageRepositories = new RegisteredPackageRepositories(packageRepositoryCache, options);
projectTemplatePackageSources = new RegisteredProjectTemplatePackageSources();
projectTemplatePackageRepositoryCache = new ProjectTemplatePackageRepositoryCache(packageRepositoryCache, projectTemplatePackageSources);

14
src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryCache.cs

@ -8,7 +8,7 @@ using NuGet; @@ -8,7 +8,7 @@ using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageRepositoryCache : IPackageRepositoryCache
public class PackageRepositoryCache : IPackageRepositoryCache, IPackageRepositoryFactoryEvents
{
ISharpDevelopPackageRepositoryFactory factory;
RegisteredPackageSources registeredPackageSources;
@ -37,6 +37,8 @@ namespace ICSharpCode.PackageManagement @@ -37,6 +37,8 @@ namespace ICSharpCode.PackageManagement
{
}
public event EventHandler<PackageRepositoryFactoryEventArgs> RepositoryCreated;
public IPackageRepository CreateRepository(string packageSource)
{
IPackageRepository repository = GetExistingRepository(packageSource);
@ -59,9 +61,19 @@ namespace ICSharpCode.PackageManagement @@ -59,9 +61,19 @@ namespace ICSharpCode.PackageManagement
{
IPackageRepository repository = factory.CreateRepository(packageSource);
repositories.TryAdd(packageSource, repository);
OnPackageRepositoryCreated(repository);
return repository;
}
void OnPackageRepositoryCreated(IPackageRepository repository)
{
if (RepositoryCreated != null) {
RepositoryCreated(this, new PackageRepositoryFactoryEventArgs(repository));
}
}
public ISharedPackageRepository CreateSharedRepository(IPackagePathResolver pathResolver, IFileSystem fileSystem, IFileSystem configSettingsFileSystem)
{
return factory.CreateSharedRepository(pathResolver, fileSystem, configSettingsFileSystem);

18
src/AddIns/Misc/PackageManagement/Project/Src/PackageRepositoryFactoryEventArgs.cs

@ -0,0 +1,18 @@ @@ -0,0 +1,18 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class PackageRepositoryFactoryEventArgs : EventArgs
{
public PackageRepositoryFactoryEventArgs(IPackageRepository repository)
{
this.Repository = repository;
}
public IPackageRepository Repository { get; private set; }
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/SharpDevelopHttpUserAgent.cs

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class SharpDevelopHttpUserAgent
{
public SharpDevelopHttpUserAgent()
{
CreateUserAgent();
}
public string Client { get; private set; }
public string Host { get; private set; }
public string UserAgent { get; private set; }
void CreateUserAgent()
{
Client = "SharpDevelop";
Host = GetHost();
UserAgent = HttpUtility.CreateUserAgentString(Client, Host);
}
string GetHost()
{
return String.Format("SharpDevelop/{0}", RevisionClass.FullVersion);
}
public override string ToString()
{
return UserAgent;
}
}
}

35
src/AddIns/Misc/PackageManagement/Project/Src/UserAgentGeneratorForRepositoryRequests.cs

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using NuGet;
namespace ICSharpCode.PackageManagement
{
public class UserAgentGeneratorForRepositoryRequests
{
SharpDevelopHttpUserAgent userAgent = new SharpDevelopHttpUserAgent();
public UserAgentGeneratorForRepositoryRequests(IPackageRepositoryFactoryEvents repositoryFactoryEvents)
{
repositoryFactoryEvents.RepositoryCreated += RepositoryCreated;
}
void RepositoryCreated(object sender, PackageRepositoryFactoryEventArgs e)
{
RegisterHttpClient(e.Repository as IHttpClientEvents);
}
void RegisterHttpClient(IHttpClientEvents clientEvents)
{
if (clientEvents != null) {
clientEvents.SendingRequest += SendingRequest;
}
}
void SendingRequest(object sender, WebRequestEventArgs e)
{
HttpUtility.SetUserAgent(e.Request, userAgent.ToString());
}
}
}

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -208,6 +208,7 @@ @@ -208,6 +208,7 @@
<Compile Include="Src\UpdatedPackagesTests.cs" />
<Compile Include="Src\UpdatePackagesActionTests.cs" />
<Compile Include="Src\UpdateSolutionPackagesActionTests.cs" />
<Compile Include="Src\UserAgentGeneratorForRepositoryRequestsTests.cs" />
<Compile Include="Src\VirtualMethodUpdaterTests.cs" />
<Compile Include="Src\NewProjectsCreatedTests.cs" />
<Compile Include="Src\PackageActionRunnerTests.cs" />

25
src/AddIns/Misc/PackageManagement/Test/Src/PackageRepositoryCacheTests.cs

@ -355,5 +355,30 @@ namespace PackageManagement.Tests @@ -355,5 +355,30 @@ namespace PackageManagement.Tests
Assert.IsNull(fakePackageRepositoryFactory.AggregateRepositoryPassedToCreateRecentPackageRepository);
}
[Test]
public void CreateRepository_NewRepositoryCreated_RepositoryCreatedEventFired()
{
CreateCache();
PackageRepositoryFactoryEventArgs eventArgs = null;
cache.RepositoryCreated += (sender, e) => eventArgs = e;
IPackageRepository repository = cache.CreateRepository(nuGetPackageSource.Source);
Assert.AreEqual(fakePackageRepositoryFactory.FakePackageRepository, eventArgs.Repository);
}
[Test]
public void CreateRepository_RepositoryCreatedTwice_RepositoryCreatedEventIsNotFiredOnSecondCallToCreateRepository()
{
CreateCache();
cache.CreateRepository(nuGetPackageSource.Source);
PackageRepositoryFactoryEventArgs eventArgs = null;
cache.RepositoryCreated += (sender, e) => eventArgs = e;
cache.CreateRepository(nuGetPackageSource.Source);
Assert.IsNull(eventArgs);
}
}
}

90
src/AddIns/Misc/PackageManagement/Test/Src/UserAgentGeneratorForRepositoryRequestsTests.cs

@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Net;
using ICSharpCode.PackageManagement;
using NuGet;
using NUnit.Framework;
using Rhino.Mocks;
namespace PackageManagement.Tests
{
[TestFixture]
public class UserAgentGeneratorForRepositoryRequestsTests
{
UserAgentGeneratorForRepositoryRequests generator;
IPackageRepositoryFactoryEvents repositoryFactoryEvents;
void CreateGenerator()
{
repositoryFactoryEvents = MockRepository.GenerateStub<IPackageRepositoryFactoryEvents>();
generator = new UserAgentGeneratorForRepositoryRequests(repositoryFactoryEvents);
}
IPackageRepository CreatePackageRepository()
{
return MockRepository.GenerateStub<IPackageRepository>();
}
IHttpClientEvents CreatePackageRepositoryThatImplementsIHttpClientEvents()
{
return MockRepository.GenerateMock<IHttpClientEvents, IPackageRepository>();
}
void FireRepositoryCreatedEvent(IHttpClientEvents clientEvents)
{
FireRepositoryCreatedEvent(clientEvents as IPackageRepository);
}
void FireRepositoryCreatedEvent(IPackageRepository repository)
{
var eventArgs = new PackageRepositoryFactoryEventArgs(repository);
repositoryFactoryEvents.Raise(
events => events.RepositoryCreated += null,
repositoryFactoryEvents,
eventArgs);
}
WebRequest FireSendingRequestEvent(IHttpClientEvents clientEvents)
{
WebRequest request = CreateWebRequest();
request.Headers = new WebHeaderCollection();
var eventArgs = new WebRequestEventArgs(request);
clientEvents.Raise(
events => events.SendingRequest += null,
clientEvents,
eventArgs);
return request;
}
WebRequest CreateWebRequest()
{
return MockRepository.GenerateStub<WebRequest>();
}
[Test]
public void SendingRequest_UserAgentGeneration_UserAgentSetOnRequest()
{
CreateGenerator();
IHttpClientEvents clientEvents = CreatePackageRepositoryThatImplementsIHttpClientEvents();
FireRepositoryCreatedEvent(clientEvents);
WebRequest request = FireSendingRequestEvent(clientEvents);
string userAgent = request.Headers[HttpRequestHeader.UserAgent];
Assert.IsTrue(userAgent.StartsWith("SharpDevelop"), userAgent);
}
[Test]
public void RepositoryCreated_RepositoryDoesNotImplementIHttpClientEvents_NullReferenceExceptionNotThrown()
{
CreateGenerator();
IPackageRepository repository = CreatePackageRepository();
FireRepositoryCreatedEvent(repository);
}
}
}
Loading…
Cancel
Save