← Back to team overview

mvhub-dev team mailing list archive

[Merge] lp:~leegoodrich/mvhub/add_tests_to_utils_setup into lp:mvhub

 

Lee Goodrich has proposed merging lp:~leegoodrich/mvhub/add_tests_to_utils_setup into lp:mvhub.

Requested reviews:
  MVHub devs with commit rights (mvhub-commit)


This is an interim merge for all the tests I've completed so far in Utils::Setup. The only incomplete ones I know of in this set is the apply_database_updates_for, which two tests are skipped as unimplemented. All tests should pass.


-- 
https://code.launchpad.net/~leegoodrich/mvhub/add_tests_to_utils_setup/+merge/27742
Your team MVHub Developers is subscribed to branch lp:mvhub.
=== modified file 'app-mvhub/project-tools/bin/mv_update_development'
--- app-mvhub/project-tools/bin/mv_update_development	2010-06-13 23:03:40 +0000
+++ app-mvhub/project-tools/bin/mv_update_development	2010-06-16 17:11:20 +0000
@@ -20,7 +20,6 @@
 use MVHub::Utils::Setup;
 
 my @ALLOWED_HOSTS = qw/ brave cricket /;
-my @WEBSITE_CODES = @MVHub::Utils::Setup::SITE_CODES;
 
 {    # main
     my $interactive = 0;
@@ -76,8 +75,7 @@
 
     $prompt = "Update config files for $USERNAME? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-        MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg,
-            @WEBSITE_CODES );
+        MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg );
         $cfg = MVHub::Utils::ConfigSimple::create_config_from(
             $ENV{MV_CONFIG_FILE} );
 
@@ -86,26 +84,21 @@
     $prompt = "DESTROY and reload databases for $USERNAME (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
         MVHub::Utils::Setup::make_database_user( $USERNAME, $cfg );
-        MVHub::Utils::Setup::make_databases_for( $USERNAME, $cfg,
-            @WEBSITE_CODES );
-        MVHub::Utils::Setup::load_test_data_for( $USERNAME, $cfg,
-            @WEBSITE_CODES );
+        MVHub::Utils::Setup::make_databases_for( $USERNAME, $cfg );
+        MVHub::Utils::Setup::load_test_data_for( $USERNAME, $cfg );
     }
 
     $prompt = "Apply database updates for $USERNAME? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-        MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg,
-            @WEBSITE_CODES );
+        MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg );
     }
 
     if ( defined $ENV{SUDO_USER} ) {
-        foreach my $prefix (@WEBSITE_CODES) {
-            $prompt =
-              "Add $prefix entries for $USERNAME into DNS and Apache? (Y/N):";
-            if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-                MVHub::Utils::Setup::add_dns( $USERNAME, $prefix );
-                MVHub::Utils::Setup::add_apache_config( $USERNAME, $prefix );
-            }
+        $prompt =
+            "Add entries for $USERNAME into DNS and Apache? (Y/N):";
+        if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
+            MVHub::Utils::Setup::add_dns( $USERNAME );
+            MVHub::Utils::Setup::add_apache_config( $USERNAME );
         }
     }
 }

=== modified file 'app-mvhub/project-tools/bin/mv_update_production'
--- app-mvhub/project-tools/bin/mv_update_production	2010-05-28 18:56:18 +0000
+++ app-mvhub/project-tools/bin/mv_update_production	2010-06-16 17:11:20 +0000
@@ -23,7 +23,6 @@
 
 my @ALLOWED_HOSTS = qw/ parrot /;
 my $USERNAME = 'www-data';
-my @WEBSITE_CODES = @MVHub::Utils::Setup::SITE_CODES; 
 
 my $CFG_PATH = '/var/www/mvhub/www-data/conf/nsp.conf';
 
@@ -65,13 +64,13 @@
 	
 	$prompt = "Update config files for $USERNAME? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-    	MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg, @WEBSITE_CODES );
+    	MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg );
         $cfg = MVHub::Utils::ConfigSimple::create_config_from( $CFG_PATH );
 	}
 	
 	$prompt = "Apply database updates for $USERNAME? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-    	MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg, @WEBSITE_CODES );
+    	MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg );
 	}
 
     $prompt = "Update contents of /etc? (Y/N):";

=== modified file 'app-mvhub/project-tools/bin/mv_update_staging'
--- app-mvhub/project-tools/bin/mv_update_staging	2010-05-28 18:56:18 +0000
+++ app-mvhub/project-tools/bin/mv_update_staging	2010-06-16 17:11:20 +0000
@@ -23,7 +23,6 @@
 
 my @ALLOWED_HOSTS = qw/ penguin /;
 my $USERNAME = 'www-data';
-my @WEBSITE_CODES = @MVHub::Utils::Setup::SITE_CODES; 
 
 my $CFG_PATH = '/var/www/mvhub/www-data/conf/nsp.conf';
 
@@ -65,20 +64,20 @@
 	
 	$prompt = "Update config files? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-    	MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg, @WEBSITE_CODES );
+    	MVHub::Utils::Setup::make_config_files_for( $USERNAME, $cfg );
         $cfg = MVHub::Utils::ConfigSimple::create_config_from( $CFG_PATH, $USERNAME );
 	}
 	
 	$prompt = "Reload databases with recent production data? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-    	MVHub::Utils::Setup::get_production_data( @WEBSITE_CODES ); 
