Comments (13)
Hi @nunotexbsd, can you provide the output from devtools::session_info()
please? That will help give context into your system environment.
from httpuv.
One more thing to try, can you run this code and copy and paste the output here? Thanks!
vapply(setNames(nm = httpuv:::unsafe_ports), httpuv:::is_port_available, logical(1))
An easy way to do that is to use the copy code button in the block above, and then run reprex::reprex()
in an R console. reprex()
will run the copied R code and put the results on the clipboard (and will also open the result for a preview).
from httpuv.
Hello!
We don't have 'reprex' ported yet, but for what I've read it looks very interesting and I will work on that today :)
> devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
setting value
version R version 4.3.2 (2023-10-31)
os FreeBSD leg.home 15.0-CURRENT FreeBSD 15.0-CURRENT #62 main-n267800-001c48b4139f: Sat Jan 27 19:46:25 WET 2024 [email protected]:/usr/obj/usr/src/amd64.amd64/sys/GENERIC-NODEBUG amd64
system amd64, freebsd15.0
ui X11
language (EN)
collate C.UTF-8
ctype C.UTF-8
tz Europe/Lisbon
date 2024-01-31
pandoc NA
─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
brio 1.1.3 2021-11-30 [1] CRAN (R 4.3.2)
cachem 1.0.8 2023-05-01 [1] CRAN (R 4.3.2)
callr 3.7.3 2022-11-02 [1] CRAN (R 4.3.2)
cli 3.6.2 2023-12-11 [1] CRAN (R 4.3.2)
crayon 1.5.2 2022-09-29 [1] CRAN (R 4.3.2)
desc 1.4.2 2022-09-08 [1] CRAN (R 4.3.2)
devtools * 2.4.2 2021-06-07 [1] CRAN (R 4.3.2)
ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.3.2)
fastmap 1.1.1 2023-02-24 [1] CRAN (R 4.3.2)
fs 1.6.3 2023-07-20 [1] CRAN (R 4.3.2)
glue 1.7.0 2024-01-09 [1] CRAN (R 4.3.2)
httpuv * 1.6.14 2024-01-26 [1] CRAN (R 4.3.2)
later 1.3.1 2023-05-02 [1] CRAN (R 4.3.2)
lifecycle 1.0.4 2023-11-07 [1] CRAN (R 4.3.2)
magrittr 2.0.3 2022-03-30 [1] CRAN (R 4.3.2)
memoise 2.0.1 2021-11-26 [1] CRAN (R 4.3.2)
pkgbuild 1.4.2 2023-06-26 [1] CRAN (R 4.3.2)
pkgload 1.3.2.1 2023-07-08 [1] CRAN (R 4.3.2)
prettyunits 1.2.0 2023-09-24 [1] CRAN (R 4.3.2)
processx 3.8.2 2023-06-30 [1] CRAN (R 4.3.2)
promises 1.2.1 2023-08-10 [1] CRAN (R 4.3.2)
ps 1.7.5 2023-04-18 [1] CRAN (R 4.3.2)
purrr 1.0.2 2023-08-10 [1] CRAN (R 4.3.2)
R6 2.5.1 2021-08-19 [1] CRAN (R 4.3.2)
Rcpp 1.0.12 2024-01-09 [1] CRAN (R 4.3.2)
remotes 2.4.2.1 2023-07-18 [1] CRAN (R 4.3.2)
rlang 1.1.3 2024-01-10 [1] CRAN (R 4.3.2)
rprojroot 2.0.4 2023-11-05 [1] CRAN (R 4.3.2)
sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.3.2)
testthat * 3.1.10 2023-07-06 [1] CRAN (R 4.3.2)
usethis * 2.0.1 2021-02-10 [1] CRAN (R 4.3.2)
vctrs 0.6.5 2023-12-01 [1] CRAN (R 4.3.2)
withr 3.0.0 2024-01-16 [1] CRAN (R 4.3.2)
[1] /usr/local/lib/R/library
> vapply(setNames(nm = httpuv:::unsafe_ports), httpuv:::is_port_available, logical(1))
1 7 9 11 13 15 17 19 20 21 22 23 25
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
37 42 43 53 77 79 87 95 101 102 103 104 109
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
110 111 113 115 117 119 123 135 139 143 179 389 427
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
465 512 513 514 515 526 530 531 532 540 548 556 563
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
587 601 636 993 995 2049 3659 4045 6000 6665 6666 6667 6668
FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
6669 6697
TRUE TRUE
from httpuv.
🤔 that's interesting, thank you. I'll give a little background. The failing test finds an unavailable port and then tries to start an httpuv server that uses that port, expecting it to error.
httpuv/tests/testthat/test-staticServer.R
Lines 76 to 86 in b6f96e5
httpuv has an internal list of known unsafe ports that are typically used by other services, and on your system there are many such ports: 1, 7, 9, 11, 13, etc.
What happens when you run this code?
library(httpuv)
runStaticServer(
system.file("example-static-site", package = "httpuv"),
port = 1
)
#> Error in runStaticServer(system.file("example-static-site", package = "httpuv"), : Port 1 is not available on host 127.0.0.1
from httpuv.
I've tested 1, 80 and 8080 ports:
> library(httpuv)
runStaticServer(
system.file("example-static-site", package = "httpuv"),
port = 1
)
Error in runStaticServer(system.file("example-static-site", package = "httpuv"), :
Port 1 is not available on host 127.0.0.1
runStaticServer(
system.file("example-static-site", package = "httpuv"),
port = 80
)
Error in runStaticServer(system.file("example-static-site", package = "httpuv"), :
Port 80 is not available on host 127.0.0.1
runStaticServer(
system.file("example-static-site", package = "httpuv"),
port = 8080
)
Serving: '/usr/local/lib/R/library/httpuv/example-static-site'
View at: http://127.0.0.1:8080
Error in utils::browseURL(paste0("http://", host, ":", port)) :
'browser' must be a non-empty character string
from httpuv.
Thanks! The error for port 1 is expected and is the code the failing test in the original post should be testing. (Neither port 80 nor 8080 would be checked in that test.) The error when starting a server on port 8080 is related to R on your system not knowing how to open a browser. You can suppress that behavior by setting runStaticServer(..., browse = FALSE)
.
from httpuv.
The error for port 1 is expected and is the code the failing test in the original post should be testing.
In that case shouldn't test be successfull?
In other words, if test is supposed to fail on given port, then it is a test success.
from httpuv.
In that case shouldn't test be successfull?
That's right. Which means that I'm not sure why the test is failing when you're running the test suite and unfortunately I'm out of clues. Do you have any ideas?
from httpuv.
expect_error(
runStaticServer(path_example_site(), port = find_unsafe_port(), background = TRUE)
)
expect_error should show what port was but it mentions port "--"
runStaticServer() throws an error if the requested port is used --
Maybe test did not pick a correct port?
from httpuv.
That was also my thought. If find_unsafe_port()
doesn't actually find an unsafe port, it returns NULL
and the test doesn't catch that case. I can update the test to skip if we can't find an unsafe port, but it's surprising that it worked for you interactively.
from httpuv.
Found it what could be the reason:
Local shell: test OK
vapply(setNames(nm = httpuv:::unsafe_ports), httpuv:::is_port_available, logical(1))
1 7 9 11 13 15 17 19 20 21 22 23 25
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
37 42 43 53 77 79 87 95 101 102 103 104 109
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
110 111 113 115 117 119 123 135 139 143 179 389 427
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
465 512 513 514 515 526 530 531 532 540 548 556 563
FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
587 601 636 993 995 2049 3659 4045 6000 6665 6666 6667 6668
FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
6669 6697
TRUE TRUE
Jail (poudriere): test NOK
vapply(setNames(nm = httpuv:::unsafe_ports), httpuv:::is_port_available, logical(1))
1 7 9 11 13 15 17 19 20 21 22 23 25 37 42 43
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
53 77 79 87 95 101 102 103 104 109 110 111 113 115 117 119
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
123 135 139 143 179 389 427 465 512 513 514 515 526 530 531 532
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
540 548 556 563 587 601 636 993 995 2049 3659 4045 6000 6665 6666 6667
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
6668 6669 6697
TRUE TRUE TRUE
That's why no port is given ("--").
runStaticServer(
system.file("example-static-site", package = "httpuv"),
port = 1
)
Serving: '/usr/local/lib/R/library/httpuv/example-static-site'
View at: http://127.0.0.1:1
Inside freebsd jail, all ports are available and safe to use...
Now I really don't know what to think :)
from httpuv.
Mystery solved! I'll update the test. In the mean time, are you blocked by this issue in some way?
from httpuv.
Hello!
#396 fixes freebsd jail environment and test is success.
I'm not blocked by this issue and it could be closed.
I let it to you to close it now or when pull is merged.
Sorry for misleading you at first as it was my fault post wrong port status on jail and local system.
Thanks!
from httpuv.
Related Issues (20)
- Unable to install httput - R 4.2.2 HOT 3
- Warning with clang 16 HOT 2
- Possible to use multiple worker threads? HOT 2
- Unable to install httpuv - R 3.5.3 HOT 2
- macOS: Assertion fails when closing `{httpuv}` server HOT 2
- CRAN firedrill 2023-05 HOT 4
- clang-ASAN: "runtime error: applying zero offset to null pointer"
- httpuv v1.6.11 release checklist HOT 1
- httpuv 1.6.10 crashes with "uv__finish_close: Assertion `handle->flags & UV_HANDLE_CLOSING' failed" HOT 4
- Don't dynamically link to libuv on macOS
- CI workflows for sanitizers HOT 1
- Simple server API HOT 1
- Heartbeat in discord HOT 1
- Compile error with clang on WIndows HOT 1
- Release httpuv 1.6.12
- warning: format string is not a string literal
- Release httpuv 1.6.13
- no response in linux HOT 4
- Error on attaching HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from httpuv.