Skip to content

Commit 9290075

Browse files
authored
GODRIVER-1871 Add time-series collection support (#675)
1 parent 71d3018 commit 9290075

File tree

8 files changed

+534
-1
lines changed

8 files changed

+534
-1
lines changed

data/collection-management/README.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
===========================
2+
Collection Management Tests
3+
===========================
4+
5+
This directory contains tests for collection management. They are implemented
6+
in the `Unified Test Format <../../unified-test-format/unified-test-format.rst>`__
7+
and require schema version 1.0.
8+
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
{
2+
"description": "timeseries-collection",
3+
"schemaVersion": "1.0",
4+
"runOnRequirements": [
5+
{
6+
"minServerVersion": "5.0"
7+
}
8+
],
9+
"createEntities": [
10+
{
11+
"client": {
12+
"id": "client0",
13+
"observeEvents": [
14+
"commandStartedEvent"
15+
]
16+
}
17+
},
18+
{
19+
"database": {
20+
"id": "database0",
21+
"client": "client0",
22+
"databaseName": "ts-tests"
23+
}
24+
},
25+
{
26+
"collection": {
27+
"id": "collection0",
28+
"database": "database0",
29+
"collectionName": "test"
30+
}
31+
}
32+
],
33+
"initialData": [
34+
{
35+
"collectionName": "test",
36+
"databaseName": "ts-tests",
37+
"documents": []
38+
}
39+
],
40+
"tests": [
41+
{
42+
"description": "createCollection with all options",
43+
"operations": [
44+
{
45+
"name": "dropCollection",
46+
"object": "database0",
47+
"arguments": {
48+
"collection": "test"
49+
}
50+
},
51+
{
52+
"name": "createCollection",
53+
"object": "database0",
54+
"arguments": {
55+
"collection": "test",
56+
"expireAfterSeconds": 604800,
57+
"timeseries": {
58+
"timeField": "time",
59+
"metaField": "meta",
60+
"granularity": "minutes"
61+
}
62+
}
63+
},
64+
{
65+
"name": "assertCollectionExists",
66+
"object": "testRunner",
67+
"arguments": {
68+
"databaseName": "ts-tests",
69+
"collectionName": "test"
70+
}
71+
}
72+
],
73+
"expectEvents": [
74+
{
75+
"client": "client0",
76+
"events": [
77+
{
78+
"commandStartedEvent": {
79+
"command": {
80+
"drop": "test"
81+
},
82+
"databaseName": "ts-tests"
83+
}
84+
},
85+
{
86+
"commandStartedEvent": {
87+
"command": {
88+
"create": "test",
89+
"expireAfterSeconds": 604800,
90+
"timeseries": {
91+
"timeField": "time",
92+
"metaField": "meta",
93+
"granularity": "minutes"
94+
}
95+
},
96+
"databaseName": "ts-tests"
97+
}
98+
}
99+
]
100+
}
101+
]
102+
},
103+
{
104+
"description": "insertMany with duplicate ids",
105+
"operations": [
106+
{
107+
"name": "dropCollection",
108+
"object": "database0",
109+
"arguments": {
110+
"collection": "test"
111+
}
112+
},
113+
{
114+
"name": "createCollection",
115+
"object": "database0",
116+
"arguments": {
117+
"collection": "test",
118+
"expireAfterSeconds": 604800,
119+
"timeseries": {
120+
"timeField": "time",
121+
"metaField": "meta",
122+
"granularity": "minutes"
123+
}
124+
}
125+
},
126+
{
127+
"name": "assertCollectionExists",
128+
"object": "testRunner",
129+
"arguments": {
130+
"databaseName": "ts-tests",
131+
"collectionName": "test"
132+
}
133+
},
134+
{
135+
"name": "insertMany",
136+
"object": "collection0",
137+
"arguments": {
138+
"documents": [
139+
{
140+
"_id": 1,
141+
"time": {
142+
"$date": {
143+
"$numberLong": "1552949630482"
144+
}
145+
}
146+
},
147+
{
148+
"_id": 1,
149+
"time": {
150+
"$date": {
151+
"$numberLong": "1552949630483"
152+
}
153+
}
154+
}
155+
]
156+
}
157+
},
158+
{
159+
"name": "find",
160+
"object": "collection0",
161+
"arguments": {
162+
"filter": {},
163+
"sort": {
164+
"time": 1
165+
}
166+
},
167+
"expectResult": [
168+
{
169+
"_id": 1,
170+
"time": {
171+
"$date": {
172+
"$numberLong": "1552949630482"
173+
}
174+
}
175+
},
176+
{
177+
"_id": 1,
178+
"time": {
179+
"$date": {
180+
"$numberLong": "1552949630483"
181+
}
182+
}
183+
}
184+
]
185+
}
186+
],
187+
"expectEvents": [
188+
{
189+
"client": "client0",
190+
"events": [
191+
{
192+
"commandStartedEvent": {
193+
"command": {
194+
"drop": "test"
195+
},
196+
"databaseName": "ts-tests"
197+
}
198+
},
199+
{
200+
"commandStartedEvent": {
201+
"command": {
202+
"create": "test",
203+
"expireAfterSeconds": 604800,
204+
"timeseries": {
205+
"timeField": "time",
206+
"metaField": "meta",
207+
"granularity": "minutes"
208+
}
209+
},
210+
"databaseName": "ts-tests"
211+
}
212+
},
213+
{
214+
"commandStartedEvent": {
215+
"command": {
216+
"insert": "test",
217+
"documents": [
218+
{
219+
"_id": 1,
220+
"time": {
221+
"$date": {
222+
"$numberLong": "1552949630482"
223+
}
224+
}
225+
},
226+
{
227+
"_id": 1,
228+
"time": {
229+
"$date": {
230+
"$numberLong": "1552949630483"
231+
}
232+
}
233+
}
234+
]
235+
}
236+
}
237+
},
238+
{
239+
"commandStartedEvent": {
240+
"command": {
241+
"find": "test",
242+
"filter": {},
243+
"sort": {
244+
"time": 1
245+
}
246+
},
247+
"databaseName": "ts-tests"
248+
}
249+
}
250+
]
251+
}
252+
]
253+
}
254+
]
255+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
description: "timeseries-collection"
2+
3+
schemaVersion: "1.0"
4+
5+
runOnRequirements:
6+
- minServerVersion: "5.0"
7+
8+
createEntities:
9+
- client:
10+
id: &client0 client0
11+
observeEvents: [ commandStartedEvent ]
12+
- database:
13+
id: &database0 database0
14+
client: *client0
15+
databaseName: &database0Name ts-tests
16+
- collection:
17+
id: &collection0 collection0
18+
database: *database0
19+
collectionName: &collection0Name test
20+
21+
initialData:
22+
- collectionName: *collection0Name
23+
databaseName: *database0Name
24+
documents: []
25+
26+
tests:
27+
- description: "createCollection with all options"
28+
operations:
29+
- name: dropCollection
30+
object: *database0
31+
arguments:
32+
collection: *collection0Name
33+
- name: createCollection
34+
object: *database0
35+
arguments:
36+
collection: *collection0Name
37+
# expireAfterSeconds should be an int64 (as it is stored on the server).
38+
expireAfterSeconds: 604800
39+
timeseries: &timeseries0
40+
timeField: "time"
41+
metaField: "meta"
42+
granularity: "minutes"
43+
- name: assertCollectionExists
44+
object: testRunner
45+
arguments:
46+
databaseName: *database0Name
47+
collectionName: *collection0Name
48+
expectEvents:
49+
- client: *client0
50+
events:
51+
- commandStartedEvent:
52+
command:
53+
drop: *collection0Name
54+
databaseName: *database0Name
55+
- commandStartedEvent:
56+
command:
57+
create: *collection0Name
58+
expireAfterSeconds: 604800
59+
timeseries: *timeseries0
60+
databaseName: *database0Name
61+
62+
# Unlike regular collections, time-series collections allow duplicate ids.
63+
- description: "insertMany with duplicate ids"
64+
operations:
65+
- name: dropCollection
66+
object: *database0
67+
arguments:
68+
collection: *collection0Name
69+
- name: createCollection
70+
object: *database0
71+
arguments:
72+
collection: *collection0Name
73+
# expireAfterSeconds should be an int64 (as it is stored on the server).
74+
expireAfterSeconds: 604800
75+
timeseries: *timeseries0
76+
- name: assertCollectionExists
77+
object: testRunner
78+
arguments:
79+
databaseName: *database0Name
80+
collectionName: *collection0Name
81+
- name: insertMany
82+
object: *collection0
83+
arguments:
84+
documents: &docs
85+
- {
86+
_id: 1,
87+
time: {
88+
$date: {
89+
$numberLong: "1552949630482"
90+
}
91+
}
92+
}
93+
- {
94+
_id: 1,
95+
time: {
96+
$date: {
97+
$numberLong: "1552949630483"
98+
}
99+
}
100+
}
101+
- name: find
102+
object: *collection0
103+
arguments:
104+
filter: {}
105+
sort: { time: 1 }
106+
expectResult: *docs
107+
expectEvents:
108+
- client: *client0
109+
events:
110+
- commandStartedEvent:
111+
command:
112+
drop: *collection0Name
113+
databaseName: *database0Name
114+
- commandStartedEvent:
115+
command:
116+
create: *collection0Name
117+
expireAfterSeconds: 604800
118+
timeseries: *timeseries0
119+
databaseName: *database0Name
120+
- commandStartedEvent:
121+
command:
122+
insert: *collection0Name
123+
documents: *docs
124+
- commandStartedEvent:
125+
command:
126+
find: *collection0Name
127+
filter: {}
128+
sort: { time: 1 }
129+
databaseName: *database0Name

0 commit comments

Comments
 (0)