diff --git a/Gemfile b/Gemfile index 8a5e7577..fa0cb808 100755 --- a/Gemfile +++ b/Gemfile @@ -19,7 +19,8 @@ group :development, :test do # auto-load factories from spec/factories gem 'factory_bot_rails' - gem 'rails', '~> 7.0' + # Enforce tests to run on 7.0.X + gem 'rails', '~> 7.0.0' gem 'net-smtp', require: false # Used to create fake data diff --git a/app/models/mdm/payload.rb b/app/models/mdm/payload.rb index 5944aa45..74d9bfa4 100644 --- a/app/models/mdm/payload.rb +++ b/app/models/mdm/payload.rb @@ -92,10 +92,18 @@ class Mdm::Payload < ApplicationRecord # # Serializations - # - serialize :urls - serialize :build_opts + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :urls, coder: YAML + else + serialize :urls + end + + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :build_opts, coder: YAML + else + serialize :build_opts + end public diff --git a/db/migrate/20110317144932_add_session_table.rb b/db/migrate/20110317144932_add_session_table.rb index 718038f8..0db38b78 100755 --- a/db/migrate/20110317144932_add_session_table.rb +++ b/db/migrate/20110317144932_add_session_table.rb @@ -1,7 +1,11 @@ class AddSessionTable < ActiveRecord::Migration[4.2] class Event < ApplicationRecord - serialize :info + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :info, coder: YAML + else + serialize :info + end end class SessionEvent < ApplicationRecord @@ -10,7 +14,11 @@ class SessionEvent < ApplicationRecord class Session < ApplicationRecord has_many :events, :class_name => 'AddSessionTable::SessionEvent' - serialize :datastore + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :datastore, coder: YAML + else + serialize :datastore + end end def self.up diff --git a/db/migrate/20110422000000_convert_binary.rb b/db/migrate/20110422000000_convert_binary.rb index 81f0e6ad..1d8ec923 100755 --- a/db/migrate/20110422000000_convert_binary.rb +++ b/db/migrate/20110422000000_convert_binary.rb @@ -3,11 +3,19 @@ class ConvertBinary < ActiveRecord::Migration[4.2] class WebPage < ApplicationRecord - serialize :headers + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :headers, coder: YAML + else + serialize :headers + end end class WebVuln < ApplicationRecord - serialize :params + if ActiveRecord::VERSION::MAJOR >= 7 && ActiveRecord::VERSION::MINOR >= 1 + serialize :params, coder: YAML + else + serialize :params + end end def bfilter(str) diff --git a/spec/app/models/mdm/payload_spec.rb b/spec/app/models/mdm/payload_spec.rb new file mode 100644 index 00000000..3624499a --- /dev/null +++ b/spec/app/models/mdm/payload_spec.rb @@ -0,0 +1,45 @@ +RSpec.describe Mdm::Payload, type: :model do + it_should_behave_like 'Metasploit::Concern.run' + + context 'factory' do + it 'should be valid' do + mdm_payload = FactoryBot.build(:mdm_payload) + expect(mdm_payload).to be_valid + end + end + + context 'database' do + + context 'timestamps'do + it { is_expected.to have_db_column(:created_at).of_type(:datetime) } + it { is_expected.to have_db_column(:updated_at).of_type(:datetime) } + end + + context 'columns' do + it { is_expected.to have_db_column(:name).of_type(:string) } + it { is_expected.to have_db_column(:uuid).of_type(:string) } + it { is_expected.to have_db_column(:uuid_mask).of_type(:integer) } + it { is_expected.to have_db_column(:timestamp).of_type(:integer) } + it { is_expected.to have_db_column(:arch).of_type(:string) } + it { is_expected.to have_db_column(:platform).of_type(:string) } + it { is_expected.to have_db_column(:urls).of_type(:string) } + it { is_expected.to have_db_column(:description).of_type(:string) } + it { is_expected.to have_db_column(:raw_payload).of_type(:string) } + it { is_expected.to have_db_column(:raw_payload_hash).of_type(:string) } + it { is_expected.to have_db_column(:build_status).of_type(:string) } + it { is_expected.to have_db_column(:build_opts).of_type(:string) } + end + end + + context '#destroy' do + it 'should successfully destroy the object' do + payload = FactoryBot.create(:mdm_payload) + expect { + payload.destroy + }.to_not raise_error + expect { + payload.reload + }.to raise_error(ActiveRecord::RecordNotFound) + end + end +end diff --git a/spec/dummy/config/application.rb b/spec/dummy/config/application.rb index 4a010e2e..5a778087 100644 --- a/spec/dummy/config/application.rb +++ b/spec/dummy/config/application.rb @@ -1,5 +1,6 @@ require File.expand_path('../boot', __FILE__) - +require "logger" +require "active_support" require 'rails/all' Bundler.require(*Rails.groups) diff --git a/spec/factories/mdm/payloads.rb b/spec/factories/mdm/payloads.rb new file mode 100644 index 00000000..d3dc6dce --- /dev/null +++ b/spec/factories/mdm/payloads.rb @@ -0,0 +1,7 @@ +FactoryBot.define do + factory :mdm_payload, :aliases => [:payload], :class => Mdm::Payload do + # + # Associations + # + end +end