\set VERBOSITY terse SET client_min_messages TO warning; SET search_path TO public,cartodb,cdb_dataservices_client; -- Mock the server functions to raise exceptions CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_geocode_street_point (username text, orgname text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) RETURNS Geometry AS $$ BEGIN RAISE EXCEPTION 'Not enough quota or any other exception whatsoever.'; RETURN NULL; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_isodistance(username text, orgname text, source geometry, mode text, range integer[], options text[] DEFAULT ARRAY[]::text[]) RETURNS SETOF isoline AS $$ BEGIN RAISE EXCEPTION 'Not enough quota or any other exception whatsoever.'; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION cdb_dataservices_server.cdb_route_point_to_point (username text, orgname text, origin geometry(Point, 4326), destination geometry(Point, 4326), mode TEXT, options text[] DEFAULT ARRAY[]::text[], units text DEFAULT 'kilometers') RETURNS cdb_dataservices_client.simple_route AS $$ DECLARE ret cdb_dataservices_client.simple_route; BEGIN RAISE EXCEPTION 'Not enough quota or any other exception whatsoever.'; -- This code shall never be reached SELECT NULL, 5.33, 100 INTO ret; RETURN ret; END; $$ LANGUAGE 'plpgsql'; -- Exercise the exception safe and the proxied functions -- No permissions granted SET ROLE test_regular_user; -- Use regular user role SELECT _cdb_geocode_street_point_exception_safe('One street, 1'); ERROR: Geocoding is not allowed SELECT * FROM _cdb_isodistance_exception_safe('POINT(-3.70568 40.42028)'::geometry, 'walk', ARRAY[300]::integer[]); ERROR: Isolines are not allowed SELECT * FROM _cdb_route_point_to_point_exception_safe('POINT(-3.70237112 40.41706163)'::geometry,'POINT(-3.69909883 40.41236875)'::geometry, 'car', ARRAY['mode_type=shortest']::text[]); ERROR: Routing is not allowed -- No permissions granted but conf created SET ROLE postgres; SELECT CDB_Conf_SetConf('api_keys_postgres', '{"application": "testing_app", "permissions": []}'); cdb_conf_setconf ------------------ (1 row) SET ROLE test_regular_user; -- Use regular user role SELECT _cdb_geocode_street_point_exception_safe('One street, 1'); ERROR: Geocoding is not allowed SELECT * FROM _cdb_isodistance_exception_safe('POINT(-3.70568 40.42028)'::geometry, 'walk', ARRAY[300]::integer[]); ERROR: Isolines are not allowed SELECT * FROM _cdb_route_point_to_point_exception_safe('POINT(-3.70237112 40.41706163)'::geometry,'POINT(-3.69909883 40.41236875)'::geometry, 'car', ARRAY['mode_type=shortest']::text[]); ERROR: Routing is not allowed -- Grant geocoding permissions SET ROLE postgres; SELECT CDB_Conf_SetConf('api_keys_postgres', '{"application": "testing_app", "permissions": ["geocoding", "routing", "isolines"]}'); cdb_conf_setconf ------------------ (1 row) SET ROLE test_regular_user; -- Use regular user role SELECT _cdb_geocode_street_point_exception_safe('One street, 1'); WARNING: cdb_dataservices_client._cdb_geocode_street_point(7): [contrib_regression] REMOTE ERROR: Not enough quota or any other exception whatsoever. _cdb_geocode_street_point_exception_safe ------------------------------------------ (1 row) SELECT * FROM _cdb_isodistance_exception_safe('POINT(-3.70568 40.42028)'::geometry, 'walk', ARRAY[300]::integer[]); WARNING: cdb_dataservices_client._cdb_isodistance(7): [contrib_regression] REMOTE ERROR: Not enough quota or any other exception whatsoever. center | data_range | the_geom --------+------------+---------- (0 rows) SELECT * FROM _cdb_route_point_to_point_exception_safe('POINT(-3.70237112 40.41706163)'::geometry,'POINT(-3.69909883 40.41236875)'::geometry, 'car', ARRAY['mode_type=shortest']::text[]); WARNING: cdb_dataservices_client._cdb_route_point_to_point(8): [contrib_regression] REMOTE ERROR: Not enough quota or any other exception whatsoever. shape | length | duration -------+--------+---------- | | (1 row) -- Remove permissions SET ROLE postgres; SELECT CDB_Conf_RemoveConf('api_keys_postgres'); cdb_conf_removeconf --------------------- (1 row)