From 49b0ebf056a596dda4edf22c419f9a17d4719478 Mon Sep 17 00:00:00 2001
From: Doug Coleman <doug.coleman@gmail.com>
Date: Wed, 12 Oct 2011 01:22:03 -0700
Subject: [PATCH] Simple network benchmark for sending large file between a
 server/client.

---
 extra/benchmarks/file-server/authors.txt      |  1 +
 .../benchmarks/file-server/file-server.factor | 32 +++++++++++++++++++
 2 files changed, 33 insertions(+)
 create mode 100644 extra/benchmarks/file-server/authors.txt
 create mode 100644 extra/benchmarks/file-server/file-server.factor

diff --git a/extra/benchmarks/file-server/authors.txt b/extra/benchmarks/file-server/authors.txt
new file mode 100644
index 0000000000..7c1b2f2279
--- /dev/null
+++ b/extra/benchmarks/file-server/authors.txt
@@ -0,0 +1 @@
+Doug Coleman
diff --git a/extra/benchmarks/file-server/file-server.factor b/extra/benchmarks/file-server/file-server.factor
new file mode 100644
index 0000000000..67bf22855b
--- /dev/null
+++ b/extra/benchmarks/file-server/file-server.factor
@@ -0,0 +1,32 @@
+! Copyright (C) 2011 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors byte-arrays io io.encodings.binary io.servers
+io.sockets kernel math memoize namespaces sequences ;
+IN: benchmarks.file-server
+
+: test-file-size ( -- n ) 26 2^ ;
+
+MEMO: test-file-bytes ( -- byte-array )
+    test-file-size iota >byte-array ;
+
+TUPLE: file-server < threaded-server ;
+
+: <file-server> ( -- obj )
+    binary \ file-server new-threaded-server
+        f 0 <inet4> >>insecure ;
+
+M: file-server handle-client*
+    drop test-file-bytes output-stream get stream-write ;
+    
+ERROR: incorrect-#bytes ;
+
+: server>address ( server -- port )
+    servers>> first addr>> port>> local-server ;
+
+: file-server-benchmark ( -- )
+    <file-server> start-server [
+        server>address binary <client> drop
+        stream-contents length test-file-size = [ incorrect-#bytes ] unless
+    ] [ stop-server ] bi ;
+    
+MAIN: file-server-benchmark
\ No newline at end of file