description: "Primary with newer topologyVersion"

uri: "mongodb://a/?replicaSet=rs"

phases: [

    # Primary A is discovered
    {
        responses: [
            ["a:27017", {
                ok: 1,
                helloOk: true,
                isWritablePrimary: true,
                hosts: ["a:27017"],
                setName: "rs",
                minWireVersion: 0,
                maxWireVersion: 9,
                topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}}
            }]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "RSPrimary",
                    setName: "rs",
                    topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "1"}}
                }
            },
            topologyType: "ReplicaSetWithPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    },

    # A responds with a greater topologyVersion counter, we should process the response.
    {
        responses: [
            ["a:27017", {
                ok: 1,
                helloOk: true,
                isWritablePrimary: true,
                hosts: ["a:27017", "b:27017"],
                setName: "rs",
                minWireVersion: 0,
                maxWireVersion: 9,
                topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "2"}}
            }]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "RSPrimary",
                    setName: "rs",
                    topologyVersion: {'processId': {"$oid": "000000000000000000000001"}, "counter": {"$numberLong": "2"}}
                },
                "b:27017": {

                    type: "Unknown",
                    topologyVersion: null
                }
            },
            topologyType: "ReplicaSetWithPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    },

    # A responds with a different topologyVersion processId, we should process the response.
    {
        responses: [
            ["a:27017", {
                ok: 1,
                helloOk: true,
                isWritablePrimary: true,
                hosts: ["a:27017", "c:27017"],
                setName: "rs",
                minWireVersion: 0,
                maxWireVersion: 9,
                topologyVersion: {'processId': {"$oid": "000000000000000000000002"}, "counter": {"$numberLong": "0"}}
            }]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "RSPrimary",
                    setName: "rs",
                    topologyVersion: {'processId': {"$oid": "000000000000000000000002"}, "counter": {"$numberLong": "0"}}
                },
                "c:27017": {

                    type: "Unknown",
                    topologyVersion: null
                }
            },
            topologyType: "ReplicaSetWithPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    },

    # A responds without a topologyVersion, we should process the response.
    {
        responses: [
            ["a:27017", {
                ok: 1,
                helloOk: true,
                isWritablePrimary: true,
                hosts: ["a:27017", "d:27017"],
                setName: "rs",
                minWireVersion: 0,
                maxWireVersion: 9
            }]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "RSPrimary",
                    setName: "rs",
                    topologyVersion: null
                },
                "d:27017": {

                    type: "Unknown",
                    topologyVersion: null
                }
            },
            topologyType: "ReplicaSetWithPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    },

    # A responds with a topologyVersion again, we should process the response.
    {
        responses: [
            ["a:27017", {
                ok: 1,
                helloOk: true,
                isWritablePrimary: true,
                hosts: ["a:27017", "e:27017"],
                setName: "rs",
                minWireVersion: 0,
                maxWireVersion: 9,
                topologyVersion: {'processId': {"$oid": "000000000000000000000003"}, "counter": {"$numberLong": "0"}}
            }]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "RSPrimary",
                    setName: "rs",
                    topologyVersion: {'processId': {"$oid": "000000000000000000000003"}, "counter": {"$numberLong": "0"}}
                },
                "e:27017": {

                    type: "Unknown",
                    topologyVersion: null
                }
            },
            topologyType: "ReplicaSetWithPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    },

    # A responds with a network error, we should process the response.
    {
        responses: [
            ["a:27017", {}]
        ],

        outcome: {
            servers: {
                "a:27017": {
                    type: "Unknown",
                    topologyVersion: null
                },
                "e:27017": {

                    type: "Unknown",
                    topologyVersion: null
                }
            },
            topologyType: "ReplicaSetNoPrimary",
            logicalSessionTimeoutMinutes: null,
            setName: "rs",
        }
    }
]
