spec/runners/crud/test_base.rb in mongo-2.12.4 vs spec/runners/crud/test_base.rb in mongo-2.13.0.beta1
- old
+ new
@@ -1,11 +1,39 @@
module Mongo
module CRUD
class CRUDTestBase
+ # The test description.
+ #
+ # @return [ String ] description The test description.
+ attr_reader :description
+
+ # The expected command monitoring events.
+ attr_reader :expectations
+
+ def setup_fail_point(client)
+ if @fail_point_command
+ client.use(:admin).command(@fail_point_command)
+ end
+ end
+
+ def clear_fail_point(client)
+ if @fail_point_command
+ client.use(:admin).command(BSON::Document.new(@fail_point_command).merge(mode: "off"))
+ end
+ end
+
+ private
+
def resolve_target(client, operation)
+ if operation.database_options
+ # Some CRUD spec tests specify "database options". In Ruby there is
+ # no facility to specify options on a database, hence these are
+ # lifted to the client.
+ client = client.with(operation.database_options)
+ end
case operation.object
when 'collection'
client[@spec.collection_name].with(operation.collection_options)
when 'database'
client.database
@@ -13,9 +41,28 @@
client
when 'gridfsbucket'
client.database.fs
else
raise "Unknown target #{operation.object}"
+ end
+ end
+
+ # If the deployment is a sharded cluster, creates a direct client
+ # to each of the mongos nodes and yields each in turn to the
+ # provided block. Does nothing in other topologies.
+ def mongos_each_direct_client
+ if ClusterConfig.instance.topology == :sharded
+ client = ClientRegistry.instance.global_client('basic')
+ client.cluster.next_primary
+ client.cluster.servers.each do |server|
+ direct_client = ClientRegistry.instance.new_local_client(
+ [server.address.to_s],
+ SpecConfig.instance.test_options.merge(
+ connect: :sharded
+ ).merge(SpecConfig.instance.auth_options))
+ yield direct_client
+ direct_client.close
+ end
end
end
end
end
end