From 73504a6b17408758155da297f4f1d78f31f7c4ca Mon Sep 17 00:00:00 2001 From: mo khan Date: Sat, 21 Nov 2020 16:11:45 -0700 Subject: feat: return 400 (Bad Request) when max blob size is exceeded --- lib/server.rb | 15 ++++++++++----- test/integration/data_storage_server_test.rb | 9 +++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/server.rb b/lib/server.rb index 136ffdf..1d4706c 100644 --- a/lib/server.rb +++ b/lib/server.rb @@ -4,7 +4,7 @@ require 'rack' require 'json' class DataStorageServer - MAX_BYTES=1024 + MAX_BYTES=4096 def initialize(storage: {}) @storage = storage @@ -38,14 +38,19 @@ class DataStorageServer # # Status: 201 Created # {size, oid} - # Blobs can have a max size of 1024 bytes. + # Blobs can have a max size of MAX_BYTES bytes. # If a blob exceeds this size then the blob is truncated # and the first 1024 bytes are stored. def put(io) data = io.read(MAX_BYTES) - oid = Digest::SHA256.hexdigest(data) - @storage[oid] = data - ['201', {}, [JSON.generate({ size: data.size, oid: oid })]] + + if io.eof? + oid = Digest::SHA256.hexdigest(data) + @storage[oid] = data + ['201', {}, [JSON.generate({ size: data.size, oid: oid })]] + else + ['400', {}, []] + end end # Delete an Object diff --git a/test/integration/data_storage_server_test.rb b/test/integration/data_storage_server_test.rb index 26cfe87..0c3d662 100644 --- a/test/integration/data_storage_server_test.rb +++ b/test/integration/data_storage_server_test.rb @@ -15,6 +15,15 @@ class DataStorageServerTest < Minitest::Test assert result["oid"].length > 0 end + def test_put_exceeds_max_blob_size + four_k = (1024 * 4) + data = 'a' * (four_k + 1) + put '/data/foo', data + + assert_equal 400, last_response.status + assert last_response.body.empty? + end + def test_get put '/data/foo', 'some object' res1 = JSON.parse(last_response.body) -- cgit v1.2.3