diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-05-23 22:26:23 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-23 23:26:23 +0200 |
commit | 959739f609dddacde3bbe9ecede2f409214fb34c (patch) | |
tree | 04d1776efbd3561205829f78288d26b6e14c3429 /tests/util | |
parent | 5de30c53239ac74843725d981afc0bb8c45bdf16 (diff) |
FUTURE: initial support for .npmrc file (#23560)
This commit adds initial support for ".npmrc" files.
Currently we only discover ".npmrc" files next to "package.json" files
and discovering these files in user home dir is left for a follow up.
This pass supports "_authToken" and "_auth" configuration
for providing authentication.
LSP support has been left for a follow up PR.
Towards https://github.com/denoland/deno/issues/16105
Diffstat (limited to 'tests/util')
-rw-r--r-- | tests/util/server/src/lib.rs | 2 | ||||
-rw-r--r-- | tests/util/server/src/npm.rs | 13 | ||||
-rw-r--r-- | tests/util/server/src/servers/mod.rs | 4 | ||||
-rw-r--r-- | tests/util/server/src/servers/npm_registry.rs | 40 |
4 files changed, 56 insertions, 3 deletions
diff --git a/tests/util/server/src/lib.rs b/tests/util/server/src/lib.rs index ee5348049..a7f4fb447 100644 --- a/tests/util/server/src/lib.rs +++ b/tests/util/server/src/lib.rs @@ -307,7 +307,7 @@ async fn get_tcp_listener_stream( futures::stream::select_all(listeners) } -pub const TEST_SERVERS_COUNT: usize = 28; +pub const TEST_SERVERS_COUNT: usize = 30; #[derive(Default)] struct HttpServerCount { diff --git a/tests/util/server/src/npm.rs b/tests/util/server/src/npm.rs index 7cb6a04f2..363a45d7e 100644 --- a/tests/util/server/src/npm.rs +++ b/tests/util/server/src/npm.rs @@ -30,7 +30,6 @@ pub static PUBLIC_TEST_NPM_REGISTRY: Lazy<TestNpmRegistry> = Lazy::new(|| { ) }); -// TODO: rewrite to use config pub static PRIVATE_TEST_NPM_REGISTRY_1: Lazy<TestNpmRegistry> = Lazy::new(|| { TestNpmRegistry::new( @@ -43,6 +42,18 @@ pub static PRIVATE_TEST_NPM_REGISTRY_1: Lazy<TestNpmRegistry> = ) }); +pub static PRIVATE_TEST_NPM_REGISTRY_2: Lazy<TestNpmRegistry> = + Lazy::new(|| { + TestNpmRegistry::new( + NpmRegistryKind::Private, + &format!( + "http://localhost:{}", + crate::servers::PRIVATE_NPM_REGISTRY_2_PORT + ), + "npm-private2", + ) + }); + pub enum NpmRegistryKind { Public, Private, diff --git a/tests/util/server/src/servers/mod.rs b/tests/util/server/src/servers/mod.rs index 4c86eb451..1b6e2f71d 100644 --- a/tests/util/server/src/servers/mod.rs +++ b/tests/util/server/src/servers/mod.rs @@ -90,6 +90,7 @@ const JSR_REGISTRY_SERVER_PORT: u16 = 4250; const PROVENANCE_MOCK_SERVER_PORT: u16 = 4251; pub(crate) const PUBLIC_NPM_REGISTRY_PORT: u16 = 4260; pub(crate) const PRIVATE_NPM_REGISTRY_1_PORT: u16 = 4261; +pub(crate) const PRIVATE_NPM_REGISTRY_2_PORT: u16 = 4262; // Use the single-threaded scheduler. The hyper server is used as a point of // comparison for the (single-threaded!) benchmarks in cli/bench. We're not @@ -140,6 +141,8 @@ pub async fn run_all_servers() { npm_registry::public_npm_registry(PUBLIC_NPM_REGISTRY_PORT); let private_npm_registry_1_server_futs = npm_registry::private_npm_registry1(PRIVATE_NPM_REGISTRY_1_PORT); + let private_npm_registry_2_server_futs = + npm_registry::private_npm_registry2(PRIVATE_NPM_REGISTRY_2_PORT); let mut futures = vec![ redirect_server_fut.boxed_local(), @@ -169,6 +172,7 @@ pub async fn run_all_servers() { ]; futures.extend(npm_registry_server_futs); futures.extend(private_npm_registry_1_server_futs); + futures.extend(private_npm_registry_2_server_futs); assert_eq!(futures.len(), TEST_SERVERS_COUNT); diff --git a/tests/util/server/src/servers/npm_registry.rs b/tests/util/server/src/servers/npm_registry.rs index eadfafe02..7e5547b5b 100644 --- a/tests/util/server/src/servers/npm_registry.rs +++ b/tests/util/server/src/servers/npm_registry.rs @@ -33,6 +33,12 @@ pub fn public_npm_registry(port: u16) -> Vec<LocalBoxFuture<'static, ()>> { } const PRIVATE_NPM_REGISTRY_AUTH_TOKEN: &str = "private-reg-token"; +const PRIVATE_NPM_REGISTRY_2_AUTH_TOKEN: &str = "private-reg-token2"; + +// `deno:land` encoded using base64 +const PRIVATE_NPM_REGISTRY_AUTH_BASE64: &str = "ZGVubzpsYW5k"; +// `deno:land2` encoded using base64 +const PRIVATE_NPM_REGISTRY_2_AUTH_BASE64: &str = "ZGVubzpsYW5kMg=="; pub fn private_npm_registry1(port: u16) -> Vec<LocalBoxFuture<'static, ()>> { run_npm_server( @@ -42,6 +48,14 @@ pub fn private_npm_registry1(port: u16) -> Vec<LocalBoxFuture<'static, ()>> { ) } +pub fn private_npm_registry2(port: u16) -> Vec<LocalBoxFuture<'static, ()>> { + run_npm_server( + port, + "npm private registry server error", + private_npm_registry2_handler, + ) +} + fn run_npm_server<F, S>( port: u16, error_msg: &'static str, @@ -91,7 +105,9 @@ async fn private_npm_registry1_handler( .get("authorization") .and_then(|x| x.to_str().ok()) .unwrap_or_default(); - if auth != format!("Bearer {}", PRIVATE_NPM_REGISTRY_AUTH_TOKEN) { + if auth != format!("Bearer {}", PRIVATE_NPM_REGISTRY_AUTH_TOKEN) + && auth != format!("Basic {}", PRIVATE_NPM_REGISTRY_AUTH_BASE64) + { return Ok( Response::builder() .status(StatusCode::UNAUTHORIZED) @@ -103,6 +119,28 @@ async fn private_npm_registry1_handler( handle_req_for_registry(req, &npm::PRIVATE_TEST_NPM_REGISTRY_1).await } +async fn private_npm_registry2_handler( + req: Request<hyper::body::Incoming>, +) -> Result<Response<UnsyncBoxBody<Bytes, Infallible>>, anyhow::Error> { + let auth = req + .headers() + .get("authorization") + .and_then(|x| x.to_str().ok()) + .unwrap_or_default(); + if auth != format!("Bearer {}", PRIVATE_NPM_REGISTRY_2_AUTH_TOKEN) + && auth != format!("Basic {}", PRIVATE_NPM_REGISTRY_2_AUTH_BASE64) + { + return Ok( + Response::builder() + .status(StatusCode::UNAUTHORIZED) + .body(empty_body()) + .unwrap(), + ); + } + + handle_req_for_registry(req, &npm::PRIVATE_TEST_NPM_REGISTRY_2).await +} + async fn handle_req_for_registry( req: Request<Incoming>, test_npm_registry: &npm::TestNpmRegistry, |