package pgx_async

  1. Overview
  2. Docs

Source file pgx_async_test.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
open Core_kernel
open Async_kernel
open Async_unix
module Pga = Pgx_async

let default_database = "postgres"
let set_to_default_db () = Unix.putenv ~key:"PGDATABASE" ~data:default_database

let random_db () =
  let random_char () = 10 |> Random.int |> Int.to_string |> Char.of_string in
  "pgx_test_" ^ String.init 8 ~f:(fun _ -> random_char ())
;;

let ignore_empty = function
  | [] -> ()
  | _ :: _ -> invalid_arg "ignore_empty"
;;

let drop_db dbh ~db_name = Pga.execute dbh ("DROP DATABASE " ^ db_name) >>| ignore_empty

let create_db dbh ~db_name =
  Pga.execute dbh ("CREATE DATABASE " ^ db_name) >>| ignore_empty
;;

let with_temp_db f =
  let db_name = random_db () in
  Pga.with_conn ~database:default_database (fun dbh ->
      create_db dbh ~db_name
      >>= fun () ->
      Monitor.protect
        (fun () -> Pga.with_conn ~database:db_name (fun test_dbh -> f test_dbh ~db_name))
        ~finally:(fun () -> drop_db dbh ~db_name))
;;

type 'a new_db_callback = Pgx_async.t -> db_name:string -> 'a Deferred.t

let () = Random.self_init ~allow_in_tests:true ()
OCaml

Innovation. Community. Security.