Skip to content

Commit 734b5c0

Browse files
benjirewiskevinAlbs
authored andcommitted
CDRIVER-3917 Run versioned API tests in Evergreen (#773)
1 parent 2ce8420 commit 734b5c0

File tree

8 files changed

+176
-28
lines changed

8 files changed

+176
-28
lines changed

.evergreen/config.yml

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,7 @@ functions:
416416
export SSL=${SSL}
417417
export ORCHESTRATION_FILE=${ORCHESTRATION_FILE}
418418
export OCSP=${OCSP}
419+
export REQUIRE_API_VERSION=${REQUIRE_API_VERSION}
419420
sh .evergreen/integration-tests.sh
420421
run tests:
421422
- command: shell.exec
@@ -694,8 +695,13 @@ functions:
694695
working_dir: mongoc
695696
background: true
696697
shell: bash
697-
script: "set -o errexit\nset -o xtrace\nset -o xtrace\ncd drivers-evergreen-tools\
698-
\ \nexport DRIVERS_TOOLS=$(pwd)\nsh .evergreen/atlas_data_lake/run-mongohouse-local.sh"
698+
script: |-
699+
set -o errexit
700+
set -o xtrace
701+
set -o xtrace
702+
cd drivers-evergreen-tools
703+
export DRIVERS_TOOLS=$(pwd)
704+
sh .evergreen/atlas_data_lake/run-mongohouse-local.sh
699705
test mongohouse:
700706
- command: shell.exec
701707
type: test
@@ -716,6 +722,29 @@ functions:
716722
export RUN_MONGOHOUSE_TESTS=true
717723
./src/libmongoc/test-libmongoc --no-fork -l /mongohouse/* -d
718724
unset RUN_MONGOHOUSE_TESTS
725+
test versioned api:
726+
- command: shell.exec
727+
type: test
728+
params:
729+
working_dir: mongoc
730+
shell: bash
731+
script: |-
732+
set -o errexit
733+
set -o xtrace
734+
export COMPRESSORS='${COMPRESSORS}'
735+
export CC='${CC}'
736+
export AUTH=${AUTH}
737+
export SSL=${SSL}
738+
export URI=${URI}
739+
export IPV4_ONLY=${IPV4_ONLY}
740+
export VALGRIND=${VALGRIND}
741+
export MONGOC_TEST_URI=${URI}
742+
export DNS=${DNS}
743+
export ASAN=${ASAN}
744+
export MONGODB_API_VERSION=1
745+
# TODO: CDRIVER-3954 Run all integration tests
746+
./src/libmongoc/test-libmongoc --no-fork -l /versioned_api/* -d
747+
unset MONGODB_API_VERSION
719748
run aws tests:
720749
- command: shell.exec
721750
type: test
@@ -17473,6 +17502,52 @@ tasks:
1747317502
- func: run auth tests
1747417503
vars:
1747517504
valgrind: 'true'
17505+
- name: test-versioned-api
17506+
tags:
17507+
- versioned-api
17508+
depends_on:
17509+
name: debug-compile-nosasl-openssl
17510+
commands:
17511+
- func: fetch build
17512+
vars:
17513+
BUILD_NAME: debug-compile-nosasl-openssl
17514+
- func: fetch build
17515+
vars:
17516+
BUILD_NAME: debug-compile-nosasl-openssl
17517+
- func: bootstrap mongo-orchestration
17518+
vars:
17519+
AUTH: auth
17520+
REQUIRE_API_VERSION: 'true'
17521+
SSL: ssl
17522+
TOPOLOGY: server
17523+
VERSION: latest
17524+
- func: test versioned api
17525+
vars:
17526+
AUTH: auth
17527+
SSL: ssl
17528+
- name: test-versioned-api-accept-version-two
17529+
tags:
17530+
- versioned-api
17531+
depends_on:
17532+
name: debug-compile-nosasl-openssl
17533+
commands:
17534+
- func: fetch build
17535+
vars:
17536+
BUILD_NAME: debug-compile-nosasl-openssl
17537+
- func: fetch build
17538+
vars:
17539+
BUILD_NAME: debug-compile-nosasl-openssl
17540+
- func: bootstrap mongo-orchestration
17541+
vars:
17542+
AUTH: auth
17543+
ORCHESTRATION_FILE: versioned-api-testing
17544+
SSL: ssl
17545+
TOPOLOGY: server
17546+
VERSION: latest
17547+
- func: test versioned api
17548+
vars:
17549+
AUTH: auth
17550+
SSL: ssl
1747617551
- name: build-and-run-authentication-tests-openssl-0.9.8
1747717552
commands:
1747817553
- func: install ssl
@@ -23162,3 +23237,9 @@ buildvariants:
2316223237
tasks:
2316323238
- .tsan
2316423239
batchtime: 1440
23240+
- name: versioned-api
23241+
display_name: Versioned API Tests
23242+
run_on: ubuntu1804-test
23243+
tasks:
23244+
- debug-compile-nosasl-openssl
23245+
- .versioned-api

.evergreen/integration-tests.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
# ORCHESTRATION_FILE: <file name in orchestration_configs/ without .json>
1313
# If this is not set, the file name is constructed from other options.
1414
# OCSP: off, on
15+
# REQUIRE_API_VERSION: set to a non-empty string to set the requireApiVersion parameter
16+
# This is currently only supported for standalone servers
1517
#
1618
# This script may be run locally.
1719
#
@@ -39,6 +41,7 @@ AUTH=${AUTH:-noauth}
3941
SSL=${SSL:-nossl}
4042
TOPOLOGY=${TOPOLOGY:-server}
4143
OCSP=${OCSP:-off}
44+
REQUIRE_API_VERSION=${REQUIRE_API_VERSION}
4245

4346
# If caller of script specifies an ORCHESTRATION_FILE, do not attempt to modify it. Otherwise construct it.
4447
if [ -z "$ORCHESTRATION_FILE" ]; then
@@ -166,3 +169,8 @@ echo $MONGO_SHELL_CONNECTION_FLAGS
166169

167170
`pwd`/mongodb/bin/mongo $MONGO_SHELL_CONNECTION_FLAGS --eval 'printjson(db.serverBuildInfo())' admin
168171
`pwd`/mongodb/bin/mongo $MONGO_SHELL_CONNECTION_FLAGS --eval 'printjson(db.isMaster())' admin
172+
173+
# Set the requireApiVersion parameter.
174+
if [ ! -z "$REQUIRE_API_VERSION" ]; then
175+
`pwd`/mongodb/bin/mongo $MONGO_SHELL_CONNECTION_FLAGS $DIR/require-api-version.js
176+
fi

.evergreen/require-api-version.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
db.adminCommand({ "setParameter": 1, "requireApiVersion": 1 });

build/evergreen_config_lib/functions.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@
7474
. bin/activate
7575
./bin/pip install sphinx
7676
cd ..
77-
77+
7878
set -o xtrace
7979
export MONGOC_TEST_FUTURE_TIMEOUT_MS=30000
8080
export MONGOC_TEST_SKIP_LIVE=on
@@ -98,13 +98,13 @@
9898
]))]),
9999
shell_exec(r'''
100100
mkdir mongoc
101-
101+
102102
if command -v gtar 2>/dev/null; then
103103
TAR=gtar
104104
else
105105
TAR=tar
106106
fi
107-
107+
108108
$TAR xf build.tar.gz -C mongoc/
109109
''', test=False, continue_on_err=True),
110110
)),
@@ -140,7 +140,7 @@
140140
make
141141
cd ..
142142
mv aha-repo/aha .
143-
143+
144144
sh .evergreen/man-pages-to-html.sh libbson cmake_build/src/libbson/doc/man > bson-man-pages.html
145145
sh .evergreen/man-pages-to-html.sh libmongoc cmake_build/src/libmongoc/doc/man > mongoc-man-pages.html
146146
''', test=False, silent=True, xtrace=False),
@@ -175,7 +175,7 @@
175175
export AWS_ACCESS_KEY_ID=${aws_key}
176176
export AWS_SECRET_ACCESS_KEY=${aws_secret}
177177
aws s3 cp abi-compliance/compat_reports s3://mciuploads/${project}/%s/abi-compliance/compat_reports --recursive --acl public-read --region us-east-1
178-
178+
179179
if [ -e ./abi-compliance/abi-error.txt ]; then
180180
exit 1
181181
else
@@ -279,6 +279,7 @@
279279
export SSL=${SSL}
280280
export ORCHESTRATION_FILE=${ORCHESTRATION_FILE}
281281
export OCSP=${OCSP}
282+
export REQUIRE_API_VERSION=${REQUIRE_API_VERSION}
282283
sh .evergreen/integration-tests.sh
283284
''', test=False),
284285
)),
@@ -475,7 +476,7 @@
475476
shell_mongoc(r'''
476477
set -o xtrace
477478
478-
cd drivers-evergreen-tools
479+
cd drivers-evergreen-tools
479480
export DRIVERS_TOOLS=$(pwd)
480481
481482
sh .evergreen/atlas_data_lake/run-mongohouse-local.sh
@@ -500,6 +501,25 @@
500501
501502
'''),
502503
)),
504+
('test versioned api', Function(
505+
shell_mongoc(r'''
506+
export COMPRESSORS='${COMPRESSORS}'
507+
export CC='${CC}'
508+
export AUTH=${AUTH}
509+
export SSL=${SSL}
510+
export URI=${URI}
511+
export IPV4_ONLY=${IPV4_ONLY}
512+
export VALGRIND=${VALGRIND}
513+
export MONGOC_TEST_URI=${URI}
514+
export DNS=${DNS}
515+
export ASAN=${ASAN}
516+
export MONGODB_API_VERSION=1
517+
# TODO: CDRIVER-3954 Run all integration tests
518+
./src/libmongoc/test-libmongoc --no-fork -l /versioned_api/* -d
519+
unset MONGODB_API_VERSION
520+
521+
'''),
522+
)),
503523
('run aws tests', Function(
504524
shell_mongoc(r'''
505525
# Add AWS variables to a file.

build/evergreen_config_lib/tasks.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -838,6 +838,20 @@ def __init__(self, *args, **kwargs):
838838
SSL=OPENSSL CFLAGS='-DBSON_MEMCHECK' sh .evergreen/compile.sh
839839
"""),
840840
func('run auth tests', valgrind='true')]),
841+
PostCompileTask(
842+
'test-versioned-api',
843+
tags=['versioned-api'],
844+
depends_on='debug-compile-nosasl-openssl',
845+
commands=[func('fetch build', BUILD_NAME='debug-compile-nosasl-openssl'),
846+
func('bootstrap mongo-orchestration', TOPOLOGY='server', AUTH='auth', SSL='ssl', VERSION='latest', REQUIRE_API_VERSION='true'),
847+
func('test versioned api', AUTH='auth', SSL='ssl')]),
848+
PostCompileTask(
849+
'test-versioned-api-accept-version-two',
850+
tags=['versioned-api'],
851+
depends_on='debug-compile-nosasl-openssl',
852+
commands=[func('fetch build', BUILD_NAME='debug-compile-nosasl-openssl'),
853+
func('bootstrap mongo-orchestration', TOPOLOGY='server', AUTH='auth', SSL='ssl', VERSION='latest', ORCHESTRATION_FILE='versioned-api-testing'),
854+
func('test versioned api', AUTH='auth', SSL='ssl')]),
841855
])
842856

843857

build/evergreen_config_lib/variants.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,4 +636,10 @@ def days(n):
636636
['.tsan'],
637637
{'CC': '/opt/mongodbtoolchain/v3/bin/clang'},
638638
batchtime=days(1))
639+
Variant('versioned-api',
640+
'Versioned API Tests',
641+
'ubuntu1804-test',
642+
['debug-compile-nosasl-openssl',
643+
'.versioned-api'],
644+
{})
639645
]
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"id": "versioned-api-testing",
3+
"name": "mongod",
4+
"procParams": {
5+
"ipv6": true,
6+
"bind_ip": "127.0.0.1,::1",
7+
"logappend": true,
8+
"journal": true,
9+
"port": 27017,
10+
"setParameter": {"enableTestCommands": 1, "acceptAPIVersion2": 1}
11+
}
12+
}

src/libmongoc/tests/test-libmongoc.c

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2094,17 +2094,18 @@ _parse_server_version (const bson_t *buildinfo)
20942094
ASSERT (bson_iter_recurse (&iter, &array_iter));
20952095

20962096
/* Server returns a 4-part version like [3, 2, 0, 0], or like [3, 2, 0, -49]
2097-
* for an RC. Bail if number of parts is ever not 4. */
2097+
* for an RC. Ignore the 4th part since RCs are equivalent to non-RCs for
2098+
* testing purposes. */
20982099
i = 0;
20992100
while (bson_iter_next (&array_iter)) {
2101+
if (++i == N_SERVER_VERSION_PARTS) {
2102+
break;
2103+
}
21002104
ret *= 1000;
21012105
ret += 100 + bson_iter_as_int64 (&array_iter);
2102-
i++;
2103-
ASSERT_CMPINT (i, <=, N_SERVER_VERSION_PARTS);
21042106
}
21052107

21062108
ASSERT_CMPINT (i, ==, N_SERVER_VERSION_PARTS);
2107-
21082109
return ret;
21092110
}
21102111

