10 changed files with 237 additions and 1 deletions
@ -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; |
||||||
|
} |
||||||
|
} |
@ -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; } |
||||||
|
} |
||||||
|
} |
@ -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; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -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()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -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…
Reference in new issue