diff --git a/src/lib.rs b/src/lib.rs index 167ed62..6fbba23 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -179,24 +179,22 @@ where &mut self, cx: &mut Context<'_>, ) -> Poll>> { - loop { - if let ready @ Poll::Ready(_) = self.client.poll(cx) { - return ready; - } - - let new_blocks = self.client.get_new_blocks(); - if !new_blocks.is_empty() { - self.server.new_blocks_available(new_blocks); - } + if let ready @ Poll::Ready(_) = self.client.poll(cx) { + return ready; + } - // call server last so that it can process new blocks from client and blockstore - // together - if let ready @ Poll::Ready(_) = self.server.poll(cx) { - return ready; - } + let new_blocks = self.client.get_new_blocks(); + if !new_blocks.is_empty() { + self.server.new_blocks_available(new_blocks); + } - return Poll::Pending; + // call server last so that it can process new blocks from client and blockstore + // together + if let ready @ Poll::Ready(_) = self.server.poll(cx) { + return ready; } + + Poll::Pending } } diff --git a/src/server.rs b/src/server.rs index dc279d6..bcdf57d 100644 --- a/src/server.rs +++ b/src/server.rs @@ -91,10 +91,8 @@ impl PeerWantlist { if self.0.insert(cid) { results.push(WishlistChange::WantCid(cid)); } - } else { - if self.0.remove(&cid) { - results.push(WishlistChange::DoesntWantCid(cid)) - } + } else if self.0.remove(&cid) { + results.push(WishlistChange::DoesntWantCid(cid)) } } @@ -171,7 +169,7 @@ where // remove peer from the waitlist for cid, in case we happen to get it later if let Entry::Occupied(mut entry) = self.global_waitlist.entry(cid) { - if entry.get().as_ref() == &[peer] { + if entry.get().as_ref() == [peer] { entry.remove(); } else { let peers = entry.get_mut(); @@ -476,14 +474,4 @@ mod tests { assert!(events.contains(&WishlistChange::DoesntWantCid(cid))); } } - - async fn new_client() -> ServerBehaviour<64, InMemoryBlockstore<64>> { - let store = Arc::new(InMemoryBlockstore::<64>::new()); - for i in 0..16 { - let data = format!("{i}").into_bytes(); - let cid = cid_of_data(&data); - store.put_keyed(&cid, &data).await.unwrap(); - } - ServerBehaviour::<64, _>::new(store, None) - } } diff --git a/tests/bitswap.rs b/tests/bitswap.rs index eb3889d..cf185f0 100644 --- a/tests/bitswap.rs +++ b/tests/bitswap.rs @@ -1,3 +1,5 @@ +use std::mem::drop; + use blockstore::{Blockstore, InMemoryBlockstore}; use futures::{future::FutureExt, poll}; use tokio::time::{sleep, Duration}; @@ -16,7 +18,7 @@ async fn test_client_request() { let server = spawn_node(Some(store)).await; let mut client = spawn_node(None).await; - let _ = client.connect(&server); + drop(client.connect(&server)); let received = client.request_cid(cid).await.expect("could not get CID"); assert_eq!(&received[..], data.as_bytes()); @@ -32,7 +34,7 @@ async fn test_server_request() { let mut client = spawn_node(Some(store)).await; let mut server = spawn_node(None).await; - let _ = client.connect(&server); + drop(client.connect(&server)); let received = server.request_cid(cid).await.expect("could not get CID"); assert_eq!(&received[..], data.as_bytes()); @@ -50,9 +52,9 @@ async fn test_chain_of_nodes() { let mut node1 = spawn_node(None).await; let mut node2 = spawn_node(None).await; - let _ = node_with_data.connect(&node0); - let _ = node0.connect(&node1); - let _ = node1.connect(&node2); + drop(node_with_data.connect(&node0)); + drop(node0.connect(&node1)); + drop(node1.connect(&node2)); let mut node2_request = node2.request_cid(cid); sleep(Duration::from_millis(300)).await; @@ -94,7 +96,7 @@ async fn test_node_with_data_coming_online() { let mut node0 = spawn_node(None).await; let mut node1 = spawn_node(None).await; - let _ = node0.connect(&node1); + drop(node0.connect(&node1)); let mut node0_request = node0.request_cid(cid); let mut node1_request = node1.request_cid(cid); @@ -146,7 +148,7 @@ async fn test_node_with_invalid_data() { sleep(Duration::from_millis(200)).await; assert!(poll!(&mut request).is_pending()); - let _ = client.connect(&node); + drop(client.connect(&node)); let received = request.await.expect("could not get CID"); assert_eq!(received, data.as_bytes()); }