@@ -2142,18 +2143,21 @@ test_framework_str_to_version (const char *version_str)
21422143
str_copy = bson_strdup (version_str);
21432144
i = 0;
21442145
part = strtok (str_copy, ".");
2146+
2147+
/* Versions can have 4 parts like "3.2.0.0", or like "3.2.0.-49" for an RC.
2148+
* Ignore the 4th part since RCs are equivalent to non-RCs for testing
2149+
* purposes. */
21452150
while (part) {
2151+
if (++i == N_SERVER_VERSION_PARTS) {
2152+
break;
2153+
}
21462154
ret *= 1000;
2147-
2148-
/* add 100 since release candidates have versions like "3.2.0.-49" */
21492155
ret += 100 + bson_ascii_strtoll (part, &end, 10);
2150-
i++;
2151-
ASSERT_CMPINT (i, <=, N_SERVER_VERSION_PARTS);
21522156
part = strtok (NULL, ".");
21532157
}
21542158

2155-
/* pad out a short version like "3.0" */
2156-
for (; i < N_SERVER_VERSION_PARTS; i++) {
2159+
/* pad out a short version like "3.0" to three parts */
2160+
for (; i < N_SERVER_VERSION_PARTS - 1; i++) {
21572161
ret *= 1000;
21582162
ret += 100;
21592163
}
@@ -2167,11 +2171,11 @@ test_framework_str_to_version (const char *version_str)
21672171
static void
21682172
test_version_cmp (void)
21692173
{
2170-
server_version_t v2_6_12 = 102106112100;
2171-
server_version_t v3_0_0 = 103100100100;
2172-
server_version_t v3_0_1 = 103100101100;
2173-
server_version_t v3_0_10 = 103100110100;
2174-
server_version_t v3_2_0_rc1_pre = 103102100051;
2174+
server_version_t v2_6_12 = 102106112;
2175+
server_version_t v3_0_0 = 103100100;
2176+
server_version_t v3_0_1 = 103100101;
2177+
server_version_t v3_0_10 = 103100110;
2178+
server_version_t v3_2_0 = 103102100;
21752179

21762180
ASSERT (v2_6_12 == test_framework_str_to_version ("2.6.12"));
21772181
ASSERT (v2_6_12 == _parse_server_version (
@@ -2189,12 +2193,14 @@ test_version_cmp (void)
21892193
ASSERT (v3_0_10 == _parse_server_version (
21902194
tmp_bson ("{'versionArray': [3, 0, 10, 0]}")));
21912195

2192-
ASSERT (v3_2_0_rc1_pre == test_framework_str_to_version ("3.2.0.-49"));
2193-
ASSERT (v3_2_0_rc1_pre == _parse_server_version (
2194-
tmp_bson ("{'versionArray': [3, 2, 0, -49]}")));
2196+
/* release candidates should be equivalent to non-rcs. */
2197+
ASSERT (v3_2_0 == test_framework_str_to_version ("3.2.0.-49"));
2198+
ASSERT (v3_2_0 == _parse_server_version (
2199+
tmp_bson ("{'versionArray': [3, 2, 0, -49]}")));
21952200

2196-
ASSERT (v3_2_0_rc1_pre > test_framework_str_to_version ("3.1.9"));
2197-
ASSERT (v3_2_0_rc1_pre < test_framework_str_to_version ("3.2"));
2201+
ASSERT (v3_2_0 > test_framework_str_to_version ("3.1.9"));
2202+
ASSERT (v3_2_0 == test_framework_str_to_version ("3.2"));
2203+
ASSERT (v3_2_0 < test_framework_str_to_version ("3.2.1"));
21982204
}
21992205

22002206
int

0 commit comments

Comments
 (0)