File: hello-timeout.yml

package info (click to toggle)
golang-mongodb-mongo-driver 1.8.1%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 18,500 kB
  • sloc: perl: 533; ansic: 491; python: 432; makefile: 187; sh: 72
file content (223 lines) | stat: -rw-r--r-- 6,517 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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
# Test SDAM error handling.
runOn:
    # failCommand appName requirements
    - minServerVersion: "4.4"

database_name: &database_name "sdam-tests"
collection_name: &collection_name "hello-timeout"

data: []

tests:
  - description: Network timeout on Monitor handshake
    # Configure the initial handshake to fail with a timeout.
    # Use times: 2 so that the RTT hello is blocked as well.
    failPoint:
      configureFailPoint: failCommand
      mode: { times: 2 }
      data:
          failCommands: ["hello", "isMaster"]
          appName: timeoutMonitorHandshakeTest
          blockConnection: true
          blockTimeMS: 1000
    clientOptions:
      retryWrites: false
      connectTimeoutMS: 250
      heartbeatFrequencyMS: 500
      appname: timeoutMonitorHandshakeTest
    operations:
      # The network error on the initial handshake should mark the server
      # Unknown (emitting a ServerDescriptionChangedEvent) and clear the pool.
      - name: waitForEvent
        object: testRunner
        arguments:
          event: ServerMarkedUnknownEvent
          count: 1
      # Perform an operation to ensure the node is discovered.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 1
            - _id: 2
      # We cannot assert the server was marked Unknown and pool was cleared an
      # exact number of times because the RTT hello may or may not have
      # triggered this failpoint as well.
      # - name: assertEventCount
      #   object: testRunner
      #   arguments:
      #     event: ServerMarkedUnknownEvent
      #     count: 1
      # - name: assertEventCount
      #   object: testRunner
      #   arguments:
      #     event: PoolClearedEvent
      #     count: 1

    expectations:
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 1
              - _id: 2
          command_name: insert
          database_name: *database_name

    outcome:
      collection:
        data:
          - {_id: 1}
          - {_id: 2}

  - description: Network timeout on Monitor check
    clientOptions:
      retryWrites: false
      connectTimeoutMS: 750
      heartbeatFrequencyMS: 500
      appname: timeoutMonitorCheckTest
    operations:
      # Perform an operation to ensure the node is discovered.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 1
            - _id: 2
      # Configure the next streaming hello check to fail with a timeout
      # Use times: 2 so that the RTT hello is blocked as well.
      - name: configureFailPoint
        object: testRunner
        arguments:
          failPoint:
            configureFailPoint: failCommand
            mode: { times: 2 }
            data:
                failCommands: ["hello", "isMaster"]
                appName: timeoutMonitorCheckTest
                blockConnection: true
                # blockTimeMS is evaluated after the waiting for heartbeatFrequencyMS server-side, so this value only
                # needs to be greater than connectTimeoutMS. The driver will wait for (500+750)ms and the server will
                # respond after (500+1000)ms.
                blockTimeMS: 1000
      # The network error on the next check should mark the server Unknown and
      # clear the pool.
      - name: waitForEvent
        object: testRunner
        arguments:
          event: ServerMarkedUnknownEvent
          count: 1
      - name: waitForEvent
        object: testRunner
        arguments:
          event: PoolClearedEvent
          count: 1
      # Perform an operation to ensure the node is rediscovered.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 3
            - _id: 4
      # Assert the server was marked Unknown and pool was cleared exactly once.
      - name: assertEventCount
        object: testRunner
        arguments:
          event: ServerMarkedUnknownEvent
          count: 1
      - name: assertEventCount
        object: testRunner
        arguments:
          event: PoolClearedEvent
          count: 1

    expectations:
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 1
              - _id: 2
          command_name: insert
          database_name: *database_name
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 3
              - _id: 4
          command_name: insert
          database_name: *database_name

    outcome:
      collection:
        data:
          - {_id: 1}
          - {_id: 2}
          - {_id: 3}
          - {_id: 4}

  - description: Driver extends timeout while streaming
    clientOptions:
      retryWrites: false
      connectTimeoutMS: 250
      heartbeatFrequencyMS: 500
      appname: extendsTimeoutTest
    operations:
      # Perform an operation to ensure the node is discovered.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 1
            - _id: 2
      # Wait for multiple monitor checks to complete.
      - name: wait
        object: testRunner
        arguments:
          ms: 2000
      # Perform an operation to ensure the node is still selectable.
      - name: insertMany
        object: collection
        arguments:
          documents:
            - _id: 3
            - _id: 4
      # Assert that the server was never marked Unknown and the pool was never
      # cleared.
      - name: assertEventCount
        object: testRunner
        arguments:
          event: ServerMarkedUnknownEvent
          count: 0
      - name: assertEventCount
        object: testRunner
        arguments:
          event: PoolClearedEvent
          count: 0

    expectations:
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 1
              - _id: 2
          command_name: insert
          database_name: *database_name
      - command_started_event:
          command:
            insert: *collection_name
            documents:
              - _id: 3
              - _id: 4
          command_name: insert
          database_name: *database_name

    outcome:
      collection:
        data:
          - {_id: 1}
          - {_id: 2}
          - {_id: 3}
          - {_id: 4}