X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=test%2Fmailshears_test.rb;h=22c634f43b643b41c3764f21ec79fbaf5bc1c186;hp=b4ba814f014e2dd83919f07200ac04dc1804fd18;hb=HEAD;hpb=342327326fc5203b34435a7291f5528f214c1717 diff --git a/test/mailshears_test.rb b/test/mailshears_test.rb index b4ba814..215d05f 100644 --- a/test/mailshears_test.rb +++ b/test/mailshears_test.rb @@ -1,9 +1,17 @@ +# Without this, I get... +# +# Warning: you should require 'minitest/autorun' instead. +# Warning: or add 'gem "minitest"' before 'require "minitest/autorun"' +# +# Whatever. +gem 'minitest' +require 'minitest/autorun' + require 'common/configuration' require 'fileutils' -require 'minitest/unit' require 'pg' -class MailshearsTest < MiniTest::Unit::TestCase +class MailshearsTest < Minitest::Test # This is that class that most (if not all) of our test cases will # inherit. It provides the automatic setup and teardown of the # filesystem and database that the test cases will exercise. @@ -24,21 +32,15 @@ class MailshearsTest < MiniTest::Unit::TestCase # Connect to the database (specified in the test configuration) as # the superuser. Your local configuration is expected to be such # that this "just works." - db_host = 'localhost' - db_port = 5432 - db_opts = nil - db_tty = nil - db_name = 'postgres' - db_user = 'postgres' - db_pass = nil - - connection = PGconn.connect(db_host, - db_port, - db_opts, - db_tty, - db_name, - db_user, - db_pass) + db_hash = { + :host => 'localhost', + :port => 5432, + :options => nil, + :dbname => 'postgres', + :user => 'postgres', + :password => nil + } + connection = PG::Connection.new(db_hash) return connection end @@ -63,31 +65,7 @@ class MailshearsTest < MiniTest::Unit::TestCase # # == Databases == # - # 1. agendav_test - # - # +------------------------------+ - # | prefs | - # +--------------------+---------+ - # | username | options | - # +--------------------+---------+ - # | adam@example.net | herp | - # +--------------------+---------+ - # | booger@example.com | herp | - # +------------------ +---------+ - # - # - # +---------------------------------------------------------+ - # | shared | - # +-----+--------------------+----------+-------------------+ - # | sid | user_from | calendar | user_which | - # +-----+--------------------+----------+-------------------+ - # | 1 | adam@example.net | derp | beth@example.net | - # +-----+--------------------+----------+-------------------+ - # | 2 | booger@example.com | derp | carol@example.net | - # +-----+--------------------+----------+-------------------+ - # - # - # 2. davical_test + # 1. davical_test # # +--------------------------------------------------------+ # | usr | @@ -111,7 +89,7 @@ class MailshearsTest < MiniTest::Unit::TestCase # +---------+--------------+----------------+ # # - # 3. postfixadmin_test + # 2. postfixadmin_test # # +-------------+ # | domain | @@ -143,21 +121,24 @@ class MailshearsTest < MiniTest::Unit::TestCase # +-------------------+-------------+------------+ # # - # +------------------------------------------------------+ - # | alias | - # +-------------------+-------------------+--------------+ - # | address | goto | domain | - # +-------------------+-------------------+--------------+ - # | alice@example.com | alice@example.com | example.com | - # +-------------------+-------------------+--------------+ - # | bob@example.com | bob@example.com | example.com | - # +-------------------+-------------------+--------------+ - # | adam@example.net | adam@example.net | example.net | - # +-------------------+-------------------+--------------+ - # | beth@example.net | beth@example.net | example.net | - # +-------------------+-------------------+--------------+ - # | carol@example.net | carol@example.net | example.net | - # +-------------------+-------------------+--------------+ + # +-------------------------------------------------------+ + # | alias | + # +-------------------+--------------------+--------------+ + # | address | goto | domain | + # +-------------------+--------------------+--------------+ + # | alice@example.com | alice@example.com, | example.com | + # | | adam@example.net, | | + # | | bob@example.com, | | + # | | carol@example.net | | + # +-------------------+--------------------+--------------+ + # | bob@example.com | bob@example.com | example.com | + # +-------------------+--------------------+--------------+ + # | adam@example.net | adam@example.net | example.net | + # +-------------------+--------------------+--------------+ + # | beth@example.net | beth@example.net | example.net | + # +-------------------+--------------------+--------------+ + # | carol@example.net | carol@example.net | example.net | + # +-------------------+--------------------+--------------+ # # # +---------------------------------+ @@ -170,7 +151,7 @@ class MailshearsTest < MiniTest::Unit::TestCase # | admin@example.com | example.net | # +-------------------+-------------+ # - # 4. roundcube_test + # 3. roundcube_test # # # +---------+--------------------+ @@ -183,6 +164,10 @@ class MailshearsTest < MiniTest::Unit::TestCase # | 3 | adam@example.net | # +---------+--------------------+ + # First make sure we get rid of everything so we don't get random + # failures from databases and directories that already exist. + teardown() + cfg = configuration() # First create the "mail directories". @@ -198,27 +183,23 @@ class MailshearsTest < MiniTest::Unit::TestCase plugin_dbname = cfg.send("#{plugin}_dbname") next if plugin_dbname.nil? # Skip the dovecot plugin query = "CREATE DATABASE #{plugin_dbname};" - connection.query(query) - - plugin_dbhost = cfg.send("#{plugin}_dbhost") - plugin_dbport = cfg.send("#{plugin}_dbport") - plugin_dbopts = cfg.send("#{plugin}_dbopts") - plugin_dbtty = cfg.send("#{plugin}_dbtty") - plugin_dbuser = cfg.send("#{plugin}_dbuser") - plugin_dbpass = cfg.send("#{plugin}_dbpass") - - plugin_conn = PGconn.connect(plugin_dbhost, - plugin_dbport, - plugin_dbopts, - plugin_dbtty, - plugin_dbname, - plugin_dbuser, - plugin_dbpass) + connection.sync_exec(query) + + plugin_dbhash = { + :host => cfg.send("#{plugin}_dbhost"), + :port => cfg.send("#{plugin}_dbport"), + :options => cfg.send("#{plugin}_dbopts"), + :dbname => plugin_dbname, + :user => cfg.send("#{plugin}_dbuser"), + :password => cfg.send("#{plugin}_dbpass") + } + + plugin_conn = PG::Connection.new(plugin_dbhash) sql = File.open("test/sql/#{plugin}.sql").read() - plugin_conn.query(sql) + plugin_conn.sync_exec(sql) sql = File.open("test/sql/#{plugin}-fixtures.sql").read() - plugin_conn.query(sql) + plugin_conn.sync_exec(sql) plugin_conn.close() end @@ -231,17 +212,21 @@ class MailshearsTest < MiniTest::Unit::TestCase cfg = configuration() connection = connect_superuser() + # Don't emit notices about missing tables. Why this happens when I + # explicitly say IF EXISTS is beyond me. + connection.set_notice_processor{} + cfg.plugins.each do |plugin| plugin_dbname = cfg.send("#{plugin}_dbname") next if plugin_dbname.nil? # Skip the dovecot plugin - query = "DROP DATABASE #{plugin_dbname};" - connection.query(query) + query = "DROP DATABASE IF EXISTS #{plugin_dbname};" + connection.sync_exec(query) end connection.close() # Get rid of the maildirs. - FileUtils.rm_r(cfg.dovecot_mail_root()) + FileUtils.rm_rf(cfg.dovecot_mail_root()) end end