about summary refs log tree commit homepage
path: root/test/server_helper.rb
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2013-11-02 01:00:00 +0000
committerEric Wong <normalperson@yhbt.net>2013-11-02 01:19:45 +0000
commit13a09dec6c029e01e8d959b0bf0feb94d72ae32d (patch)
tree05222cbf7927ce114320beaa0bf5a7a9bb3e676d /test/server_helper.rb
parent1ffa99f4f8f653fc016affecbe41d91a0b85f90d (diff)
downloadyahns-13a09dec6c029e01e8d959b0bf0feb94d72ae32d.tar.gz
When running a static file server, we must account for filesystem
activity outside of our control where files may grow/shrink as
they're being served.

For truncated files, we must abort any persistent connections
downloading a truncated file to avoid confusing clients because
the Content-Length header was already set to the big value.

We also must ensure (we already did so before this commit,
this just adds a test for it) we do not send additional data
when a file grows on us after we've started sending the response.
Diffstat (limited to 'test/server_helper.rb')
-rw-r--r--test/server_helper.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/server_helper.rb b/test/server_helper.rb
index 52b08c7..2f9266a 100644
--- a/test/server_helper.rb
+++ b/test/server_helper.rb
@@ -78,6 +78,20 @@ module ServerHelper
       Yahns::Server.new(cfg).start.join
     end
   end
+
+  def wait_for_full(c)
+    prev = 0
+    prev_time = Time.now
+    begin
+      nr = c.nread
+      break if nr > 0 && nr == prev && (Time.now - prev_time) > 0.5
+      if nr != prev
+        prev = nr
+        prev_time = Time.now
+      end
+      Thread.pass
+    end while sleep(0.1)
+  end
 end
 
 module TrywriteBlocked