From 4c37f54654eadd36a24348e75fdc9ab9ddb7f745 Mon Sep 17 00:00:00 2001 From: Nathan Wagner Date: Tue, 18 Sep 2012 16:50:33 +0000 Subject: [PATCH] Added tap tests for postgres extension. --- postgres/Makefile | 3 ++ postgres/t/uuidtest.sql | 101 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 postgres/t/uuidtest.sql diff --git a/postgres/Makefile b/postgres/Makefile index 1c24262..9c5b5d8 100644 --- a/postgres/Makefile +++ b/postgres/Makefile @@ -19,3 +19,6 @@ include $(PGXS) ifeq ($(PORTNAME), darwin) LDFLAGS_SL += -flat_namespace -undefined suppress endif + +test: + pg_prove t/*.sql diff --git a/postgres/t/uuidtest.sql b/postgres/t/uuidtest.sql new file mode 100644 index 0000000..3d5a13a --- /dev/null +++ b/postgres/t/uuidtest.sql @@ -0,0 +1,101 @@ +set client_min_messages to warning; +\set ECHO +\set QUIET 1 +-- Turn off echo and keep things quiet. + +-- Format the output for nice TAP. +\pset format unaligned +\pset tuples_only true +\pset pager + +-- Revert all changes on failure. +\set ON_ERROR_ROLLBACK 1 +\set ON_ERROR_STOP true + +begin; + +select plan(33); + +select lives_ok('create temp table uuidtest (id uuid primary key)', 'create temp table'); +select lives_ok('insert into uuidtest select uuid_v4()', 'generate v4 uuid'); +select is(uuid_recent(), (select * from uuidtest), 'uuid_recent works'); +select lives_ok('select uuid_v4()', 'generate v4 uuid'); +select isnt(uuid_recent(), (select * from uuidtest), 'uuid_recent still works'); + +--Generation Functions: + +select lives_ok('select uuid_v1()', 'generate v1 uuid'); +select lives_ok('select uuid_v1mc()', 'generate v1 random mac uuid'); +select lives_ok(E'select uuid_v3(uuid_recent(), \'llll\'::text)', 'generate v3 uuid'); +select lives_ok('select uuid_v4()', 'generate v4 uuid'); +select lives_ok(E'select uuid_v5(uuid_recent(), \'llll\'::text)', 'generate v5 uuid'); +select lives_ok(E'select uuid_url(\'http://pd.if.org\'::text)', 'generate url uuid'); +select lives_ok(E'select uuid_dns(\'pd.if.org\'::text)', 'generate url uuid'); +select lives_ok(E'select uuid_oid(\'2.25\'::text)', 'generate url uuid'); + +--uuid_x500(text) +--Returns a version 5 uuid using the DNS namespace. + +-- lookups +select is(uuid_nil(), '00000000-0000-0000-0000-000000000000'::uuid, 'get nil uuid'); +select is(uuid_ns_dns(), '6ba7b810-9dad-11d1-80b4-00c04fd430c8'::uuid, 'get dns uuid'); +select is(uuid_ns_url(), '6ba7b811-9dad-11d1-80b4-00c04fd430c8'::uuid, 'get url uuid'); +select is(uuid_ns_oid(), '6ba7b812-9dad-11d1-80b4-00c04fd430c8'::uuid, 'get oid uuid'); +select is(uuid_ns_x500(), '6ba7b813-9dad-11d1-80b4-00c04fd430c8'::uuid, 'get x500 uuid'); + +-- casts +select has_cast('uuid','numeric'); +select has_cast('uuid','bytea'); +select has_cast('uuid','bit'); +select has_cast('uuid','bit varying'); +select has_cast('numeric', 'uuid'); +select has_cast('bytea', 'uuid'); +select has_cast('bit','uuid'); +select has_cast('bit varying','uuid'); +select is(uuid_ns_dns()::bytea, '\x6ba7b8109dad11d180b400c04fd430c8'::bytea, 'bytea cast'); +select is('\x6ba7b8109dad11d180b400c04fd430c8'::bytea::uuid, uuid_ns_dns(), 'bytea uncast'); + +select is(uuid_recent()::numeric::uuid, uuid_recent(), 'reversible numeric cast'); +select is(uuid_recent()::bytea::uuid, uuid_recent(), 'reversible bytea cast'); +select is(uuid_recent()::bit(128)::uuid, uuid_recent(), 'reversible bit(128) cast'); +select is(uuid_recent()::bit varying::uuid, uuid_recent(), 'reversible bit varying cast'); + +-- create a whole bunch of timestamp uuids +select lives_ok('insert into uuidtest select uuid_v1() from generate_series(1,10000)', '10000 unique'); + +select * from finish(); + +rollback; +\q + +functions in purepguuid.sql. + +UUID Lookup Functions: + +uuid_recent() +returns the most recent uuid generated by this backend. Returns +the nil uuid if no uuids have been generated yet. + +Numeric: treats the UUID as a 128 bit number and converts it to a numeric. + +Bit(128) and bit varying: treats the uuid as a 128 bit vector. +Casts to bit(n) where n is shorter than 128 will truncate +the uuid. Where n is longer than 128, the bit vector +will be zero extended. + +Field extraction functions: + +uuid_version(uuid) +Returns an integer corresponding to the 4 bit version number. + +uuid_macaddr(uuid) +Returns a macaddr type corresponding to the mac address part of the +uuid. This function can be called on any uuid, not just version 1 uuids. + +uuid_timestamp(uuid) +Returns a timestamp corresponding to the timestamp field in the uuid. You +probably want to use uuid_timestamptz(). + +uuid_timestamptz(uuid) +Returns a timestamp with time zonecorresponding to the timestamp field in the +uuid. -- 2.40.0