From f32c9548597e813eec3f0bef217197b5135337c2 Mon Sep 17 00:00:00 2001 From: syeopite Date: Wed, 9 Apr 2025 18:30:28 -0700 Subject: [PATCH] Pool: Make Pool#client method public --- .../networking/connection_pool_spec.cr | 20 +++++++++++++++++-- src/invidious/connection/pool.cr | 6 +++--- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/spec/helpers/networking/connection_pool_spec.cr b/spec/helpers/networking/connection_pool_spec.cr index 949558b9..bef41772 100644 --- a/spec/helpers/networking/connection_pool_spec.cr +++ b/spec/helpers/networking/connection_pool_spec.cr @@ -58,8 +58,24 @@ Spectator.describe Invidious::ConnectionPool do expect(pool.post("/post") { |r| r.body_io.gets_to_end }).to eq("post") end - # it "Can checkout a client" do - # end + it "Allows more than one clients to be checked out (if applicable)" do + pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100) + + pool.checkout do | client | + expect(pool.post("/post").body).to eq("post") + end + end + + it "Can make multiple requests with the same client" do + pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100) + + pool.checkout do | client | + expect(client.get("/get").body).to eq("get") + expect(client.post("/post").body).to eq("post") + expect(client.get("/get").body).to eq("get") + end + + end it "Allows concurrent requests" do pool = Invidious::ConnectionPool::Pool.new(URI.parse("http://localhost:12345"), max_capacity: 100) diff --git a/src/invidious/connection/pool.cr b/src/invidious/connection/pool.cr index 34ce49e2..f5d22f77 100644 --- a/src/invidious/connection/pool.cr +++ b/src/invidious/connection/pool.cr @@ -32,7 +32,7 @@ module Invidious::ConnectionPool # Streaming API for {{method.id.upcase}} request. # The response will have its body as an `IO` accessed via `HTTP::Client::Response#body_io`. def {{method.id}}(*args, **kwargs, &) - self.client do | client | + self.checkout do | client | client.{{method.id}}(*args, **kwargs) do | response | result = yield response @@ -47,14 +47,14 @@ module Invidious::ConnectionPool # Executes a {{method.id.upcase}} request. # The response will have its body as a `String`, accessed via `HTTP::Client::Response#body`. def {{method.id}}(*args, **kwargs) - self.client do | client | + self.checkout do | client | return client.{{method.id}}(*args, **kwargs) end end {% end %} # Checks out a client in the pool - private def client(&) + def checkout(&) # If a client has been deleted from the pool # we won't try to release it client_exists_in_pool = true