Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Titanium-Web-Proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Titanium-Web-Proxy
Commits
f8efd8ab
Commit
f8efd8ab
authored
Feb 11, 2019
by
justcoding121
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
integration tests using local kestrel server
parent
5cfb1f27
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
213 additions
and
175 deletions
+213
-175
Titanium.Web.Proxy.sln
src/Titanium.Web.Proxy.sln
+11
-11
ExplicitClientHandler.cs
src/Titanium.Web.Proxy/ExplicitClientHandler.cs
+1
-1
CertificateManager.cs
src/Titanium.Web.Proxy/Network/CertificateManager.cs
+2
-2
TransparentClientHandler.cs
src/Titanium.Web.Proxy/TransparentClientHandler.cs
+1
-1
InterceptionTests.cs
.../Titanium.Web.Proxy.IntegrationTests/InterceptionTests.cs
+76
-7
AssemblyInfo.cs
...ium.Web.Proxy.IntegrationTests/Properties/AssemblyInfo.cs
+0
-35
SslTests.cs
tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
+75
-4
Titanium.Web.Proxy.IntegrationTests.csproj
...tegrationTests/Titanium.Web.Proxy.IntegrationTests.csproj
+14
-111
TestHelper.cs
...tanium.Web.Proxy.IntegrationTests/Utilities/TestHelper.cs
+33
-3
No files found.
src/Titanium.Web.Proxy.sln
View file @
f8efd8ab
...
@@ -25,12 +25,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy", "Titan
...
@@ -25,12 +25,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy", "Titan
EndProject
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.UnitTests", "..\tests\Titanium.Web.Proxy.UnitTests\Titanium.Web.Proxy.UnitTests.csproj", "{B517E3D0-D03B-436F-AB03-34BA0D5321AF}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.UnitTests", "..\tests\Titanium.Web.Proxy.UnitTests\Titanium.Web.Proxy.UnitTests.csproj", "{B517E3D0-D03B-436F-AB03-34BA0D5321AF}"
EndProject
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.IntegrationTests", "..\tests\Titanium.Web.Proxy.IntegrationTests\Titanium.Web.Proxy.IntegrationTests.csproj", "{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy.Examples.Basic", "..\examples\Titanium.Web.Proxy.Examples.Basic\Titanium.Web.Proxy.Examples.Basic.csproj", "{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy.Examples.Basic", "..\examples\Titanium.Web.Proxy.Examples.Basic\Titanium.Web.Proxy.Examples.Basic.csproj", "{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}"
EndProject
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Examples.Wpf", "..\examples\Titanium.Web.Proxy.Examples.Wpf\Titanium.Web.Proxy.Examples.Wpf.csproj", "{4406CE17-9A39-4F28-8363-6169A4F799C1}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Examples.Wpf", "..\examples\Titanium.Web.Proxy.Examples.Wpf\Titanium.Web.Proxy.Examples.Wpf.csproj", "{4406CE17-9A39-4F28-8363-6169A4F799C1}"
EndProject
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy.IntegrationTests", "..\tests\Titanium.Web.Proxy.IntegrationTests\Titanium.Web.Proxy.IntegrationTests.csproj", "{1D053D72-DCB4-4517-ACDD-D35ADC186950}"
EndProject
Global
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|Any CPU = Debug|Any CPU
...
@@ -55,14 +55,6 @@ Global
...
@@ -55,14 +55,6 @@ Global
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|Any CPU.Build.0 = Release|Any CPU
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|Any CPU.Build.0 = Release|Any CPU
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|x64.ActiveCfg = Release|x64
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|x64.ActiveCfg = Release|x64
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|x64.Build.0 = Release|x64
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|x64.Build.0 = Release|x64
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Debug|x64.ActiveCfg = Debug|x64
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Debug|x64.Build.0 = Debug|x64
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Release|Any CPU.Build.0 = Release|Any CPU
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Release|x64.ActiveCfg = Release|x64
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}.Release|x64.Build.0 = Release|x64
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|x64.ActiveCfg = Debug|x64
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD}.Debug|x64.ActiveCfg = Debug|x64
...
@@ -79,15 +71,23 @@ Global
...
@@ -79,15 +71,23 @@ Global
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|Any CPU.Build.0 = Release|Any CPU
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|Any CPU.Build.0 = Release|Any CPU
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|x64.ActiveCfg = Release|x64
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|x64.ActiveCfg = Release|x64
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|x64.Build.0 = Release|x64
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|x64.Build.0 = Release|x64
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Debug|x64.ActiveCfg = Debug|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Debug|x64.Build.0 = Debug|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Release|Any CPU.Build.0 = Release|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Release|x64.ActiveCfg = Release|Any CPU
{1D053D72-DCB4-4517-ACDD-D35ADC186950}.Release|x64.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
HideSolutionNode = FALSE
EndGlobalSection
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
GlobalSection(NestedProjects) = preSolution
{B517E3D0-D03B-436F-AB03-34BA0D5321AF} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
{B517E3D0-D03B-436F-AB03-34BA0D5321AF} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{1FAC4205-4445-4F2B-BB8F-618E8A0C15FD} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{4406CE17-9A39-4F28-8363-6169A4F799C1} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{4406CE17-9A39-4F28-8363-6169A4F799C1} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{1D053D72-DCB4-4517-ACDD-D35ADC186950} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
EndGlobalSection
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPath = .1.505.2\lib\NET35
EnterpriseLibraryConfigurationToolBinariesPath = .1.505.2\lib\NET35
...
...
src/Titanium.Web.Proxy/ExplicitClientHandler.cs
View file @
f8efd8ab
...
@@ -168,7 +168,7 @@ namespace Titanium.Web.Proxy
...
@@ -168,7 +168,7 @@ namespace Titanium.Web.Proxy
string
certName
=
HttpHelper
.
GetWildCardDomainName
(
connectHostname
);
string
certName
=
HttpHelper
.
GetWildCardDomainName
(
connectHostname
);
var
certificate
=
endPoint
.
GenericCertificate
??
var
certificate
=
endPoint
.
GenericCertificate
??
await
CertificateManager
.
Create
CertificateAsync
(
certName
);
await
CertificateManager
.
Create
ServerCertificate
(
certName
);
// Successfully managed to authenticate the client using the fake certificate
// Successfully managed to authenticate the client using the fake certificate
var
options
=
new
SslServerAuthenticationOptions
();
var
options
=
new
SslServerAuthenticationOptions
();
...
...
src/Titanium.Web.Proxy/Network/CertificateManager.cs
View file @
f8efd8ab
...
@@ -432,11 +432,11 @@ namespace Titanium.Web.Proxy.Network
...
@@ -432,11 +432,11 @@ namespace Titanium.Web.Proxy.Network
}
}
/// <summary>
/// <summary>
/// Create
an SSL certificate async
/// Create
s a server certificate signed by the root certificate.
/// </summary>
/// </summary>
/// <param name="certificateName"></param>
/// <param name="certificateName"></param>
/// <returns></returns>
/// <returns></returns>
internal
async
Task
<
X509Certificate2
>
CreateCertificateAsync
(
string
certificateName
)
public
async
Task
<
X509Certificate2
>
CreateServerCertificate
(
string
certificateName
)
{
{
// check in cache first
// check in cache first
if
(
cachedCertificates
.
TryGetValue
(
certificateName
,
out
var
cached
))
if
(
cachedCertificates
.
TryGetValue
(
certificateName
,
out
var
cached
))
...
...
src/Titanium.Web.Proxy/TransparentClientHandler.cs
View file @
f8efd8ab
...
@@ -82,7 +82,7 @@ namespace Titanium.Web.Proxy
...
@@ -82,7 +82,7 @@ namespace Titanium.Web.Proxy
string
certName
=
HttpHelper
.
GetWildCardDomainName
(
httpsHostName
);
string
certName
=
HttpHelper
.
GetWildCardDomainName
(
httpsHostName
);
var
certificate
=
endPoint
.
GenericCertificate
??
var
certificate
=
endPoint
.
GenericCertificate
??
await
CertificateManager
.
Create
CertificateAsync
(
certName
);
await
CertificateManager
.
Create
ServerCertificate
(
certName
);
// Successfully managed to authenticate the client using the fake certificate
// Successfully managed to authenticate the client using the fake certificate
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
SslProtocols
.
Tls
,
false
);
await
sslStream
.
AuthenticateAsServerAsync
(
certificate
,
false
,
SslProtocols
.
Tls
,
false
);
...
...
tests/Titanium.Web.Proxy.IntegrationTests/InterceptionTests.cs
View file @
f8efd8ab
using
System
;
using
System
;
using
System.Linq
;
using
System.Net
;
using
System.Net
;
using
System.Net.Http
;
using
System.Net.Http
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading.Tasks
;
using
System.Threading.Tasks
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.Hosting.Server.Features
;
using
Microsoft.AspNetCore.Http
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network
;
namespace
Titanium.Web.Proxy.IntegrationTests
namespace
Titanium.Web.Proxy.IntegrationTests
{
{
...
@@ -14,11 +21,16 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -14,11 +21,16 @@ namespace Titanium.Web.Proxy.IntegrationTests
[
TestMethod
]
[
TestMethod
]
public
async
Task
Can_Intercept_Post_Requests
()
public
async
Task
Can_Intercept_Post_Requests
()
{
{
string
test
Url
=
"http://interceptthis.com
"
;
string
test
Host
=
"localhost
"
;
using
(
var
proxy
=
new
ProxyTestController
())
using
(
var
proxy
=
new
ProxyTestController
())
{
{
using
(
var
client
=
TestHelper
.
CreateHttpClient
(
testUrl
,
proxy
.
ListeningPort
))
var
serverCertificate
=
await
proxy
.
CertificateManager
.
CreateServerCertificate
(
testHost
);
using
(
var
server
=
new
Server
(
serverCertificate
))
{
var
testUrl
=
$"http://
{
testHost
}
:
{
server
.
HttpListeningPort
}
"
;
using
(
var
client
=
TestHelper
.
CreateHttpClient
(
proxy
.
ListeningPort
))
{
{
var
response
=
await
client
.
PostAsync
(
new
Uri
(
testUrl
),
new
StringContent
(
"hello!"
));
var
response
=
await
client
.
PostAsync
(
new
Uri
(
testUrl
),
new
StringContent
(
"hello!"
));
...
@@ -29,11 +41,13 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -29,11 +41,13 @@ namespace Titanium.Web.Proxy.IntegrationTests
}
}
}
}
}
}
}
private
class
ProxyTestController
:
IDisposable
private
class
ProxyTestController
:
IDisposable
{
{
private
readonly
ProxyServer
proxyServer
;
private
readonly
ProxyServer
proxyServer
;
public
int
ListeningPort
=>
proxyServer
.
ProxyEndPoints
[
0
].
Port
;
public
int
ListeningPort
=>
proxyServer
.
ProxyEndPoints
[
0
].
Port
;
public
CertificateManager
CertificateManager
=>
proxyServer
.
CertificateManager
;
public
ProxyTestController
()
public
ProxyTestController
()
{
{
...
@@ -46,7 +60,7 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -46,7 +60,7 @@ namespace Titanium.Web.Proxy.IntegrationTests
public
async
Task
OnRequest
(
object
sender
,
SessionEventArgs
e
)
public
async
Task
OnRequest
(
object
sender
,
SessionEventArgs
e
)
{
{
if
(
e
.
HttpClient
.
Request
.
Url
.
Contains
(
"
interceptthis.com
"
))
if
(
e
.
HttpClient
.
Request
.
Url
.
Contains
(
"
localhost
"
))
{
{
if
(
e
.
HttpClient
.
Request
.
HasBody
)
if
(
e
.
HttpClient
.
Request
.
HasBody
)
{
{
...
@@ -68,5 +82,60 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -68,5 +82,60 @@ namespace Titanium.Web.Proxy.IntegrationTests
}
}
}
}
private
class
Server
:
IDisposable
{
public
int
HttpListeningPort
;
public
int
HttpsListeningPort
;
private
IWebHost
host
;
public
Server
(
X509Certificate2
serverCertificate
)
{
host
=
new
WebHostBuilder
()
.
UseKestrel
(
options
=>
{
options
.
Listen
(
IPAddress
.
Loopback
,
0
);
options
.
Listen
(
IPAddress
.
Loopback
,
0
,
listenOptions
=>
{
listenOptions
.
UseHttps
(
serverCertificate
);
});
})
.
UseStartup
<
Startup
>()
.
Build
();
host
.
Start
();
string
httpAddress
=
host
.
ServerFeatures
.
Get
<
IServerAddressesFeature
>()
.
Addresses
.
First
();
string
httpsAddress
=
host
.
ServerFeatures
.
Get
<
IServerAddressesFeature
>()
.
Addresses
.
Skip
(
1
)
.
First
();
HttpListeningPort
=
int
.
Parse
(
httpAddress
.
Split
(
':'
)[
2
]);
HttpsListeningPort
=
int
.
Parse
(
httpsAddress
.
Split
(
':'
)[
2
]);
}
public
void
Dispose
()
{
host
.
Dispose
();
}
private
class
Startup
{
public
void
Configure
(
IApplicationBuilder
app
)
{
app
.
Run
(
context
=>
{
return
context
.
Response
.
WriteAsync
(
"Server received you request."
);
});
}
}
}
}
}
}
}
\ No newline at end of file
tests/Titanium.Web.Proxy.IntegrationTests/Properties/AssemblyInfo.cs
deleted
100644 → 0
View file @
5cfb1f27
using
System.Reflection
;
using
System.Runtime.InteropServices
;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Titanium.Web.Proxy.IntegrationTests")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Titanium.Web.Proxy.IntegrationTests")]
[assembly: AssemblyCopyright("Copyright © Titanium 2015-2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("32231301-b0fb-4f9e-98df-b3e8a88f4c16")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
View file @
f8efd8ab
using
System
;
using
System
;
using
System.Linq
;
using
System.Net
;
using
System.Net
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading.Tasks
;
using
System.Threading.Tasks
;
using
Microsoft.AspNetCore.Builder
;
using
Microsoft.AspNetCore.Hosting
;
using
Microsoft.AspNetCore.Hosting.Server.Features
;
using
Microsoft.AspNetCore.Http
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network
;
namespace
Titanium.Web.Proxy.IntegrationTests
namespace
Titanium.Web.Proxy.IntegrationTests
{
{
...
@@ -12,21 +19,29 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -12,21 +19,29 @@ namespace Titanium.Web.Proxy.IntegrationTests
[
TestMethod
]
[
TestMethod
]
public
async
Task
TestSsl
()
public
async
Task
TestSsl
()
{
{
string
testUrl
=
"https://google.com"
;
string
testHost
=
"localhost"
;
using
(
var
proxy
=
new
ProxyTestController
())
using
(
var
proxy
=
new
ProxyTestController
())
{
{
using
(
var
client
=
TestHelper
.
CreateHttpClient
(
testUrl
,
proxy
.
ListeningPort
))
var
serverCertificate
=
await
proxy
.
CertificateManager
.
CreateServerCertificate
(
testHost
);
using
(
var
server
=
new
Server
(
serverCertificate
))
{
var
testUrl
=
$"https://
{
testHost
}
:
{
server
.
HttpsListeningPort
}
"
;
using
(
var
client
=
TestHelper
.
CreateHttpClient
(
proxy
.
ListeningPort
))
{
{
var
response
=
await
client
.
GetAsync
(
new
Uri
(
testUrl
));
var
response
=
await
client
.
GetAsync
(
new
Uri
(
testUrl
));
Assert
.
IsNotNull
(
response
);
Assert
.
IsNotNull
(
response
);
}
}
}
}
}
}
}
private
class
ProxyTestController
:
IDisposable
private
class
ProxyTestController
:
IDisposable
{
{
private
readonly
ProxyServer
proxyServer
;
private
readonly
ProxyServer
proxyServer
;
public
int
ListeningPort
=>
proxyServer
.
ProxyEndPoints
[
0
].
Port
;
public
int
ListeningPort
=>
proxyServer
.
ProxyEndPoints
[
0
].
Port
;
public
CertificateManager
CertificateManager
=>
proxyServer
.
CertificateManager
;
public
ProxyTestController
()
public
ProxyTestController
()
{
{
...
@@ -42,5 +57,61 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -42,5 +57,61 @@ namespace Titanium.Web.Proxy.IntegrationTests
proxyServer
.
Dispose
();
proxyServer
.
Dispose
();
}
}
}
}
private
class
Server
:
IDisposable
{
public
int
HttpListeningPort
;
public
int
HttpsListeningPort
;
private
IWebHost
host
;
public
Server
(
X509Certificate2
serverCertificate
)
{
host
=
new
WebHostBuilder
()
.
UseKestrel
(
options
=>
{
options
.
Listen
(
IPAddress
.
Loopback
,
0
);
options
.
Listen
(
IPAddress
.
Loopback
,
0
,
listenOptions
=>
{
listenOptions
.
UseHttps
(
serverCertificate
);
});
})
.
UseStartup
<
Startup
>()
.
Build
();
host
.
Start
();
string
httpAddress
=
host
.
ServerFeatures
.
Get
<
IServerAddressesFeature
>()
.
Addresses
.
First
();
string
httpsAddress
=
host
.
ServerFeatures
.
Get
<
IServerAddressesFeature
>()
.
Addresses
.
Skip
(
1
)
.
First
();
HttpListeningPort
=
int
.
Parse
(
httpAddress
.
Split
(
':'
)[
2
]);
HttpsListeningPort
=
int
.
Parse
(
httpsAddress
.
Split
(
':'
)[
2
]);
}
public
void
Dispose
()
{
host
.
Dispose
();
}
private
class
Startup
{
public
void
Configure
(
IApplicationBuilder
app
)
{
app
.
Run
(
context
=>
{
return
context
.
Response
.
WriteAsync
(
"Server received you request."
);
});
}
}
}
}
}
}
}
tests/Titanium.Web.Proxy.IntegrationTests/Titanium.Web.Proxy.IntegrationTests.csproj
View file @
f8efd8ab
<?xml version="1.0" encoding="utf-8"?
>
<Project Sdk="Microsoft.NET.Sdk.Web"
>
<Project
ToolsVersion=
"14.0"
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<PropertyGroup>
<PropertyGroup>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<TargetFramework>netcoreapp2.2</TargetFramework>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<ProjectGuid>
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16}
</ProjectGuid>
<OutputType>
Library
</OutputType>
<AppDesignerFolder>
Properties
</AppDesignerFolder>
<RootNamespace>
Titanium.Web.Proxy.IntegrationTests
</RootNamespace>
<AssemblyName>
Titanium.Web.Proxy.IntegrationTests
</AssemblyName>
<TargetFrameworkVersion>
v4.5.2
</TargetFrameworkVersion>
<FileAlignment>
512
</FileAlignment>
<ProjectTypeGuids>
{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>
<VisualStudioVersion
Condition=
"'$(VisualStudioVersion)' == ''"
>
10.0
</VisualStudioVersion>
<VSToolsPath
Condition=
"'$(VSToolsPath)' == ''"
>
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
</VSToolsPath>
<ReferencePath>
$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
</ReferencePath>
<IsCodedUITest>
False
</IsCodedUITest>
<TestProjectType>
UnitTest
</TestProjectType>
<TargetFrameworkProfile
/>
</PropertyGroup>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<DebugSymbols>
true
</DebugSymbols>
<DebugType>
full
</DebugType>
<Optimize>
false
</Optimize>
<OutputPath>
bin\Debug\
</OutputPath>
<DefineConstants>
DEBUG;TRACE
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
>
<DebugType>
pdbonly
</DebugType>
<Optimize>
true
</Optimize>
<OutputPath>
bin\Release\
</OutputPath>
<DefineConstants>
TRACE
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)' == 'Debug|x64'"
>
<DebugSymbols>
true
</DebugSymbols>
<OutputPath>
bin\x64\Debug\
</OutputPath>
<DefineConstants>
DEBUG;TRACE
</DefineConstants>
<DebugType>
full
</DebugType>
<PlatformTarget>
x64
</PlatformTarget>
<ErrorReport>
prompt
</ErrorReport>
<CodeAnalysisRuleSet>
MinimumRecommendedRules.ruleset
</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)' == 'Release|x64'"
>
<OutputPath>
bin\x64\Release\
</OutputPath>
<DefineConstants>
TRACE
</DefineConstants>
<Optimize>
true
</Optimize>
<DebugType>
pdbonly
</DebugType>
<PlatformTarget>
x64
</PlatformTarget>
<ErrorReport>
prompt
</ErrorReport>
<CodeAnalysisRuleSet>
MinimumRecommendedRules.ruleset
</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"System"
/>
<Reference
Include=
"System.Net.Http"
/>
</ItemGroup>
<Choose>
<When
Condition=
"('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'"
>
<ItemGroup>
<Reference
Include=
"Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
/>
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Reference
Include=
"Microsoft.VisualStudio.QualityTools.UnitTestFramework"
/>
</ItemGroup>
</Otherwise>
</Choose>
<ItemGroup>
<Compile
Include=
"InterceptionTests.cs"
/>
<Compile
Include=
"SslTests.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"Utilities\TestHelper.cs"
/>
</ItemGroup>
<ItemGroup>
<ProjectReference
Include=
"..\..\src\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj"
>
<Project>
{91018b6d-a7a9-45be-9cb3-79cbb8b169a6}
</Project>
<Name>
Titanium.Web.Proxy
</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ItemGroup>
<None
Include=
"..\..\.build\lib\rootCert.pfx"
>
<PackageReference Include="Microsoft.AspNetCore.App" />
<Link>
rootCert.pfx
</Link>
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.2.0" />
<CopyToOutputDirectory>
PreserveNewest
</CopyToOutputDirectory>
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.2.0" />
</None>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.9.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.4.0" />
<PackageReference Include="MSTest.TestFramework" Version="1.4.0" />
</ItemGroup>
</ItemGroup>
<Choose>
<When
Condition=
"'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'"
>
<ItemGroup>
<ItemGroup>
<Reference
Include=
"Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
>
<ProjectReference Include="..\..\src\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj" />
<Private>
False
</Private>
</Reference>
<Reference
Include=
"Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
>
<Private>
False
</Private>
</Reference>
<Reference
Include=
"Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
>
<Private>
False
</Private>
</Reference>
<Reference
Include=
"Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
>
<Private>
False
</Private>
</Reference>
</ItemGroup>
</ItemGroup>
</When>
</Choose>
<Import
Project=
"$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets"
Condition=
"Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')"
/>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>
tests/Titanium.Web.Proxy.IntegrationTests/Utilities/TestHelper.cs
View file @
f8efd8ab
using
System.Net
;
using
System
;
using
System.Net
;
using
System.Net.Http
;
using
System.Net.Http
;
namespace
Titanium.Web.Proxy.IntegrationTests
namespace
Titanium.Web.Proxy.IntegrationTests
{
{
public
static
class
TestHelper
public
static
class
TestHelper
{
{
public
static
HttpClient
CreateHttpClient
(
string
url
,
int
localProxyPort
)
public
static
HttpClient
CreateHttpClient
(
int
localProxyPort
)
{
{
var
proxy
=
new
TestProxy
(
$"http://localhost:
{
localProxyPort
}
"
);
var
handler
=
new
HttpClientHandler
var
handler
=
new
HttpClientHandler
{
{
Proxy
=
new
WebProxy
(
$"http://localhost:
{
localProxyPort
}
"
,
false
)
,
Proxy
=
proxy
,
UseProxy
=
true
UseProxy
=
true
};
};
return
new
HttpClient
(
handler
);
return
new
HttpClient
(
handler
);
}
}
public
class
TestProxy
:
IWebProxy
{
public
Uri
ProxyUri
{
get
;
set
;
}
public
ICredentials
Credentials
{
get
;
set
;
}
public
TestProxy
(
string
proxyUri
)
:
this
(
new
Uri
(
proxyUri
))
{
}
public
TestProxy
(
Uri
proxyUri
)
{
this
.
ProxyUri
=
proxyUri
;
}
public
Uri
GetProxy
(
Uri
destination
)
{
return
this
.
ProxyUri
;
}
public
bool
IsBypassed
(
Uri
host
)
{
return
false
;
}
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment