mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-02-05 16:03:45 +00:00
Fix baseUri should provide correct value for ANY_ADDRESS. (#563)
This commit is contained in:
parent
70cbe346e2
commit
7c5cbf04a6
@ -252,24 +252,19 @@ proc new*(
|
||||
dualstack = DualStackType.Auto,
|
||||
middlewares: openArray[HttpServerMiddlewareRef] = []
|
||||
): HttpResult[HttpServerRef] =
|
||||
|
||||
let serverUri =
|
||||
if len(serverUri.hostname) > 0:
|
||||
serverUri
|
||||
else:
|
||||
try:
|
||||
parseUri("http://" & $address & "/")
|
||||
except TransportAddressError as exc:
|
||||
return err(exc.msg)
|
||||
|
||||
let serverInstance =
|
||||
let
|
||||
serverInstance =
|
||||
try:
|
||||
createStreamServer(address, flags = socketFlags, bufferSize = bufferSize,
|
||||
backlog = backlogSize, dualstack = dualstack)
|
||||
except TransportOsError as exc:
|
||||
return err(exc.msg)
|
||||
|
||||
var res = HttpServerRef(
|
||||
serverUri =
|
||||
if len(serverUri.hostname) > 0:
|
||||
serverUri
|
||||
else:
|
||||
parseUri("http://" & $serverInstance.localAddress() & "/")
|
||||
res = HttpServerRef(
|
||||
address: serverInstance.localAddress(),
|
||||
instance: serverInstance,
|
||||
processCallback: processCallback,
|
||||
|
@ -98,28 +98,23 @@ proc new*(htype: typedesc[SecureHttpServerRef],
|
||||
maxRequestBodySize: int = 1_048_576,
|
||||
dualstack = DualStackType.Auto
|
||||
): HttpResult[SecureHttpServerRef] =
|
||||
|
||||
doAssert(not(isNil(tlsPrivateKey)), "TLS private key must not be nil!")
|
||||
doAssert(not(isNil(tlsCertificate)), "TLS certificate must not be nil!")
|
||||
|
||||
let serverUri =
|
||||
if len(serverUri.hostname) > 0:
|
||||
serverUri
|
||||
else:
|
||||
let
|
||||
serverInstance =
|
||||
try:
|
||||
parseUri("https://" & $address & "/")
|
||||
except TransportAddressError as exc:
|
||||
return err(exc.msg)
|
||||
|
||||
let serverInstance =
|
||||
try:
|
||||
createStreamServer(address, flags = socketFlags, bufferSize = bufferSize,
|
||||
createStreamServer(address, flags = socketFlags,
|
||||
bufferSize = bufferSize,
|
||||
backlog = backlogSize, dualstack = dualstack)
|
||||
except TransportOsError as exc:
|
||||
return err(exc.msg)
|
||||
|
||||
let res = SecureHttpServerRef(
|
||||
address: address,
|
||||
serverUri =
|
||||
if len(serverUri.hostname) > 0:
|
||||
serverUri
|
||||
else:
|
||||
parseUri("https://" & $serverInstance.localAddress() & "/")
|
||||
res = SecureHttpServerRef(
|
||||
address: serverInstance.localAddress(),
|
||||
instance: serverInstance,
|
||||
processCallback: processCallback,
|
||||
createConnCallback: createSecConnection,
|
||||
|
@ -1790,3 +1790,40 @@ suite "HTTP server testing suite":
|
||||
|
||||
await server.stop()
|
||||
await server.closeWait()
|
||||
|
||||
asyncTest "HTTP server - baseUri value test":
|
||||
proc process(r: RequestFence): Future[HttpResponseRef] {.
|
||||
async: (raises: [CancelledError]).} =
|
||||
defaultResponse()
|
||||
|
||||
let
|
||||
expectUri2 = "http://www.chronos-test.com/"
|
||||
address = initTAddress("127.0.0.1:0")
|
||||
socketFlags = {ServerFlags.TcpNoDelay, ServerFlags.ReuseAddr}
|
||||
res1 = HttpServerRef.new(address, process,
|
||||
socketFlags = socketFlags)
|
||||
res2 = HttpServerRef.new(address, process,
|
||||
socketFlags = socketFlags,
|
||||
serverUri = parseUri(expectUri2))
|
||||
check:
|
||||
res1.isOk == true
|
||||
res2.isOk == true
|
||||
|
||||
let
|
||||
server1 = res1.get()
|
||||
server2 = res2.get()
|
||||
|
||||
try:
|
||||
server1.start()
|
||||
server2.start()
|
||||
let
|
||||
localAddress = server1.instance.localAddress()
|
||||
expectUri1 = "http://127.0.0.1:" & $localAddress.port & "/"
|
||||
check:
|
||||
server1.baseUri == parseUri(expectUri1)
|
||||
server2.baseUri == parseUri(expectUri2)
|
||||
finally:
|
||||
await server1.stop()
|
||||
await server1.closeWait()
|
||||
await server2.stop()
|
||||
await server2.closeWait()
|
||||
|
@ -186,3 +186,49 @@ suite "Secure HTTP server testing suite":
|
||||
return serverRes and data == "EXCEPTION"
|
||||
|
||||
check waitFor(testHTTPS2(initTAddress("127.0.0.1:30080"))) == true
|
||||
|
||||
asyncTest "HTTPS server - baseUri value test":
|
||||
proc process(r: RequestFence): Future[HttpResponseRef] {.
|
||||
async: (raises: [CancelledError]).} =
|
||||
defaultResponse()
|
||||
|
||||
let
|
||||
expectUri2 = "https://www.chronos-test.com/"
|
||||
address = initTAddress("127.0.0.1:0")
|
||||
socketFlags = {ServerFlags.TcpNoDelay, ServerFlags.ReuseAddr}
|
||||
serverFlags = {Secure}
|
||||
secureKey = TLSPrivateKey.init(HttpsSelfSignedRsaKey)
|
||||
secureCert = TLSCertificate.init(HttpsSelfSignedRsaCert)
|
||||
res1 = SecureHttpServerRef.new(address, process,
|
||||
socketFlags = socketFlags,
|
||||
serverFlags = serverFlags,
|
||||
tlsPrivateKey = secureKey,
|
||||
tlsCertificate = secureCert)
|
||||
res2 = SecureHttpServerRef.new(address, process,
|
||||
socketFlags = socketFlags,
|
||||
serverFlags = serverFlags,
|
||||
serverUri = parseUri(expectUri2),
|
||||
tlsPrivateKey = secureKey,
|
||||
tlsCertificate = secureCert)
|
||||
check:
|
||||
res1.isOk == true
|
||||
res2.isOk == true
|
||||
|
||||
let
|
||||
server1 = res1.get()
|
||||
server2 = res2.get()
|
||||
|
||||
try:
|
||||
server1.start()
|
||||
server2.start()
|
||||
let
|
||||
localAddress = server1.instance.localAddress()
|
||||
expectUri1 = "https://127.0.0.1:" & $localAddress.port & "/"
|
||||
check:
|
||||
server1.baseUri == parseUri(expectUri1)
|
||||
server2.baseUri == parseUri(expectUri2)
|
||||
finally:
|
||||
await server1.stop()
|
||||
await server1.closeWait()
|
||||
await server2.stop()
|
||||
await server2.closeWait()
|
||||
|
Loading…
x
Reference in New Issue
Block a user