/spec/database/mongodb_spec.rb
https://github.com/arunagw/backup · Ruby · 144 lines · 115 code · 28 blank · 1 comment · 16 complexity · 62ea025343a6c0b2178e25bb2095ad33 MD5 · raw file
- # encoding: utf-8
- require File.dirname(__FILE__) + '/../spec_helper'
- describe Backup::Database::MongoDB do
- before do
- Backup::Database::MongoDB.any_instance.stubs(:load_defaults!)
- end
- let(:db) do
- Backup::Database::MongoDB.new do |db|
- db.name = 'mydatabase'
- db.username = 'someuser'
- db.password = 'secret'
- db.host = 'localhost'
- db.port = 123
- db.ipv6 = true
- db.only_collections = ['users', 'pirates']
- db.additional_options = ['--query']
- end
- end
- describe '#new' do
- it 'should read the adapter details correctly' do
- db.name.should == 'mydatabase'
- db.username.should == 'someuser'
- db.password.should == 'secret'
- db.host.should == 'localhost'
- db.port.should == 123
- db.only_collections.should == ['users', 'pirates']
- db.additional_options.should == '--query'
- end
- it 'arrays should default to empty arrays when not specified' do
- db = Backup::Database::MongoDB.new do |db|
- db.name = 'mydatabase'
- db.username = 'someuser'
- db.password = 'secret'
- end
- db.only_collections.should == []
- db.additional_options.should == ""
- end
- it 'should ensure the directory is available' do
- Backup::Database::MongoDB.any_instance.expects(:mkdir).with("#{Backup::TMP_PATH}/myapp/MongoDB")
- Backup::Database::MongoDB.new {}
- end
- end
- describe '#only_collections' do
- it 'should return a string for the mongodump selected table to dump option' do
- db.collections_to_dump.should == %w[users pirates]
- end
- end
- describe '#credential_options' do
- it 'should return the mongo syntax for the credential options' do
- db.credential_options.should == "--username='someuser' --password='secret'"
- end
- it 'should only return the mongo syntax for the user' do
- db = Backup::Database::MongoDB.new do |db|
- db.username = 'someuser'
- end
- db.credential_options.should == "--username='someuser'"
- end
- end
- describe '#connectivity_options' do
- it 'should return the mongo syntax for the connectivity options' do
- db.connectivity_options.should == "--host='localhost' --port='123'"
- end
- it 'should return only the socket' do
- db = Backup::Database::MongoDB.new do |db|
- db.host = ''
- db.port = 123
- end
- db.connectivity_options.should == "--port='123'"
- end
- end
- describe '#ipv6' do
- it 'should return a mongodb syntax compatible ipv6 flag' do
- db.ipv6 = true
- db.ipv6.should == '--ipv6'
- end
- it 'should return an empty string' do
- db.ipv6 = nil
- db.ipv6.should == ''
- end
- end
- describe '#mongodump_string' do
- it 'should return the full mongodump string' do
- db.expects(:utility).with(:mongodump).returns('mongodump')
- db.mongodump.should ==
- "mongodump --db='mydatabase' --username='someuser' --password='secret' " +
- "--host='localhost' --port='123' --ipv6 --query --out='#{ File.join(Backup::TMP_PATH, Backup::TRIGGER, 'MongoDB') }'"
- end
- end
- describe '#perform!' do
- before do
- Backup::Logger.stubs(:message)
- db.stubs(:utility).returns('mongodump')
- db.stubs(:mkdir)
- db.stubs(:run)
- end
- it 'should run the mongodump command and dump all collections' do
- db.only_collections = []
- db.expects(:dump!)
- db.perform!
- end
- it 'should run the mongodump command and dump all collections' do
- db.only_collections = nil
- db.expects(:dump!)
- db.perform!
- end
- it 'should dump only the provided collections' do
- db.only_collections = %w[users admins profiles]
- db.expects(:specific_collection_dump!)
- db.perform!
- end
- it do
- Backup::Logger.expects(:message).with("Backup::Database::MongoDB started dumping and archiving \"mydatabase\".")
- db.perform!
- end
- end
- end