Testing with Mongo Orchestration
Preview:
Citation preview
- 1. Testing with Mongo Orchestration
- 2. Ruby Engineer on the drivers team. Based in Berlin. Work on
the gems: bson mongo mongoid bson_ext mongo_kerberos @EmStolfo
- 3. MongoDB Drivers C C++ C# Java Node.js Perl PHP Python Ruby
Scala
- 4. MongoDB Drivers Interface to the server. 10 official drivers
available. Many started as OS projects. History
- 5. No specifications. Divergent codebases and features. MongoDB
Drivers Reality
- 6. Server interface was not consistent. MongoDB Drivers
Reality
- 7. Organizations can experience 1 interface. Specifications
guide design and provide documentation. Rewrites with collective
knowledge. MongoDB Drivers Revamp
- 8. Server interface is a single product. MongoDB Drivers
Revamp
- 9. Specifications Equally valuable to the drivers team as to
the community.
- 10. Server Discovery and Monitoring Spec Logic required to make
an application using MongoDB highly available.
- 11. How to validate compliance?
- 12. Test requirements Unit tests. Integration tests. Defined as
data. Language-agnostic. Reproducible scenarios. Mongo
Orchestration
- 13. Testing with Mongo Orchestration 1. Mongo Orchestration 2.
Driver integration tests 3. How you can use MO
- 14. Mongo Orchestration
- 15. Define clusters using JSON. Manipulate clusters via RESTful
API. Mongo Orchestration HTTP server providing REST interface to
manage multiple MongoDB processes on the same machine. Implemented
in python. Maintained by Luke Lovett (llvtt)
- 16. What about Automation!? Is intended for testing. Starts
processes on one machine. Allows fault injection. Does not have a
UI. Has no protection against downtime. Has one agent, so no
resiliency. Does not handle operation tasks. Mongo Orchestration..
!
- 17. Create different cluster topologies. Single Mongo
Orchestration Replica Set Sharded Cluster
- 18. Setup
- 19. Single server config options
- 20. Replica Set config options
- 21. Sharded Cluster config options
- 22. Define different installations in a config file mongo-
orchestration.config
- 23. Set up a Replica Set
- 24. Benefits of MO Reproducible test scenarios. Abstracts
differing configuration options across MongoDB versions. Uniform
interface regardless of OS. Ability to define different locations
of MongoDB installations for multi- version testing.
- 25. Multi-version testing Multi-topology testing SSL
Authentication Used internally Drivers integration tests
- 26. No need for cluster managers test/tools/mongo_config.rb
(cluster manager in 1.x ruby driver)
- 27. Jenkins testing
- 28. Mongo Connector testing tests/setup_cluster.py
- 29. Driver Integration tests
- 30. define Format - YAML Tests Scenarios Our approach: DIY
testing
- 31. benefits Format: YAML Describes data. Can translate to
actions. Most languages can use a YAML parsing library. Driver
authors write a reusable harness. Changes in the spec can be
communicated via additional YAML tests or changes to existing
ones.
- 32. Integration tests Test driver behavior. Input: cluster
state Output: driver behavior Mongo Orchestration
- 33. Test harness (in Ruby) PR #584 [WIP] Integration tests
using Mongo Orchestration
- 34. YAML integration
testrs/connection/primary-not-available.yml (I)
- 35. YAML integration
testrs/connection/primary-not-available.yml (II)
- 36. Harness structure 1. Resource (MO cluster) 2. Specification
(parsed YAML) 3. Test (can be run) PR #584 [WIP] Integration tests
using Mongo Orchestration
- 37. Resourcespec/support/mongo_orchestration/resourc e.rb
- 38. Specificationspec/support/mongo_orchestration/spe c.rb
- 39.
Testspec/support/mongo_orchestration/operation/client_operatio
n.rb
- 40. Restarted primary integration test
rs/connection/primary-restarted.yml (I)
- 41. Restarted primary integration test
rs/connection/primary-restarted.yml (II)
- 42. Restarted primary integration
testrs/connection/primary-restarted.yml (III)
- 43. How you can use Mongo Orchestration
- 44. Install
- 45. Define different installations in a config file mongo-
orchestration.config
- 46. start
- 47. setup/teardown in python Send requests
- 48. stop
- 49. General uses of MO Test your applications behavior during a
failover. Verify your application can reliably go into readonly
mode. Easily test your application with any configuration of
MongoDB.
- 50. Resources http://bit.ly/testing-mo @EmStolfo