From 261f17ad2187269a4f22bad8d76c2b6a2483b3af Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Wed, 19 Oct 2016 01:44:34 -0300 Subject: [PATCH] add spec for using the connection pool --- spec/pool_spec.cr | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 spec/pool_spec.cr diff --git a/spec/pool_spec.cr b/spec/pool_spec.cr new file mode 100644 index 0000000..81a95c6 --- /dev/null +++ b/spec/pool_spec.cr @@ -0,0 +1,32 @@ +require "./spec_helper" + +describe DB::Pool do + it "should write from multiple connections" do + channel = Channel(Nil).new + fibers = 5 + max_n = 50 + with_db "#{DB_FILENAME}?max_pool_size=#{fibers}" do |db| + db.exec "create table numbers (n integer, fiber integer)" + + fibers.times do |f| + spawn do + (1..max_n).each do |n| + db.exec "insert into numbers (n, fiber) values (?, ?)", n, f + sleep 0.01 + end + channel.send nil + end + end + + fibers.times { channel.receive } + + # all numbers were inserted + s = fibers * max_n * (max_n + 1) / 2 + db.scalar("select sum(n) from numbers").should eq(s) + + # numbers were not inserted one fiber at a time + rows = db.query_all "select n, fiber from numbers", as: {Int32, Int32} + rows.map(&.[1]).should_not eq(rows.map(&.[1]).sort) + end + end +end