-        MVHub::Utils::Setup::make_databases_for( $USERNAME, $cfg, @WEBSITE_CODES );
-    	MVHub::Utils::Setup::load_production_data( $USERNAME, $cfg, @WEBSITE_CODES );
+    	MVHub::Utils::Setup::get_production_data(); 
+        MVHub::Utils::Setup::make_databases_for( $USERNAME, $cfg );
+    	MVHub::Utils::Setup::load_production_data( $USERNAME, $cfg );
 	}
 	
     $prompt = "Apply database updates for $USERNAME? (Y/N):";
     if ( !($interactive) || IO::Prompt::prompt( $prompt, -YN ) ) {
-    	MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg, @WEBSITE_CODES );
+    	MVHub::Utils::Setup::apply_database_updates_for( $USERNAME, $cfg );
 	}
 
 	$prompt = "Update contents of /etc? (Y/N):";
@@ -98,7 +97,7 @@
 sub usage {
     my $this_script = File::Basename::basename($0);
     return << "USAGE";
-$this_script - Utility for updatitg the staging MVHub environment
+$this_script - Utility for updating the staging MVHub environment
 
 Usage: sudo $this_script [options]
 

=== modified file 'lib-mvhub/lib/MVHub/Utils/Setup.pm' (properties changed: -x to +x)
--- lib-mvhub/lib/MVHub/Utils/Setup.pm	2010-06-13 23:15:16 +0000
+++ lib-mvhub/lib/MVHub/Utils/Setup.pm	2010-06-16 17:11:20 +0000
@@ -7,7 +7,10 @@
 use Config::Simple;
 use DateTime;
 use DBI;
+use IO::File;
 use IO::Prompt;
+use IPC::System::Simple qw/ system /;
+use Fatal qw/ open close /;
 use File::Basename;
 use File::Copy;
 
@@ -40,19 +43,15 @@
     my ( $file, $append_lines ) = @_;
     my $tmp_file = "$file.tmp";
 
-    open( IN, $file )
-        or die "bad open: $file  error: $! \n";
-    my @lines = <IN>;
-    close(IN) or die "bad close $file error: $!\n";
-
+    open( my $IN, "<", $file );
+    my @lines = <$IN>;
+    close($IN); 
     push @lines, $append_lines;
 
-    open( OUT, ">", "$tmp_file" )
-        or die "couldn't open $tmp_file.tmp error: $! \n";
-    ( print OUT @lines )
-        or die "couldn't write to $tmp_file $!\n";
+    open( my $OUT, ">", $tmp_file );
+    print $OUT @lines;
 
-    close(OUT) or die "couldn't close $tmp_file $!\n";
+    close($OUT);
     File::Copy::move( $tmp_file, $file )
         or die "couldn't rename $tmp_file to $file\n";
 }
