Skip to content

Commit 398dcfa

Browse files
committed
Merge branch 'master' into bug/migrations
2 parents 0e435d3 + 604da84 commit 398dcfa

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

lib/msf/core/db_manager.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,16 @@ def initialize_metasploit_data_models
161161
'db',
162162
'migrate'
163163
)
164-
ActiveRecord::Migrator.migrations_paths << metasploit_data_model_migrations_pathname.to_s
164+
metasploit_data_model_migrations_path = metasploit_data_model_migrations_pathname.to_s
165+
166+
# Since ActiveRecord::Migrator.migrations_paths can persist between
167+
# instances of Msf::DBManager, such as in specs,
168+
# metasploit_data_models_migrations_path may already be part of
169+
# migrations_paths, in which case it should not be added or multiple
170+
# migrations with the same version number errors will occur.
171+
unless ActiveRecord::Migrator.migrations_paths.include? metasploit_data_model_migrations_path
172+
ActiveRecord::Migrator.migrations_paths << metasploit_data_model_migrations_path
173+
end
165174
end
166175

167176
#

spec/lib/msf/db_manager_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,24 @@
2121
it_should_behave_like 'Msf::DBManager::Migration'
2222
it_should_behave_like 'Msf::DBManager::ImportMsfXml'
2323

24+
context '#initialize_metasploit_data_models' do
25+
def initialize_metasploit_data_models
26+
db_manager.initialize_metasploit_data_models
27+
end
28+
29+
it 'should not add duplicate paths to ActiveRecord::Migrator.migrations_paths' do
30+
initialize_metasploit_data_models
31+
32+
expect {
33+
initialize_metasploit_data_models
34+
}.to_not change {
35+
ActiveRecord::Migrator.migrations_paths.length
36+
}
37+
38+
ActiveRecord::Migrator.migrations_paths.uniq.should == ActiveRecord::Migrator.migrations_paths
39+
end
40+
end
41+
2442
context '#purge_all_module_details' do
2543
def purge_all_module_details
2644
db_manager.purge_all_module_details

0 commit comments

Comments
 (0)