mirror of
https://github.com/status-im/nim-chronos.git
synced 2025-02-10 18:26:40 +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,
|
dualstack = DualStackType.Auto,
|
||||||
middlewares: openArray[HttpServerMiddlewareRef] = []
|
middlewares: openArray[HttpServerMiddlewareRef] = []
|
||||||
): HttpResult[HttpServerRef] =
|
): HttpResult[HttpServerRef] =
|
||||||
|
let
|
||||||
let serverUri =
|
serverInstance =
|
||||||
if len(serverUri.hostname) > 0:
|
|
||||||
serverUri
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
parseUri("http://" & $address & "/")
|
|
||||||
except TransportAddressError as exc:
|
|
||||||
return err(exc.msg)
|
|
||||||
|
|
||||||
let serverInstance =
|
|
||||||
try:
|
try:
|
||||||
createStreamServer(address, flags = socketFlags, bufferSize = bufferSize,
|
createStreamServer(address, flags = socketFlags, bufferSize = bufferSize,
|
||||||
backlog = backlogSize, dualstack = dualstack)
|
backlog = backlogSize, dualstack = dualstack)
|
||||||
except TransportOsError as exc:
|
except TransportOsError as exc:
|
||||||
return err(exc.msg)
|
return err(exc.msg)
|
||||||
|
serverUri =
|
||||||
var res = HttpServerRef(
|
if len(serverUri.hostname) > 0:
|
||||||
|
serverUri
|
||||||
|
else:
|
||||||
|
parseUri("http://" & $serverInstance.localAddress() & "/")
|
||||||
|
res = HttpServerRef(
|
||||||
address: serverInstance.localAddress(),
|
address: serverInstance.localAddress(),
|
||||||
instance: serverInstance,
|
instance: serverInstance,
|
||||||
processCallback: processCallback,
|
processCallback: processCallback,
|
||||||
|
@ -98,28 +98,23 @@ proc new*(htype: typedesc[SecureHttpServerRef],
|
|||||||
maxRequestBodySize: int = 1_048_576,
|
maxRequestBodySize: int = 1_048_576,
|
||||||
dualstack = DualStackType.Auto
|
dualstack = DualStackType.Auto
|
||||||
): HttpResult[SecureHttpServerRef] =
|
): HttpResult[SecureHttpServerRef] =
|
||||||
|
|
||||||
doAssert(not(isNil(tlsPrivateKey)), "TLS private key must not be nil!")
|
doAssert(not(isNil(tlsPrivateKey)), "TLS private key must not be nil!")
|
||||||
doAssert(not(isNil(tlsCertificate)), "TLS certificate must not be nil!")
|
doAssert(not(isNil(tlsCertificate)), "TLS certificate must not be nil!")
|
||||||
|
let
|
||||||
let serverUri =
|
serverInstance =
|
||||||
if len(serverUri.hostname) > 0:
|
|
||||||
serverUri
|
|
||||||
else:
|
|
||||||
try:
|
try:
|
||||||
parseUri("https://" & $address & "/")
|
createStreamServer(address, flags = socketFlags,
|
||||||
except TransportAddressError as exc:
|
bufferSize = bufferSize,
|
||||||
return err(exc.msg)
|
|
||||||
|
|
||||||
let serverInstance =
|
|
||||||
try:
|
|
||||||
createStreamServer(address, flags = socketFlags, bufferSize = bufferSize,
|
|
||||||
backlog = backlogSize, dualstack = dualstack)
|
backlog = backlogSize, dualstack = dualstack)
|
||||||
except TransportOsError as exc:
|
except TransportOsError as exc:
|
||||||
return err(exc.msg)
|
return err(exc.msg)
|
||||||
|
serverUri =
|
||||||
let res = SecureHttpServerRef(
|
if len(serverUri.hostname) > 0:
|
||||||
address: address,
|
serverUri
|
||||||
|
else:
|
||||||
|
parseUri("https://" & $serverInstance.localAddress() & "/")
|
||||||
|
res = SecureHttpServerRef(
|
||||||
|
address: serverInstance.localAddress(),
|
||||||
instance: serverInstance,
|
instance: serverInstance,
|
||||||
processCallback: processCallback,
|
processCallback: processCallback,
|
||||||
createConnCallback: createSecConnection,
|
createConnCallback: createSecConnection,
|
||||||
|
@ -1790,3 +1790,40 @@ suite "HTTP server testing suite":
|
|||||||
|
|
||||||
await server.stop()
|
await server.stop()
|
||||||
await server.closeWait()
|
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"
|
return serverRes and data == "EXCEPTION"
|
||||||
|
|
||||||
check waitFor(testHTTPS2(initTAddress("127.0.0.1:30080"))) == true
|
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