(self)
| 77 | |
| 78 | def create_mongos_read_mode_test(mode, operation): |
| 79 | def test(self): |
| 80 | server = MockupDB() |
| 81 | self.addCleanup(server.stop) |
| 82 | server.run() |
| 83 | server.autoresponds( |
| 84 | "ismaster", |
| 85 | ismaster=True, |
| 86 | msg="isdbgrid", |
| 87 | minWireVersion=2, |
| 88 | maxWireVersion=MIN_SUPPORTED_WIRE_VERSION, |
| 89 | ) |
| 90 | |
| 91 | pref = make_read_preference(read_pref_mode_from_name(mode), tag_sets=None) |
| 92 | |
| 93 | client = MongoClient(server.uri, read_preference=pref) |
| 94 | self.addCleanup(client.close) |
| 95 | |
| 96 | with going(operation.function, client): |
| 97 | request = server.receive() |
| 98 | request.reply(operation.reply) |
| 99 | |
| 100 | if operation.op_type == "always-use-secondary": |
| 101 | self.assertEqual(ReadPreference.SECONDARY.document, request.doc.get("$readPreference")) |
| 102 | slave_ok = mode != "primary" |
| 103 | elif operation.op_type == "must-use-primary": |
| 104 | slave_ok = False |
| 105 | elif operation.op_type == "may-use-secondary": |
| 106 | slave_ok = mode != "primary" |
| 107 | actual_pref = request.doc.get("$readPreference") |
| 108 | if mode == "primary": |
| 109 | self.assertIsNone(actual_pref) |
| 110 | else: |
| 111 | self.assertEqual(pref.document, actual_pref) |
| 112 | else: |
| 113 | self.fail("unrecognized op_type %r" % operation.op_type) |
| 114 | |
| 115 | if slave_ok: |
| 116 | self.assertTrue(request.slave_ok, "SlaveOkay not set") |
| 117 | else: |
| 118 | self.assertFalse(request.slave_ok, "SlaveOkay set") |
| 119 | |
| 120 | return test |
| 121 |
nothing calls this directly
no test coverage detected