spec/support/constraints.rb in mongoid-7.0.13 vs spec/support/constraints.rb in mongoid-7.1.0.rc0
- old
+ new
@@ -2,45 +2,239 @@
# encoding: utf-8
module Constraints
RAILS_VERSION = ActiveSupport.version.to_s.split('.')[0..1].join('.').freeze
- def require_driver_query_cache
- before(:all) do
- if !defined?(Mongo::QueryCache)
- skip "Driver version #{Mongo::VERSION} does not support query cache"
+ def min_rails_version(version)
+ unless version =~ /^\d+\.\d+$/
+ raise ArgumentError, "Version can only be major.minor: #{version}"
+ end
+
+ before do
+ if version > RAILS_VERSION
+ skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
end
end
end
- def require_mongoid_query_cache
- before (:all) do
- if defined?(Mongo::QueryCache)
- skip "Mongoid uses the driver query cache in driver versions that support it"
+ def max_rails_version(version)
+ unless version =~ /^\d+\.\d+$/
+ raise ArgumentError, "Version can only be major.minor: #{version}"
+ end
+
+ before do
+ if version < RAILS_VERSION
+ skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
end
end
end
- def min_rails_version(version)
- unless version =~ /\A\d+\.\d+\z/
+ def min_server_version(version)
+ unless version =~ /^\d+\.\d+$/
raise ArgumentError, "Version can only be major.minor: #{version}"
end
- before(:all) do
- if version > RAILS_VERSION
- skip "Rails version #{version} or higher required, we have #{RAILS_VERSION}"
+ before do
+ if version > ClusterConfig.instance.server_version
+ skip "Server version #{version} or higher required, we have #{ClusterConfig.instance.server_version}"
end
end
end
- def max_rails_version(version)
- unless version =~ /\A\d+\.\d+\z/
+ def max_server_version(version)
+ unless version =~ /^\d+\.\d+$/
raise ArgumentError, "Version can only be major.minor: #{version}"
end
+ before do
+ if version < ClusterConfig.instance.short_server_version
+ skip "Server version #{version} or lower required, we have #{ClusterConfig.instance.server_version}"
+ end
+ end
+ end
+
+ def require_topology(*topologies)
+ invalid_topologies = topologies - [:single, :replica_set, :sharded]
+ unless invalid_topologies.empty?
+ raise ArgumentError, "Invalid topologies requested: #{invalid_topologies.join(', ')}"
+ end
before(:all) do
- if version < RAILS_VERSION
- skip "Rails version #{version} or lower required, we have #{RAILS_VERSION}"
+ unless topologies.include?(topology = ClusterConfig.instance.topology)
+ skip "Topology #{topologies.join(' or ')} required, we have #{topology}"
+ end
+ end
+ end
+
+ def max_example_run_time(timeout)
+ around do |example|
+ TimeoutInterrupt.timeout(timeout, TimeoutInterrupt::Error.new("Test execution terminated after #{timeout} seconds")) do
+ example.run
+ end
+ end
+ end
+
+ def require_transaction_support
+ min_server_fcv '4.0'
+ require_topology :replica_set
+ end
+
+ def require_tls
+ before(:all) do
+ unless SpecConfig.instance.ssl?
+ skip "SSL not enabled"
+ end
+ end
+ end
+
+ def require_no_tls
+ before(:all) do
+ if SpecConfig.instance.ssl?
+ skip "SSL enabled"
+ end
+ end
+ end
+
+ def require_local_tls
+ require_tls
+ end
+
+ def require_no_retry_writes
+ before(:all) do
+ if SpecConfig.instance.retry_writes?
+ skip "Retry writes is enabled"
+ end
+ end
+ end
+
+ def require_compression
+ before(:all) do
+ if SpecConfig.instance.compressors.nil?
+ skip "Compression is not enabled"
+ end
+ end
+ end
+
+ def require_no_compression
+ before(:all) do
+ if SpecConfig.instance.compressors
+ skip "Compression is enabled"
+ end
+ end
+ end
+
+ def ruby_version_gte(version)
+ before(:all) do
+ if RUBY_VERSION < version
+ skip "Ruby version #{version} or higher required"
+ end
+ end
+ end
+
+ def ruby_version_lt(version)
+ before(:all) do
+ if RUBY_VERSION >= version
+ skip "Ruby version less than #{version} required"
+ end
+ end
+ end
+
+ def require_auth
+ before(:all) do
+ unless ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
+ skip "Auth required"
+ end
+ end
+ end
+
+ def require_no_auth
+ before(:all) do
+ if ENV['AUTH'] == 'auth' || SpecConfig.instance.user || ClusterConfig.instance.auth_enabled?
+ skip "Auth not allowed"
+ end
+ end
+ end
+
+ def require_no_x509_auth
+ before(:all) do
+ if SpecConfig.instance.x509_auth?
+ skip "X.509 auth not allowed"
+ end
+ end
+ end
+
+ # Can the driver specify a write concern that won't be overridden?
+ # (mongos 4.0+ overrides the write concern)
+ def require_set_write_concern
+ before(:all) do
+ if ClusterConfig.instance.topology == :sharded && ClusterConfig.instance.short_server_version >= '4.0'
+ skip "mongos 4.0+ overrides write concern"
+ end
+ end
+ end
+
+ def require_multi_shard
+ before(:all) do
+ if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length == 1
+ skip 'Test requires a minimum of two shards if run in sharded topology'
+ end
+ end
+ end
+
+ def require_no_multi_shard
+ before(:all) do
+ if ClusterConfig.instance.topology == :sharded && SpecConfig.instance.addresses.length > 1
+ skip 'Test requires a single shard if run in sharded topology'
+ end
+ end
+ end
+
+ def require_wired_tiger
+ before(:all) do
+ if ClusterConfig.instance.storage_engine != :wired_tiger
+ skip 'Test requires WiredTiger storage engine'
+ end
+ end
+ end
+
+ def require_wired_tiger_on_36
+ before(:all) do
+ if ClusterConfig.instance.short_server_version >= '3.6'
+ if ClusterConfig.instance.storage_engine != :wired_tiger
+ skip 'Test requires WiredTiger storage engine on 3.6+ servers'
+ end
+ end
+ end
+ end
+
+ def require_mmapv1
+ before(:all) do
+ if ClusterConfig.instance.storage_engine != :mmapv1
+ skip 'Test requires MMAPv1 storage engine'
+ end
+ end
+ end
+
+ def require_enterprise
+ before(:all) do
+ unless ClusterConfig.instance.enterprise?
+ skip 'Test requires enterprise build of MongoDB'
+ end
+ end
+ end
+
+ # Integration tests for SRV polling require internet connectivity to
+ # look up SRV records and a sharded cluster configured on default port on
+ # localhost (localhost:27017, localhost:27018).
+ def require_default_port_deployment
+ # Because the DNS records at test1.test.build.10gen.cc point to
+ # localhost:27017 & localhost:27018, the test suite must have been
+ # configured to use these addresses
+ before(:all) do
+ have_default_port = SpecConfig.instance.addresses.any? do |address|
+ %w(127.0.0.1 127.0.0.1:27017 localhost localhost:27017).include?(address)
+ end
+ unless have_default_port
+ skip 'This test requires the test suite to be configured for localhost:27017'
end
end
end
end