better mongo test
Mugen Kenichi [Wed, 28 Sep 2011 13:17:31 +0000 (15:17 +0200)]
t/basic.t
t/mongodb.t

index 36ee684..bc51d39 100644 (file)
--- a/t/basic.t
+++ b/t/basic.t
@@ -28,5 +28,6 @@ cmp_ok($found->header('subject'), 'eq', "Message in a bottle",
 
 done_testing;
 
+# cleanup
 unlink 't/test.db';
 
index 6a81957..bd7c48b 100644 (file)
@@ -4,47 +4,79 @@ use warnings;
 use Email::MIME;
 
 use Test::More;
+use Try::Tiny;
 
 use Email::Archive;
 use Email::Archive::Storage::MongoDB;
 
-my $email = Email::MIME->create(
-  header => [
-    From    => 'foo@example.com',
-    To      => 'drain@example.com',
-    Subject => 'Message in a bottle',
-    'Message-ID' => 'helloworld',
-  ],
-  body => 'hello there!'
-);
+my $test_host        = 'localhost';
+my $test_port        = 27017;
+my $mongo_database   = 'EmailArchiveTestMongoDB';
+my $mongo_collection = 'emails';
 
-my $storage = Email::Archive::Storage::MongoDB->new(
-  host       => 'localhost',
-  port       => 27017,
-  database   => 'EmailArchiveTestMongoDB',
-  collection => 'emails',
-);
+sub check_for_mongo {
+    my ($host, $port) = @_;
+    try {
+        require Net::Telnet;
+        my $telnet = Net::Telnet->new(
+            Timeout => 10,
+        );
 
-my $e = Email::Archive->new(
-  storage => $storage,
-);
+        my $ok = $telnet->open(
+            Host    => $host,
+            Port    => $port,
+        );
 
-$e->connect;
-$e->store($email);
+        return $ok;
+    }
+    catch {
+        return 0;
+    }
+}
 
-my $found = $e->retrieve('helloworld');
+SKIP: {
+    skip 'no MongoDB running or Net::Telnet not installed', 1
+        unless check_for_mongo($test_host, $test_port);
 
-$found = $e->retrieve('helloworld');
-cmp_ok($found->header('subject'), 'eq', "Message in a bottle",
-  "can find stored message by ID");
+    my $email = Email::MIME->create(
+      header => [
+        From    => 'foo@example.com',
+        To      => 'drain@example.com',
+        Subject => 'Message in a bottle',
+        'Message-ID' => 'helloworld',
+      ],
+      body => 'hello there!'
+    );
 
+    my $storage = Email::Archive::Storage::MongoDB->new(
+      host       => $test_host,
+      port       => $test_port,
+      database   => $mongo_database,
+      collection => $mongo_collection,
+    );
 
-done_testing;
+    my $e = Email::Archive->new(
+      storage => $storage,
+    );
+
+    $e->connect;
+    $e->store($email);
+
+    my $found = $e->retrieve('helloworld');
+
+    $found = $e->retrieve('helloworld');
+    cmp_ok($found->header('subject'), 'eq', "Message in a bottle",
+      "can find stored message by ID");
 
-my $conn = MongoDB::Connection->new(
-    host => 'localhost',
-    port => 27017
-);
+    # cleanup
+    my $conn = MongoDB::Connection->new(
+        host => $test_host,
+        port => $test_port,
+    );
 
-$conn->EmailArchiveTestMongoDB->drop;
+    $conn->$mongo_database->drop;
+
+}
+
+done_testing;