7 use DBIx::Class::Optional::Dependencies ();
12 plan skip_all => 'Test segfaults on Win32' if $^O eq 'MSWin32';
14 for my $type (qw/PG MYSQL SQLite/) {
17 my @dsn = $type eq 'SQLite'
18 ? DBICTest->_database(sqlite_use_file => 1)
20 skip "Skipping $type tests without DBICTEST_${type}_DSN", 1
21 unless $ENV{"DBICTEST_${type}_DSN"};
22 @ENV{map { "DBICTEST_${type}_${_}" } qw/DSN USER PASS/}
27 skip "skipping Pg tests without dependencies installed", 1
28 unless DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_pg');
30 elsif ($type eq 'MYSQL') {
31 skip "skipping MySQL tests without dependencies installed", 1
32 unless DBIx::Class::Optional::Dependencies->req_ok_for('test_rdbms_mysql');
35 my $schema = DBICTest::Schema->connect (@dsn);
37 # emulate a singleton-factory, just cache the object *somewhere in a different package*
38 # to induce out-of-order destruction
39 $DBICTest::FakeSchemaFactory::schema = $schema;
41 # so we can see the retry exceptions (if any)
42 $ENV{DBIC_DBIRETRY_DEBUG} = 1;
44 ok (!$schema->storage->connected, "$type: start disconnected");
47 $schema->txn_do (sub {
49 ok ($schema->storage->connected, "$type: transaction starts connected");
53 skip "Fork failed: $!", 1 if (! defined $pid);
56 note "Parent $$ sleeping...";
58 note "Parent $$ woken up after child $pid exit";
61 note "Child $$ terminating";
62 undef $DBICTest::FakeSchemaFactory::schema;
66 ok ($schema->storage->connected, "$type: parent still connected (in txn_do)");
71 ok ($schema->storage->connected, "$type: parent still connected (outside of txn_do)");
73 undef $DBICTest::FakeSchemaFactory::schema;