@@ -76,7 +75,6 @@
 
 sub _add_site_specific_values {
     my $template_cfg = shift or croak 'missing param: $template_cfg';
-    my $username     = shift or croak 'missing param: $username';
     my %site_specific_values = @_;
 
     foreach my $key ( keys %site_specific_values ) {
@@ -175,9 +173,9 @@
 }
 
 sub _determine_user_config_filename_from {
-    my $username  = shift;
-    my $site_code = shift;
-    my $cfg       = shift;
+    my $username  = shift or croak 'missing param: $username';
+    my $site_code = shift or croak 'missing param: $site_code';
+    my $cfg       = shift or croak 'missing param: $cfg';
 
     my $base_dir = $cfg->param('BASE.dir');
 
@@ -257,7 +255,7 @@
     foreach my $key ( $template_cfg->param() ) {
         if ( !( $user_cfg->param($key) ) ) {
             my $value = $template_cfg->param($key);
-            $value = defined $value ? $value : 'BAD_MISSING';
+            $value = $value ? $value : 'BAD_MISSING';
             $user_cfg->param( $key, $value );
         }
     }
@@ -276,8 +274,7 @@
     my $host     = shift or croak 'missing parameter: $host';
     my $filename = shift or croak 'missing parameter: $filename';
 
-    open my $in_fh, $filename
-        or die "failed to open $filename error:$!";
+    open( my $in_fh, '<', $filename ); 
 
     my @contents = <$in_fh>;
     my $regex    = qr/$host/;
@@ -305,7 +302,7 @@
 }
 
 sub _set_db_ENV_vars {
-    my $cfg = shift;
+    my $cfg = shift or croak 'missing parameter: $cfg';
 
     # so psql stops on error
     $ENV{ON_ERROR_STOP} = 1;
@@ -318,43 +315,44 @@
 
 sub add_dns {
     my $username = shift or croak 'missing paramater: $username';
-    my $prefix   = shift or croak 'missing parameter: $prefix';
-
-    my $host = "$prefix.$username";
-    my $FILE = '/etc/bind/db.testing123.net';
-
-    my $line = sprintf( "%-15s IN      A       129.63.96.180\n", $host );
-    if ( _possible_dup_line( $host, $FILE ) ) {
-        warn "$host found in $FILE, skipping append\n";
-        return;
+
+    foreach my $prefix (@SITE_CODES) {
+        my $host = "$prefix.$username";
+        my $FILE = '/etc/bind/db.testing123.net';
+
+        my $line = sprintf( "%-15s IN      A       129.63.96.180\n", $host );
+        if ( _possible_dup_line( $host, $FILE ) ) {
+            warn "$host found in $FILE, skipping append\n";
+            return;
+        }
+
+        _append_to_file( $FILE, $line );
     }
-
-    _append_to_file( $FILE, $line );
 }
 
 sub add_apache_config {
     my $username = shift or croak 'missing paramater: $username';
-    my $prefix   = shift or croak 'missing parameter: $prefix';
-
-    my $FILE = '/etc/apache2/sites-available/mvhub_developer.data';
-    my $host = "$prefix.$username.testing123.net";
-
-    my $line = sprintf( "Use MVhub %-15s $prefix $host\n", $username );
-
-    if ( _possible_dup_line( $host, $FILE ) ) {
-        warn "$host found in $FILE, skipping append\n";
-        return;
+
+    foreach my $prefix (@SITE_CODES) {
+        my $FILE = '/etc/apache2/sites-available/mvhub_developer.data';
+        my $host = "$prefix.$username.testing123.net";
+
+        my $line = sprintf( "Use MVhub %-15s $prefix $host\n", $username );
+
+        if ( _possible_dup_line( $host, $FILE ) ) {
+            warn "$host found in $FILE, skipping append\n";
+            return;
+        }
+
+        _append_to_file( $FILE, $line );
     }
-
-    _append_to_file( $FILE, $line );
 }
 
 sub apply_database_updates_for {
     my $username = shift or croak 'missing paramater: $username';
     my $cfg      = shift or croak 'missing paramter: $cfg';
-    my @website_codes = @_;
 
-    foreach my $prefix (@website_codes) {
+    foreach my $prefix (@SITE_CODES) {
         my $update_user_cfg_filename
             = _determine_user_config_filename_from( $username, $prefix,
             $cfg );
@@ -479,7 +477,6 @@
 }
 
 sub get_production_data {
-    my @website_codes = @_;
     my $cmd;
 
     my $dt        = DateTime->now()->subtract( days => 1 );
@@ -488,14 +485,12 @@
     my $timestamp = "${ymd}-06_25-${dow}";
 
     print "Getting recent backup of production data...";
-    foreach my $site_code (@website_codes) {
+    foreach my $site_code (@SITE_CODES) {
         $cmd = "rsync csl-db-02.inside::backup/postgres/";
         $cmd .= "${timestamp}_${site_code}_production_db.dump ";
         $cmd .= "/tmp/${site_code}_production_data.dump";
 
-        ( system($cmd) == 0 )
-            or die
-            "Failed to rsync ${timestamp}_${site_code}_production_db.sql\n";
+        system($cmd);
     }
     print "done\n";
 }
@@ -503,12 +498,11 @@
 sub load_production_data {
     my $username = shift or croak 'missing param: $username';
     my $cfg      = shift or croak 'missing param: $cfg';
-    my @website_codes = @_;
 
     my $cmd;
 
     print "Loading production data...";
-    foreach my $suffix (@website_codes) {
+    foreach my $suffix (@SITE_CODES) {
         my $cfg_filename
             = _determine_user_config_filename_from( $username, $suffix,
             $cfg );
@@ -529,14 +523,13 @@
 sub load_test_data_for {
     my $username = shift or croak 'missing param: $username';
     my $cfg      = shift or croak 'missing param: $cfg';
-    my @website_codes = @_;
 
     my $path_to_project_tools
         = $cfg->param('ABSOLUTE_PATH.project_tools_dir');
     my $cmd;
 
     print "Loading test data...";
-    foreach my $suffix (@website_codes) {
+    foreach my $suffix (@SITE_CODES) {
         my $cfg_filename
             = _determine_user_config_filename_from( $username, $suffix,
             $cfg );
@@ -557,7 +550,7 @@
 sub make_config_files_for {
     my $username                       = shift;
     my $cfg                            = shift;
-    my @website_codes                  = @_;
+
     my @keys_for_user_generated_values = qw/ DATABASE.database_magic_word /;
 
     my $template_config_file
@@ -565,7 +558,7 @@
     my $template_cfg = new Config::Simple($template_config_file)
         or die "failed to create config object from $template_config_file";
 
-    foreach my $site_code (@website_codes) {
+    foreach my $site_code (@SITE_CODES) {
 
         my $cfg_filename
             = _determine_user_config_filename_from( $username, $site_code,
@@ -579,7 +572,7 @@
         print "Updating Config: $cfg_filename\n";
         my %site_specific_values = _get_site_specific_values($site_code);
 
-        $template_cfg = _add_site_specific_values( $template_cfg, $username,
+        $template_cfg = _add_site_specific_values( $template_cfg,
             %site_specific_values );
         $template_cfg
             = _add_calculable_values( $template_cfg, $username, $site_code );
@@ -655,7 +648,7 @@
         {   dest        => "/home/$username/.ssh/config",
             owner       => "$username",
             group       => "$username",
-            permissions => 'u=rwx,g=,o=',
+            permissions => 'u=rw,g=,o=',
             contents    => <<'CONTENT',
 Host bazaar.launchpad.net
 IdentityFile ~/.ssh/id_rsa_launchpad
@@ -684,7 +677,6 @@
 sub make_databases_for {
     my $username      = shift or croak 'missing parameter: $username';
     my $cfg           = shift or croak 'missing parameter: $cfg';
-    my @website_codes = @_    or croak 'mssing parameter: @website_codes';
 
     my $dbh = _get_dbh_for_template1_db($cfg);
     my $sql;
@@ -709,7 +701,7 @@
         return;
     }
 
-    foreach my $suffix (@website_codes) {
+    foreach my $suffix (@SITE_CODES) {
         if ( _db_exists( $dbh, "$username.$suffix" ) ) {
             $sql = qq{DROP DATABASE "$username.${suffix}"};
             $dbh->do($sql);
@@ -733,9 +725,9 @@
         if ( -e $file_href->{dest} ) {
             $file_href->{dest} = "$file_href->{dest}.default";
         }
-        open FILE, ">$file_href->{dest}" or croak "open FILE failed: $!";
-        print FILE $file_href->{contents};
-        close FILE or croak "close FILE failed: $!";
+        open my $FILE, ">$file_href->{dest}" or croak "open FILE failed: $!";
+        print $FILE $file_href->{contents};
+        close $FILE or croak "close FILE failed: $!";
         my $chown_cmd
             = "chown $file_href->{owner}:$file_href->{group} $file_href->{dest}";
         my $chmod_cmd = "chmod $file_href->{permissions} $file_href->{dest}";

=== added file 'lib-mvhub/t/Utils/Setup/_add_calculable_values.t'
--- lib-mvhub/t/Utils/Setup/_add_calculable_values.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_add_calculable_values.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;   # + 1 for no warnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_calculable_values() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_calculable_values(1) } $test_message;
+
+###
+$test_message = 'dies when missing 3rd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_calculable_values(1, 2) } $test_message;
+
+###
+$test_message = 'lives with 3 valid parameters';
+###
+my $config = new Config::Simple($ENV{MV_TEST_CONFIG_FILE});
+lives_ok { MVHub::Utils::Setup::_add_calculable_values($config, 'user', 'nsp') } $test_message;
+

=== added file 'lib-mvhub/t/Utils/Setup/_add_site_specific_values.t'
--- lib-mvhub/t/Utils/Setup/_add_site_specific_values.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_add_site_specific_values.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,30 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_site_specific_values() } $test_message;
+
+###
+$test_message = 'passed in value added to the config';
+###
+my $test_config        = new Config::Simple( $ENV{MV_TEST_CONFIG_FILE} );
+my %test_values_to_add = (
+    'TEST.key' => 'test_value',
+);
+
+my $result_cfg = MVHub::Utils::Setup::_add_site_specific_values( $test_config,
+    %test_values_to_add );
+is ( $result_cfg->param( 'TEST.key' ), $test_values_to_add{'TEST.key'}, $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_add_user_generated_values.t'
--- lib-mvhub/t/Utils/Setup/_add_user_generated_values.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_add_user_generated_values.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+{
+    package MVHub::Utils::Setup;
+
+    use subs qw/prompt/;
+
+    package main;
+    
+    no warnings; 
+    *MVHub::Utils::Setup::prompt = sub {
+        return $_ = 'test_value';
+    };
+    use warnings;
+}
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_user_generated_values() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_add_user_generated_values(1) } $test_message;
+
+###
+$test_message = 'Key not in config file added to config';
+###
+my $test_config        = new Config::Simple( $ENV{MV_TEST_CONFIG_FILE} );
+my %test_values_to_add = (
+    'TEST.key' => 'test_value',
+    'DATABASE.database_user' => 'not_a_user',
+);
+
+my $result_cfg = MVHub::Utils::Setup::_add_user_generated_values( $test_config, $test_config,
+    %test_values_to_add );
+is ( $result_cfg->param( 'TEST.key' ), $test_values_to_add{'TEST.key'}, $test_message);
+
+###
+$test_message = 'Key already in config not added';
+###
+isnt ( $result_cfg->param( 'DATABASE.database_user' ), $test_values_to_add{'DATABASE.database_user'}, $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_append_to_file.t'
--- lib-mvhub/t/Utils/Setup/_append_to_file.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_append_to_file.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,67 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use English '-no_match_vars';
+
+use Test::More tests => 3 + 1;   # + 1 for no warnings
+use Test::NoWarnings;
+use Test::Exception;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies on bad file';
+###
+dies_ok { MVHub::Utils::Setup::_append_to_file('bad_file_to_open.bad', '') } $test_message;
+
+###
+$test_message ='Lines are appended to the file';
+###
+my $append_success = 1;
+my $test_file = "/tmp/_append_to_file_$PID.txt";
+
+open ( my $TEST,'>', $test_file );
+print $TEST "This is a test file, it can be deleted\n";
+close $TEST;
+
+MVHub::Utils::Setup::_append_to_file( $test_file, "Appended line\n"); 
+
+open ($TEST, "<", $test_file );
+my @lines = <$TEST>;
+close $TEST;
+
+foreach my $line (@lines) {
+if (!$line =~ m/deleted|Appended/) {
+        $append_success = 0;
+    }
+}
+
+ok($append_success, $test_message);
+
+###
+$test_message = 'dies when rename file fails';
+###
+{
+    package File::Copy;
+
+    use subs qw/ move /;
+    
+    package main;
+
+    no warnings;    
+    *File::Copy::move = sub
+    {
+        return 0;
+    };
+    use warnings;
+
+    dies_ok { MVHub::Utils::Setup::_append_to_file( $test_file, 'Appended line') } $test_message;
+}
+
+unlink $test_file;
+unlink "$test_file.tmp";
+

=== added file 'lib-mvhub/t/Utils/Setup/_db_exists.t'
--- lib-mvhub/t/Utils/Setup/_db_exists.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_db_exists.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_exists() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_exists(1) } $test_message;
+
+###
+$test_message = 'returns 1 if db exists';
+###
+my $mock_dbh = Test::MockObject->new();
+$mock_dbh->mock(
+    'selectall_arrayref',
+    sub {
+        ( my $not_used, my $not_used_2, my @db_name ) = @_;
+        if   ( $db_name[1] eq 'true' ) { return ['true'] }
+        else                        { return [] }
+    }
+);
+
+is ( MVHub::Utils::Setup::_db_exists( $mock_dbh, 'true'), '1', $test_message);
+
+###
+$test_message = 'returns 0 if db does not exist';
+###
+is ( MVHub::Utils::Setup::_db_exists( $mock_dbh, 'false'), '0', $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_db_user_found.t'
--- lib-mvhub/t/Utils/Setup/_db_user_found.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_db_user_found.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_found() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_found(1) } $test_message;
+
+###
+$test_message = 'returns 1 if user exists';
+###
+my $mock_dbh = Test::MockObject->new();
+$mock_dbh->mock(
+    'selectall_arrayref',
+    sub {
+        ( my $not_used, my $not_used_2, my @user_name ) = @_;
+        if   ( $user_name[1] eq 'true' ) { return ['true'] }
+        else                        { return [] }
+    }
+);
+
+is ( MVHub::Utils::Setup::_db_user_found( $mock_dbh, 'true'), '1', $test_message);
+
+###
+$test_message = 'returns 0 if user does not exist';
+###
+is ( MVHub::Utils::Setup::_db_user_found( $mock_dbh, 'false'), '0', $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_db_user_has_needed_roles.t'
--- lib-mvhub/t/Utils/Setup/_db_user_has_needed_roles.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_db_user_has_needed_roles.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_has_needed_roles() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_has_needed_roles(1) } $test_message;
+
+###
+$test_message = 'returns 1 if user has needed roles';
+###
+my $mock_dbh = Test::MockObject->new();
+$mock_dbh->mock(
+    'selectall_arrayref',
+    sub {
+        ( my $not_used, my $not_used_2, my @user_name ) = @_;
+        if ( $user_name[1] eq 'true' ) {
+            return [ { 'rolcreaterole' => '1', 'rolcreatedb' => '1' } ];
+        }
+        else { return [] }
+    }
+);
+
+is( MVHub::Utils::Setup::_db_user_has_needed_roles( $mock_dbh, 'true' ),
+    '1', $test_message );
+
+###
+$test_message = 'returns 0 if user does not have needed roles';
+###
+is( MVHub::Utils::Setup::_db_user_has_needed_roles( $mock_dbh, 'false' ),
+    '0', $test_message );

=== added file 'lib-mvhub/t/Utils/Setup/_db_user_has_superuser_role.t'
--- lib-mvhub/t/Utils/Setup/_db_user_has_superuser_role.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_db_user_has_superuser_role.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_has_superuser_role() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_db_user_has_superuser_role(1) } $test_message;
+
+###
+$test_message = 'returns 1 if user is a superuser';
+###
+my $mock_dbh = Test::MockObject->new();
+$mock_dbh->mock(
+    'selectall_arrayref',
+    sub {
+        ( my $not_used, my $not_used_2, my @user_name ) = @_;
+        if ( $user_name[1] eq 'true' ) {
+            return [ { 'rolsuper' => '1' } ];
+        }
+        else { return [] }
+    }
+);
+
+is( MVHub::Utils::Setup::_db_user_has_superuser_role( $mock_dbh, 'true' ),
+    '1', $test_message );
+
+###
+$test_message = 'returns 0 if user is not a superuser';
+###
+is( MVHub::Utils::Setup::_db_user_has_superuser_role( $mock_dbh, 'false' ),
+    '0', $test_message );

=== added file 'lib-mvhub/t/Utils/Setup/_determine_user_config_filename_from.t'
--- lib-mvhub/t/Utils/Setup/_determine_user_config_filename_from.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_determine_user_config_filename_from.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_determine_user_config_filename_from() }
+$test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_determine_user_config_filename_from(1) }
+$test_message;
+
+###
+$test_message = 'dies when missing 3rd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_determine_user_config_filename_from( 1, 2 ) }
+$test_message;
+
+###
+$test_message = 'lives when passed correct parameters';
+###
+my $test_cfg = new Config::Simple( $ENV{MV_TEST_CONFIG_FILE} );
+lives_ok {
+    MVHub::Utils::Setup::_determine_user_config_filename_from( 'test', 'nsp',
+        $test_cfg );
+}
+$test_message;
+

=== added file 'lib-mvhub/t/Utils/Setup/_do_or_die.t'
--- lib-mvhub/t/Utils/Setup/_do_or_die.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_do_or_die.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+BEGIN {
+    package MVHub::Utils::Setup;
+
+    use subs 'system';
+
+    package main;
+    *MVHub::Utils::Setup::system = sub {
+        my $cmd = shift;
+        if ($cmd eq 'true') {
+            return 0;
+        }
+        else { return 1 };
+    };
+
+} 
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_do_or_die() }
+$test_message;
+
+###
+$test_message = 'lives when system executes command successfully';
+###
+
+lives_ok {  MVHub::Utils::Setup::_do_or_die( 'true'  ) } $test_message;
+    
+###
+$test_message = 'dies when system fails on command';
+### 
+# $fail = 1;
+dies_ok {  MVHub::Utils::Setup::_do_or_die( 'false' ) } $test_message;

=== added file 'lib-mvhub/t/Utils/Setup/_get_dbh_for_template1_db.t'
--- lib-mvhub/t/Utils/Setup/_get_dbh_for_template1_db.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_get_dbh_for_template1_db.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockModule;
+use Config::Simple;
+use DBI;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_get_dbh_for_template1_db() } $test_message;
+
+###
+$test_message = 'returns valid dbh from config file';
+###
+my $test_config = new Config::Simple( $ENV{MV_CONFIG_FILE} );
+
+my $mock_dbh = DBI->connect('DBI:Mock:', '', '');
+my $mock_module = new Test::MockModule('DBI');
+$mock_module->mock(
+    'connect',
+    sub {
+        return $mock_dbh;
+    }
+);
+my $test_dbh = MVHub::Utils::Setup::_get_dbh_for_template1_db($test_config); 
+ok(ref $test_dbh eq 'DBI::db', $test_message);
+
+###
+$test_message = 'dies if DBI->connect fails';
+###
+$mock_dbh = 0;
+dies_ok { MVHub::Utils::Setup::_get_dbh_for_template1_db($test_config) } $test_message;

=== added file 'lib-mvhub/t/Utils/Setup/_get_site_specific_values.t'
--- lib-mvhub/t/Utils/Setup/_get_site_specific_values.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_get_site_specific_values.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_get_site_specific_values() } $test_message;
+
+###
+$test_message = 'returns valid hash when passed in a site code';
+###
+my %test_hash = MVHub::Utils::Setup::_get_site_specific_values( 'nsp' );
+ok (scalar %test_hash, $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_make_empty_config_file_named.t'
--- lib-mvhub/t/Utils/Setup/_make_empty_config_file_named.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_make_empty_config_file_named.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use English '-no_match_vars';
+
+use Test::More tests => 2 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_make_empty_config_file_named() } $test_message;
+
+###
+$test_message = 'Creates file when passed in filename';
+###
+my $filename = "/tmp/_make_empty_config_file_named_$PID.txt";
+MVHub::Utils::Setup::_make_empty_config_file_named( $filename );
+
+ok((-e $filename), $test_message);
+
+unlink $filename;

=== added file 'lib-mvhub/t/Utils/Setup/_merge_conf_objects.t'
--- lib-mvhub/t/Utils/Setup/_merge_conf_objects.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_merge_conf_objects.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_merge_conf_objects() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_merge_conf_objects(1) } $test_message;
+
+###
+$test_message = 'merges conf files correctly';
+###
+my $test_cfg_1 = new Config::Simple(syntax => 'ini');
+my $test_cfg_2 = new Config::Simple(syntax => 'ini');
+$test_cfg_1->param( 'TEST.key_1', 'key_1_value' );
+$test_cfg_1->param( 'TEST.key_2', '' );
+$test_cfg_1->param( 'TEST.key_3', 'key_3_value' );
+
+$test_cfg_2->param( 'TEST.key_1', 'key_1_value' );
+$test_cfg_2->param( 'TEST.key_4', 'key_4_value' );
+
+$test_cfg_2
+    = MVHub::Utils::Setup::_merge_conf_objects( $test_cfg_1, $test_cfg_2 );
+my %expected = (
+    'TEST.key_1' => 'key_1_value',
+    'TEST.key_2' => 'BAD_MISSING',
+    'TEST.key_3' => 'key_3_value'
+);
+my %got = $test_cfg_2->vars();
+is_deeply (\%got, \%expected, $test_message);

=== added file 'lib-mvhub/t/Utils/Setup/_possible_dup_line.t'
--- lib-mvhub/t/Utils/Setup/_possible_dup_line.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_possible_dup_line.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use English '-no_match_vars';
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_possible_dup_line() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::_possible_dup_line(1) } $test_message;
+
+###
+$test_message = 'returns true if host exists in file';
+###
+my $test_filename = "/tmp/_possible_dup_line_$PID.txt";
+open my $test_fh, ">", $test_filename or die "open error: $!";
+print $test_fh "This line contains the word true";
+close $test_fh or die "close error: $!";
+
+ok( MVHub::Utils::Setup::_possible_dup_line( 'true', $test_filename ), $test_message );
+
+###
+$test_message = 'returns false if host does not exist in file';
+###
+ok(! MVHub::Utils::Setup::_possible_dup_line( 'false', $test_filename ), $test_message );
+unlink $test_filename;

=== added file 'lib-mvhub/t/Utils/Setup/_run_sql_db_update_scripts.t'
--- lib-mvhub/t/Utils/Setup/_run_sql_db_update_scripts.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_run_sql_db_update_scripts.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+our $PASS_TEST = 1;
+
+BEGIN {
+    package MVHub::Utils::Setup;
+    use subs qw/ readpipe /;
+
+    package main;
+
+    *MVHub::Utils::Setup::readpipe = sub {
+        if ($PASS_TEST) {
+            return 'COMMIT';
+        }
+        else {
+            return 'ROLLBACK';
+        }
+    };
+}
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'lives when COMMIT is returned';
+###
+my @test_scripts = ( 'test' );
+
+lives_ok { MVHub::Utils::Setup::_run_sql_db_update_scripts(@test_scripts) } $test_message;
+
+###
+$test_message = 'dies when ROLLBACK is returned';
+###
+$PASS_TEST = 0;
+dies_ok { MVHub::Utils::Setup::_run_sql_db_update_scripts(@test_scripts) } $test_message;

=== added file 'lib-mvhub/t/Utils/Setup/_set_db_ENV_vars.t'
--- lib-mvhub/t/Utils/Setup/_set_db_ENV_vars.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/_set_db_ENV_vars.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 2 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::_set_db_ENV_vars() } $test_message;
+
+###
+$test_message = 'lives when passed valid config file';
+###
+my $test_config = new Config::Simple($ENV{MV_TEST_CONFIG_FILE});
+lives_ok { MVHub::Utils::Setup::_set_db_ENV_vars($test_config) } $test_message;
+

=== added file 'lib-mvhub/t/Utils/Setup/add_apache_config.t'
--- lib-mvhub/t/Utils/Setup/add_apache_config.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/add_apache_config.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::Warn;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::add_apache_config() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::add_apache_config(1) } $test_message;
+
+{
+    package MVHub::Utils::Setup;
+
+    use subs qw/ _append_to_file _possible_dup_line /;
+
+    package main;
+
+    my $fail = 1;    
+    
+    no warnings;
+    *MVHub::Utils::Setup::_append_to_file = sub {
+        return 0;
+    };
+    *MVHub::Utils::Setup::_possible_dup_line = sub {
+        return $fail;
+    };
+    use warnings;
+
+    ###
+    $test_message = 'outputs warning when duplicate line found';
+    ###
+    warning_like { MVHub::Utils::Setup::add_apache_config('test', 'nsp') } qr/skipping append/, $test_message;
+    
+    ###
+    $test_message = 'no warning when no duplicate is found';
+    ###
+    $fail = 0;
+    lives_ok { MVHub::Utils::Setup::add_apache_config('test', 'nsp') } $test_message;
+
+}    
+ 
+
+

=== added file 'lib-mvhub/t/Utils/Setup/add_dns.t'
--- lib-mvhub/t/Utils/Setup/add_dns.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/add_dns.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::Warn;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::add_dns() } $test_message;
+
+{
+
+    package MVHub::Utils::Setup;
+
+    use subs qw/ _append_to_file _possible_dup_line /;
+
+    package main;
+
+    my $fail = 1;
+
+    no warnings;
+    *MVHub::Utils::Setup::_append_to_file = sub {
+        return 0;
+    };
+    *MVHub::Utils::Setup::_possible_dup_line = sub {
+        return $fail;
+    };
+    use warnings;
+
+    ###
+    $test_message = 'outputs warning when duplicate line found';
+    ###
+    warning_like { MVHub::Utils::Setup::add_dns( 'test', 'nsp' ) }
+    qr/skipping append/, $test_message;
+
+    ###
+    $test_message = 'no warning when no duplicate is found';
+    ###
+    $fail = 0;
+    lives_ok { MVHub::Utils::Setup::add_dns( 'test', 'nsp' ) } $test_message;
+
+}
+

=== added file 'lib-mvhub/t/Utils/Setup/apply_database_updates_for.t'
--- lib-mvhub/t/Utils/Setup/apply_database_updates_for.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/apply_database_updates_for.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,74 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 4 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::Warn;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::apply_database_updates_for() } $test_message;
+
+###
+$test_message = 'dies when missing 2nd parameter';
+###
+dies_ok { MVHub::Utils::Setup::apply_database_updates_for(1) } $test_message;
+
+{
+    package MVHub::Utils::Setup;
+
+    use subs
+        qw/ _determine_user_config_filename_from 
+            get_db_version 
+            get_sql_db_update_scripts 
+            _set_db_ENV_vars 
+            _run_sql_db_update_scripts /;
+
+    package main;
+
+    my $fail = 1;
+
+    no warnings;
+    *MVHub::Utils::Setup::_determine_user_config_filename_from = sub {
+        return 1;
+    };
+    *MVHub::Utils::Setup::get_db_version  = sub {
+        return 1;
+    };
+    *MVHub::Utils::Setup::get_sql_db_update_scripts = sub {
+        return 1;
+    };
+    *MVHub::Utils::Setup::_set_db_ENV_vars = sub {
+        return 1;
+    };
+    *MVHub::Utils::Setup::_run_sql_db_update_scripts = sub {
+        return 1;
+    };
+
+    use warnings;
+    SKIP: { 
+        skip 'Not implemented', 2;
+        ###
+        $test_message = 'outputs warning when duplicate line found';
+        ###
+        warning_like { MVHub::Utils::Setup::apply_database_updates_for( 'test', 'nsp' ) }
+        qr/skipping append/, $test_message;
+
+        ###
+        $test_message = 'no warning when no duplicate is found';
+        ###
+        lives_ok { MVHub::Utils::Setup::apply_database_updates_for( 'test', 'nsp' ) }
+        $test_message;
+    };
+}
+
+

=== added file 'lib-mvhub/t/Utils/Setup/get_db_version.t'
--- lib-mvhub/t/Utils/Setup/get_db_version.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/get_db_version.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::Warn;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+
+my $test_message;
+
+###
+$test_message = 'dies when missing 1st parameter';
+###
+dies_ok { MVHub::Utils::Setup::get_db_version() } $test_message;
+
+###
+$test_message = 'returns non-zero if table exists';
+###
+my $table_exists = 1;
+my $mock_dbh = Test::MockObject->new();
+$mock_dbh->mock(
+    'selectrow_array',
+    sub {
+        my $test_val  = shift;
+        if   ( $table_exists ) { return (1); }
+        else                        { return 0; }
+    }
+);
+
+my $version = MVHub::Utils::Setup::get_db_version( $mock_dbh );
+ok( $version, $test_message);
+
+###
+$test_message = 'returns zero if table does not exist';
+###
+$table_exists = 0;
+$version = MVHub::Utils::Setup::get_db_version( $mock_dbh );
+ok ( !$version, $test_message );

=== added file 'lib-mvhub/t/Utils/Setup/get_dirs_with.t'
--- lib-mvhub/t/Utils/Setup/get_dirs_with.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/get_dirs_with.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+
+use MVHub::Utils::Setup;
+
+my $test_message;
+###
+$test_message = 'dies with no base directory';
+###
+dies_ok { MVHub::Utils::Setup::get_dirs_with() } $test_message;
+
+###
+$test_message = 'dies with no username';
+###
+dies_ok { MVHub::Utils::Setup::get_dirs_with('test') } $test_message;
+
+###
+$test_message = 'directories returned contain parameters passed in';
+###
+my @result = MVHub::Utils::Setup::get_dirs_with( 'test', 'test_username' );
+like ($result[0]->{dir}, qr/test\/test_username/, $test_message);
+

=== added file 'lib-mvhub/t/Utils/Setup/get_production_data.t'
--- lib-mvhub/t/Utils/Setup/get_production_data.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/get_production_data.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More tests => 1 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use MVHub::Utils::Setup;
+{
+    package MVHub::Utils::Setup;
+
+    use subs 'system';
+
+    package main;
+    
+    no warnings;
+    *MVHub::Utils::Setup::system = sub {
+        return 0;
+    };
+    use warnings;
+} 
+
+my $test_message;
+###
+$test_message = 'subroutine lives when called';
+###
+lives_ok { MVHub::Utils::Setup::get_production_data() } $test_message;
+

=== added file 'lib-mvhub/t/Utils/Setup/get_sql_db_update_scripts.t'
--- lib-mvhub/t/Utils/Setup/get_sql_db_update_scripts.t	1970-01-01 00:00:00 +0000
+++ lib-mvhub/t/Utils/Setup/get_sql_db_update_scripts.t	2010-06-16 17:11:20 +0000
@@ -0,0 +1,50 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use English '-no_match_vars';
+
+use File::Basename;
+use File::Copy;
+
+use Test::More tests => 3 + 1;    # + 1 for NoWarnings
+use Test::NoWarnings;
+use Test::Exception;
+use Test::Warn;
+use Test::MockObject;
+use Config::Simple;
+
+use MVHub::Utils::Setup;
+
+
+my $test_message;
+
+###
+$test_message = 'dies when sql file in directory does not conform to naming standard';
+###
+my $test_filename = "/tmp/get_sql_db_update_scripts_$PID.sql";
+
+open my $test_fh, ">", $test_filename;
+print $test_fh "This a test file. It can be deleted.\n";
+close $test_fh;
+
+dies_ok { MVHub::Utils::Setup::get_sql_db_update_scripts(path => '/tmp/', version => 0) } $test_message;
+
+###
+$test_message = 'Adds scripts to array if properly formatted';
+###
+my $renamed = "/tmp/001_get_sql_db_update_scripts_$PID.sql";
+File::Copy::move($test_filename, $renamed) or die;
+
+my @returned_scripts = MVHub::Utils::Setup::get_sql_db_update_scripts(path => '/tmp/', version => 0);
+is(scalar @returned_scripts, 1, $test_message);
+
+###
+$test_message = 'Does not add scripts if less than version number given';
+###
+
+@returned_scripts = MVHub::Utils::Setup::get_sql_db_update_scripts(path => '/tmp/', version => 1);
+is(scalar @returned_scripts, 0, $test_message);
+
+unlink $renamed;

=== modified file 'lib-mvhub/t/conf/all.conf'
--- lib-mvhub/t/conf/all.conf	2010-06-13 22:41:22 +0000
+++ lib-mvhub/t/conf/all.conf	2010-06-16 17:11:20 +0000
@@ -6,7 +6,7 @@
 
 [DATABASE]
 # not needed for sqlite
-database_host=
+database_host=localhost
 database_name=/tmp/test.sqlite
 database_user=test
 # the database user's p---word


Follow ups