(t *testing.T)
| 117 | } |
| 118 | |
| 119 | func TestEnableInPostgreSQL(t *testing.T) { |
| 120 | expected := errors.New("whoops") |
| 121 | secret := new(corev1.Secret) |
| 122 | secret.Data = map[string][]byte{ |
| 123 | "pgbouncer-verifier": []byte("digest$and==:whatnot"), |
| 124 | } |
| 125 | |
| 126 | exec := func( |
| 127 | _ context.Context, stdin io.Reader, stdout, stderr io.Writer, command ...string, |
| 128 | ) error { |
| 129 | assert.Assert(t, stdout != nil, "should capture stdout") |
| 130 | assert.Assert(t, stderr != nil, "should capture stderr") |
| 131 | assert.Assert(t, strings.Contains(strings.Join(command, "\n"), |
| 132 | `SELECT datname FROM pg_catalog.pg_database`, |
| 133 | ), "expected all databases and templates") |
| 134 | |
| 135 | b, err := io.ReadAll(stdin) |
| 136 | assert.NilError(t, err) |
| 137 | assert.Equal(t, string(b), strings.TrimSpace(` |
| 138 | SET client_min_messages = WARNING; |
| 139 | SET synchronous_commit = LOCAL; |
| 140 | BEGIN; |
| 141 | SELECT pg_catalog.format('CREATE ROLE %I NOLOGIN', :'username') |
| 142 | WHERE NOT EXISTS (SELECT 1 FROM pg_catalog.pg_roles WHERE rolname = :'username') |
| 143 | \gexec |
| 144 | SELECT pg_catalog.format('REVOKE ALL PRIVILEGES ON SCHEMA %I FROM %I', nspname, :'username') |
| 145 | FROM pg_catalog.pg_namespace |
| 146 | WHERE pg_catalog.has_schema_privilege(:'username', oid, 'CREATE, USAGE') |
| 147 | AND nspname NOT IN ('pg_catalog', :'namespace') |
| 148 | \gexec |
| 149 | CREATE SCHEMA IF NOT EXISTS :"namespace"; |
| 150 | REVOKE ALL PRIVILEGES |
| 151 | ON SCHEMA :"namespace" FROM PUBLIC, :"username"; |
| 152 | GRANT USAGE |
| 153 | ON SCHEMA :"namespace" TO :"username"; |
| 154 | CREATE OR REPLACE FUNCTION :"namespace".get_auth(username TEXT) |
| 155 | RETURNS TABLE(username TEXT, password TEXT) AS E' |
| 156 | SELECT rolname::TEXT, rolpassword::TEXT |
| 157 | FROM pg_catalog.pg_authid |
| 158 | WHERE pg_authid.rolname = $1 |
| 159 | AND pg_authid.rolcanlogin |
| 160 | AND NOT pg_authid.rolsuper |
| 161 | AND NOT pg_authid.rolreplication |
| 162 | AND pg_authid.rolname <> E''_crunchypgbouncer'' |
| 163 | AND (pg_authid.rolvaliduntil IS NULL OR pg_authid.rolvaliduntil >= CURRENT_TIMESTAMP)' |
| 164 | LANGUAGE SQL STABLE SECURITY DEFINER; |
| 165 | REVOKE ALL PRIVILEGES |
| 166 | ON FUNCTION :"namespace".get_auth(username TEXT) FROM PUBLIC, :"username"; |
| 167 | GRANT EXECUTE |
| 168 | ON FUNCTION :"namespace".get_auth(username TEXT) TO :"username"; |
| 169 | ALTER ROLE :"username" SET search_path TO :'namespace'; |
| 170 | ALTER ROLE :"username" LOGIN PASSWORD :'verifier'; |
| 171 | COMMIT;`)) |
| 172 | |
| 173 | gomega.NewWithT(t).Expect(command).To(gomega.ContainElements( |
| 174 | `--set=namespace=pgbouncer`, |
| 175 | `--set=username=_crunchypgbouncer`, |
| 176 | `--set=verifier=digest$and==:whatnot`, |
nothing calls this directly
no test coverage detected