Skip to content

Commit 995b988

Browse files
committed
新增对无效节点版本的测试用例,验证当请求的节点版本不存在时返回的错误信息。同时,更新下载逻辑以处理节点版本的验证。
1 parent ec69266 commit 995b988

File tree

4 files changed

+39
-1
lines changed

4 files changed

+39
-1
lines changed

crates/downloader/src/resource_node.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::{collections::HashMap, path::PathBuf, pin::Pin, time::Duration};
22

33
use anyhow::Context;
4+
use reqwest::StatusCode;
45
use robust_downloader::{DownloadItem, Integrity};
56
use snm_config::snm_config::SnmConfig;
67
use typed_builder::TypedBuilder;
@@ -88,6 +89,7 @@ impl<'a> DownloadResource for DownloadNodeResource<'a> {
8889
where
8990
Self: 'async_trait,
9091
{
92+
let bin_name = self.bin_name.clone();
9193
let version = self.version.clone();
9294
let node_dist_url = self.config.node_dist_url.clone();
9395
let timeout = self.get_timeout_secs();
@@ -108,7 +110,17 @@ impl<'a> DownloadResource for DownloadNodeResource<'a> {
108110

109111
let client = reqwest::Client::builder().timeout(timeout).build()?;
110112

111-
let sha256_str = client.get(sha256_url).send().await?.text().await?;
113+
let resp = client.head(&sha256_url).send().await?;
114+
115+
if resp.status() == StatusCode::NOT_FOUND {
116+
anyhow::bail!(
117+
"Not found node: {}@{}, please check your node version",
118+
bin_name,
119+
version
120+
);
121+
}
122+
123+
let sha256_str = client.get(&sha256_url).send().await?.text().await?;
112124

113125
let shasums = Self::parse_shasum(&sha256_str);
114126

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
100.0.0

e2e/tests/node_test.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,3 +96,17 @@ async fn should_show_node_version(ctx: &mut SnmTestContext) -> anyhow::Result<()
9696
})?;
9797
Ok(())
9898
}
99+
100+
#[test_context(SnmTestContext)]
101+
#[tokio::test]
102+
async fn test_invalid_node_version(ctx: &mut SnmTestContext) -> anyhow::Result<()> {
103+
let cwd = current_dir()?.join("tests/fixtures/invalid_node_version");
104+
ctx.start_server().await?;
105+
ctx.set_cwd(&cwd);
106+
ctx.exec("snm setup", false)?;
107+
ctx.add_snapshot("node -v")?;
108+
ctx.assert_snapshots(|res| {
109+
insta::assert_snapshot!(res);
110+
})?;
111+
Ok(())
112+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
source: e2e/tests/node_test.rs
3+
expression: res
4+
---
5+
id: 1
6+
is: node -v
7+
8+
9+
stdout:
10+
stderr:Error: Not found node: node@100.0.0, please check your node version
11+
status:1

0 commit comments

Comments
 (0)