     assert Redix.pipeline(c, [["PING"], [], ["PING"]]) == {:error, :empty_command}
   end
 
+  test "pipeline/2: timeout", %{conn: c} do
+    assert {:error, :timeout} = Redix.pipeline(c, [~w(PING), ~w(PING)], timeout: 0)
+  end
+
   test "command!/2: simple commands", %{conn: c} do
     assert Redix.command!(c, ["PING"]) == "PONG"
     assert Redix.command!(c, ["SET", "bang", "foo"]) == "OK"

      {:ok, %{}}
    else
      {:ok, conn} = Redix.start_link()
      {:ok, %{conn: conn}}
    end
  end

  @tag :no_setup
  test "start_link/1: returns a pid" do
    assert {:ok, pid} = Redix.start_link
    assert is_pid(pid)
  end

  @tag :no_setup
  test "start_link/1: specifying a database" do
    assert {:ok, pid} = Redix.start_link(database: 1)
    assert Redix.command(pid, ["PING"]) == {:ok, "PONG"}
  end

  @tag :no_setup
  test "start_link/1: specifying a password when no password is set" do
    silence_log fn ->
      Process.flag :trap_exit, true
      assert {:ok, pid} = Redix.start_link(password: "foo")
      assert is_pid(pid)

      error = %Error{message: "ERR Client sent AUTH, but no password is set"}
      assert_receive {:EXIT, ^pid, ^error}, 500

    end
  end

  @tag :no_setup
  test "client suicide and reconnections" do
    {:ok, c} = Redix.start_link
