File: aggregate-write-readPreference.yml

package info (click to toggle)
golang-mongodb-mongo-driver 1.8.4%2Bds1-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bookworm-backports
  • size: 18,520 kB
  • sloc: perl: 533; ansic: 491; python: 432; makefile: 187; sh: 72
file content (155 lines) | stat: -rw-r--r-- 5,001 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
description: aggregate-write-readPreference

schemaVersion: '1.4'

runOnRequirements:
  # 3.6+ non-standalone is needed to utilize $readPreference in OP_MSG
  - minServerVersion: "3.6"
    topologies: [ replicaset, sharded, load-balanced ]

_yamlAnchors:
  readConcern: &readConcern
    level: &readConcernLevel "local"
  writeConcern: &writeConcern
    w: &writeConcernW 1

createEntities:
  - client:
      id: &client0 client0
      observeEvents:
        - commandStartedEvent
      # Used to test that read and write concerns are still inherited
      uriOptions:
        readConcernLevel: *readConcernLevel
        w: *writeConcernW
  - database:
      id: &database0 database0
      client: *client0
      databaseName: &database0Name db0
  - collection:
      id: &collection0 collection0
      database: *database0
      collectionName: &collection0Name coll0
      collectionOptions:
        readPreference: &readPreference
          # secondaryPreferred is specified for compatibility with clusters that
          # may not have a secondary (e.g. each shard is only a primary).
          mode: secondaryPreferred
          # maxStalenessSeconds is specified to ensure that drivers forward the
          # read preference to mongos or a load balancer. That would not be the
          # case with only secondaryPreferred.
          maxStalenessSeconds: 600
  - collection:
      id: &collection1 collection1
      database: *database0
      collectionName: &collection1Name coll1

initialData:
  - collectionName: *collection0Name
    databaseName: *database0Name
    documents:
      - { _id: 1, x: 11 }
      - { _id: 2, x: 22 }
      - { _id: 3, x: 33 }
  - collectionName: *collection1Name
    databaseName: *database0Name
    documents: []

tests:
  - description: "Aggregate with $out includes read preference for 5.0+ server"
    runOnRequirements:
      - minServerVersion: "5.0"
        serverless: "forbid"
    operations:
      - object: *collection0
        name: aggregate
        arguments:
          pipeline: &outPipeline
            - { $match: { _id: { $gt: 1 } } }
            - { $sort: { x: 1 } }
            - { $out: *collection1Name }
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *outPipeline
                $readPreference: *readPreference
                readConcern: *readConcern
                writeConcern: *writeConcern
    outcome: &outcome
      - collectionName: *collection1Name
        databaseName: *database0Name
        documents:
          - { _id: 2, x: 22 }
          - { _id: 3, x: 33 }

  - description: "Aggregate with $out omits read preference for pre-5.0 server"
    runOnRequirements:
        # MongoDB 4.2 introduced support for read concerns and write stages.
        # Pre-4.2 servers may allow a "local" read concern anyway, but some
        # drivers may avoid inheriting a client-level read concern for pre-4.2.
      - minServerVersion: "4.2"
        maxServerVersion: "4.4.99"
        serverless: "forbid"
    operations:
      - object: *collection0
        name: aggregate
        arguments:
          pipeline: *outPipeline
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *outPipeline
                $readPreference: { $$exists: false }
                readConcern: *readConcern
                writeConcern: *writeConcern
    outcome: *outcome

  - description: "Aggregate with $merge includes read preference for 5.0+ server"
    runOnRequirements:
      - minServerVersion: "5.0"
    operations:
      - object: *collection0
        name: aggregate
        arguments:
          pipeline: &mergePipeline
            - { $match: { _id: { $gt: 1 } } }
            - { $sort: { x: 1 } }
            - { $merge: { into: *collection1Name } }
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *mergePipeline
                $readPreference: *readPreference
                readConcern: *readConcern
                writeConcern: *writeConcern
    outcome: *outcome

  - description: "Aggregate with $merge omits read preference for pre-5.0 server"
    runOnRequirements:
      - minServerVersion: "4.2"
        maxServerVersion: "4.4.99"
    operations:
      - object: *collection0
        name: aggregate
        arguments:
          pipeline: *mergePipeline
    expectEvents:
      - client: *client0
        events:
          - commandStartedEvent:
              command:
                aggregate: *collection0Name
                pipeline: *mergePipeline
                $readPreference: { $$exists: false }
                readConcern: *readConcern
                writeConcern: *writeConcern
    outcome: *outcome