6 # This test passes no matter what in most cases. However, prior to the recent
7 # fork-related fixes, it would spew lots of warnings. I have not quite gotten
8 # it to where it actually fails in those cases.
10 my ($dsn, $user, $pass) = @ENV{map { "DBICTEST_PG_${_}" } qw/DSN USER PASS/};
12 plan skip_all => 'Set $ENV{DBICTEST_FORK_STRESS} to run this test'
13 unless $ENV{DBICTEST_FORK_STRESS};
15 plan skip_all => 'Set $ENV{DBICTEST_PG_DSN}, _USER and _PASS to run this test'
16 . ' (note: creates and drops a table named artist!)' unless ($dsn && $user);
22 use_ok('DBICTest::Schema');
24 DBICTest::Schema->compose_connection('PgTest' => $dsn, $user, $pass, { AutoCommit => 1 });
26 my ($first_rs, $joe_record);
29 my $dbh = PgTest->schema->storage->dbh;
32 $dbh->do("DROP TABLE cd");
33 $dbh->do("CREATE TABLE cd (cdid serial PRIMARY KEY, artist INTEGER NOT NULL UNIQUE, title VARCHAR(255) NOT NULL UNIQUE, year VARCHAR(255));");
36 PgTest->resultset('CD')->create({ title => 'vacation in antarctica', artist => 123, year => 1901 });
37 PgTest->resultset('CD')->create({ title => 'vacation in antarctica part 2', artist => 456, year => 1901 });
39 $first_rs = PgTest->resultset('CD')->search({ year => 1901 });
40 $joe_record = $first_rs->next;
42 ok(!$@) or diag "Creation eval failed: $@";
44 my $num_children = 10;
46 while(@pids < $num_children) {
50 die "fork failed: $!";
58 my ($forked_rs, $joe_forked);
60 $forked_rs = PgTest->resultset('CD')->search({ year => 1901 });
61 $joe_forked = $first_rs->next;
62 if($joe_forked && $joe_forked->get_column('artist') =~ /^(?:123|456)$/) {
63 PgTest->resultset('CD')->create({ title => "test success $pid", artist => $pid, year => scalar(@pids) });
69 ok(1, "past forking");
71 waitpid($_,0) for(@pids);
73 ok(1, "past waiting");
77 my $rs = PgTest->resultset('CD')->search({ title => "test success $pid", artist => $pid, year => scalar(@pids) });
78 is($rs->next->get_column('artist'), $pid, "Child $pid successful");
81 ok(1, "Made it to the end");
83 PgTest->schema->storage->dbh->do("DROP TABLE cd");