Skip to content

Commit ab9a60b

Browse files
committed
all: Skip arweave tests if arweave.net seems down
1 parent ceddf3c commit ab9a60b

File tree

3 files changed

+41
-11
lines changed

3 files changed

+41
-11
lines changed

core/src/polling_monitor/ipfs_service.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ mod test {
104104
use std::time::Duration;
105105

106106
use graph::components::link_resolver::ArweaveClient;
107-
use graph::components::link_resolver::ArweaveResolver;
108107
use graph::data::value::Word;
109108
use graph::ipfs::test_utils::add_files_to_local_ipfs_node_for_testing;
110109
use graph::ipfs::{IpfsContext, IpfsMetrics, IpfsRpcClient, ServerAddress};
@@ -158,8 +157,9 @@ mod test {
158157
async fn arweave_get() {
159158
const ID: &str = "8APeQ5lW0-csTcBaGdPBDLAL2ci2AT9pTn2tppGPU_8";
160159

161-
let cl = ArweaveClient::default();
162-
let body = cl.get(&Word::from(ID)).await.unwrap();
160+
let Some(body) = ArweaveClient::get_test(&Word::from(ID)).await else {
161+
return;
162+
};
163163
let body = String::from_utf8(body).unwrap();
164164

165165
let expected = r#"

graph/src/components/link_resolver/arweave.rs

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,25 @@ impl ArweaveClient {
5656
client: Client::builder().gzip(false).build().unwrap(),
5757
}
5858
}
59+
60+
/// Make a request to arweave.net to fetch the content of the file with
61+
/// the given txid/filename. Returns `None` if `arweave.net` is not
62+
/// reachable.
63+
#[cfg(debug_assertions)]
64+
pub async fn get_test(file: &Base64) -> Option<Vec<u8>> {
65+
let client = Self::default();
66+
67+
match client.get(file).await {
68+
Ok(resp) => Some(resp),
69+
Err(ArweaveClientError::ServerUnavailable(_)) => {
70+
eprintln!("arweave.net is not reachable, skipping arweave tests");
71+
None
72+
}
73+
Err(e) => {
74+
panic!("Failed to fetch from arweave.net: {:?}", e);
75+
}
76+
}
77+
}
5978
}
6079

6180
#[async_trait]
@@ -77,6 +96,13 @@ impl ArweaveResolver for ArweaveClient {
7796
.await
7897
.map_err(ArweaveClientError::from)?;
7998

99+
println!("Got response from arweave.net with status {}", rsp.status());
100+
if rsp.status() == reqwest::StatusCode::GATEWAY_TIMEOUT {
101+
return Err(ArweaveClientError::ServerUnavailable(
102+
self.base_url.to_string(),
103+
));
104+
}
105+
80106
match (&limit, rsp.content_length()) {
81107
(_, None) => return Err(ArweaveClientError::UnableToCheckFileSize),
82108
(FileSizeLimit::MaxBytes(max), Some(cl)) if cl > *max => {
@@ -114,16 +140,15 @@ pub enum ArweaveClientError {
114140
FileTooLarge { got: u64, max: u64 },
115141
#[error("Unknown error")]
116142
Unknown(#[from] reqwest::Error),
143+
#[error("Server {0} unavailable")]
144+
ServerUnavailable(String),
117145
}
118146

119147
#[cfg(test)]
120148
mod test {
121149
use serde_derive::Deserialize;
122150

123-
use crate::{
124-
components::link_resolver::{ArweaveClient, ArweaveResolver},
125-
data_source::offchain::Base64,
126-
};
151+
use crate::{components::link_resolver::ArweaveClient, data_source::offchain::Base64};
127152

128153
// This test ensures that passing txid/filename works when the txid refers to manifest.
129154
// the actual data seems to have some binary header and footer so these ranges were found
@@ -136,8 +161,11 @@ mod test {
136161
pub manifest: String,
137162
}
138163

139-
let client = ArweaveClient::default();
140-
let no_header = &client.get(&url).await.unwrap()[1295..320078];
164+
let Some(body) = ArweaveClient::get_test(&url).await else {
165+
return;
166+
};
167+
168+
let no_header = &body[1295..320078];
141169
let content: Manifest = serde_json::from_slice(no_header).unwrap();
142170
assert_eq!(
143171
content,

tests/src/fixture/mod.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -561,8 +561,10 @@ pub async fn setup_inner<C: Blockchain>(
561561
env_vars.mappings.ipfs_request_limit,
562562
);
563563

564-
let arweave_resolver: Arc<dyn ArweaveResolver> =
565-
arweave_resolver.unwrap_or_else(|| Arc::new(ArweaveClient::default()));
564+
let arweave_resolver: Arc<dyn ArweaveResolver> = match arweave_resolver {
565+
Some(resolver) => resolver,
566+
None => Arc::new(ArweaveClient::default()),
567+
};
566568
let arweave_service = arweave_service(
567569
arweave_resolver.cheap_clone(),
568570
env_vars.mappings.ipfs_request_limit,

0 commit comments

Comments
 (0)