99, slocat
1010, writeText
1111, writers
12+ , toxiproxy
1213} :
1314let
1415 withTmpDb =
3536 positionalCompletion = "_command" ;
3637 workingDir = "/" ;
3738 redirectTixFiles = false ;
38- withPath = [ postgresql ] ;
39+ withPath = [ postgresql toxiproxy ] ;
3940 withTmpDir = true ;
4041 }
4142 ''
5556
5657 export PGDATA="$tmpdir/db"
5758 export PGHOST="$tmpdir/socket"
59+ export PGPORT=6432
5860 export PGUSER
5961 export PGDATABASE
6062 export PGRST_DB_SCHEMAS
6365
6466 HBA_FILE="$tmpdir/pg_hba.conf"
6567 echo "local $PGDATABASE some_protected_user password" > "$HBA_FILE"
66- echo "local $PGDATABASE all trust" >> "$HBA_FILE"
67- echo "local replication all trust" >> "$HBA_FILE"
68+ {
69+ echo "local $PGDATABASE all trust"
70+ echo "local replication all trust"
71+ echo "host $PGDATABASE some_protected_user localhost scram-sha-256"
72+ echo "host $PGDATABASE all localhost trust"
73+ } >> "$HBA_FILE"
74+
75+ UNIX_PGHOST="$PGHOST"
76+ export TCP_PGHOST="localhost"
77+ REAL_PGPORT="$PGPORT"
78+ export TOXI_PGPORT=7432
6879
6980 log "Initializing database cluster..."
7081 # We try to make the database cluster as independent as possible from the host
8192 # On MacOS, it's 104 chars
8293 # See: https://serverfault.com/questions/641347/check-if-a-path-exceeds-maximum-for-unix-domain-socket
8394
84- pg_ctl -l "$tmpdir/db.log" -w start -o "-F -c listen_addresses=\"\" -c hba_file=$HBA_FILE -k $PGHOST -c log_statement=\"all\" " \
95+ pg_ctl -l "$tmpdir/db.log" -w start -o "-F -c listen_addresses=\"$TCP_PGHOST \" -c port=$REAL_PGPORT -c hba_file=$HBA_FILE -k $UNIX_PGHOST -c log_statement=\"all\" " \
8596 >> "$setuplog"
8697
98+ LOG_LEVEL=error toxiproxy-server&
99+ TOXIPROXY_PID=$!
100+ sleep 1 # give the server a moment to start
101+ toxiproxy-cli create -l "$TCP_PGHOST:$TOXI_PGPORT" -u "$TCP_PGHOST:$REAL_PGPORT" pg
102+
87103 log "Creating a minimally privileged $PGUSER connection role..."
88104 createuser "$PGUSER" -U postgres --host="$tmpdir/socket" --no-createdb --no-inherit --no-superuser --no-createrole --no-replication --login
89105
94110 replica_slot="replica_$RANDOM"
95111 replica_dir="$tmpdir/$replica_slot"
96112 replica_host="$tmpdir/socket_$replica_slot"
113+ replica_port=6433
114+ export TOXI_REPLICA_PGPORT=7433
97115
98116 mkdir -p "$replica_host"
99117
@@ -106,15 +124,17 @@ let
106124
107125 log "Starting replica on $replica_host"
108126
109- pg_ctl -D "$replica_dir" -l "$replica_dblog" -w start -o "-F -c listen_addresses=\"\" -c hba_file=$HBA_FILE -k $replica_host -c log_statement=\"all\" " \
127+ pg_ctl -D "$replica_dir" -l "$replica_dblog" -w start -o "-F -c listen_addresses=\"$TCP_PGHOST\" -c port=$replica_port -c hba_file=$HBA_FILE -k $replica_host -c log_statement=\"all\" " \
110128 >> "$setuplog"
129+ toxiproxy-cli create -l $TCP_PGHOST:$TOXI_REPLICA_PGPORT -u $TCP_PGHOST:$replica_port pg_replica
111130
112131 >&2 echo "${ commandName } : Replica enabled. You can connect to it with: psql 'postgres:///$PGDATABASE?host=$replica_host' -U postgres"
113132 >&2 echo "${ commandName } : You can tail the replica logs with: tail -f $replica_dblog"
114133
115- export PGREPLICAHOST="$replica_host"
134+ export PGREPLICAHOST="$TCP_PGHOST"
135+ export PGREPLICAPORT="$TOXI_REPLICA_PGPORT"
116136 export PGREPLICASLOT="$replica_slot"
117- export PGRST_DB_URI="postgres:///$PGDATABASE?host=$PGREPLICAHOST,$PGHOST "
137+ export PGRST_DB_URI="postgres:///$PGDATABASE?host=$PGREPLICAHOST,$TCP_PGHOST&port=$PGREPLICAPORT,$TOXI_PGPORT "
118138 fi
119139
120140 # shellcheck disable=SC2317
127147 pg_ctl -D "$replica_dir" stop --mode=immediate >> "$setuplog"
128148 rm -rf "$replica_dir"
129149 fi
150+ kill "$TOXIPROXY_PID" || true
151+ wait "$TOXIPROXY_PID" || true
130152 }
131153 trap stop EXIT
132154 fi
140162 fi
141163
142164 ("$_arg_command" "'' ${_arg_leftovers[@]}")
165+ #(PGHOST="$TCP_PGHOST" PGPORT="$TOXI_PGPORT" "$_arg_command" "'' ${_arg_leftovers[@]}")
143166 '' ;
144167
145168 # Helper script for running a command against all PostgreSQL versions.
0 commit comments