Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows support #14

Closed
prashantmital opened this issue Apr 3, 2020 · 1 comment · Fixed by #32
Closed

Windows support #14

prashantmital opened this issue Apr 3, 2020 · 1 comment · Fixed by #32
Labels
high priority This is needed urgently
Milestone

Comments

@prashantmital
Copy link
Contributor

Currently, astrolabe cannot run spec tests on Windows because PyMongo cannot reliably connect to Atlas clusters on windows. It fails with the following traceback:

[2020/04/01 02:09:22.209] Traceback (most recent call last):
[2020/04/01 02:09:22.209]   File "C:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\Scripts\astrolabe-script.py", line 11, in <module>
[2020/04/01 02:09:22.209]     load_entry_point('astrolabe', 'console_scripts', 'astrolabe')()
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 829, in __call__
[2020/04/01 02:09:22.209]     return self.main(*args, **kwargs)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 782, in main
[2020/04/01 02:09:22.209]     rv = self.invoke(ctx)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 1259, in invoke
[2020/04/01 02:09:22.209]     return _process_result(sub_ctx.command.invoke(sub_ctx))
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 1259, in invoke
[2020/04/01 02:09:22.209]     return _process_result(sub_ctx.command.invoke(sub_ctx))
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 1066, in invoke
[2020/04/01 02:09:22.209]     return ctx.invoke(self.callback, **ctx.params)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\core.py", line 610, in invoke
[2020/04/01 02:09:22.209]     return callback(*args, **kwargs)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\click\decorators.py", line 21, in new_func
[2020/04/01 02:09:22.209]     return f(get_current_context(), *args, **kwargs)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabe\cli.py", line 428, in run_single_test
[2020/04/01 02:09:22.209]     failed = runner.run()
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabe\spec_runner.py", line 360, in run
[2020/04/01 02:09:22.209]     xunit_test = active_case.run(persist_cluster=self.persist_clusters)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabe\spec_runner.py", line 165, in run
[2020/04/01 02:09:22.209]     coll.drop()
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\collection.py", line 1103, in drop
[2020/04/01 02:09:22.209]     dbo.drop_collection(self.__name, session=session)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\database.py", line 914, in drop_collection
[2020/04/01 02:09:22.209]     with self.__client._socket_for_writes(session) as sock_info:
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\mongo_client.py", line 1266, in _socket_for_writes
[2020/04/01 02:09:22.209]     server = self._select_server(writable_server_selector, session)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\mongo_client.py", line 1253, in _select_server
[2020/04/01 02:09:22.209]     server = topology.select_server(server_selector)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\topology.py", line 235, in select_server
[2020/04/01 02:09:22.209]     address))
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\topology.py", line 193, in select_servers
[2020/04/01 02:09:22.209]     selector, server_timeout, address)
[2020/04/01 02:09:22.209]   File "c:\data\mci\fcc36544582db08774836579fbb262db\astrolabe-src\astrolabevenv\lib\site-packages\pymongo\topology.py", line 209, in _select_servers_loop
[2020/04/01 02:09:22.209]     self._error_message(selector))
[2020/04/01 02:09:22.209] pymongo.errors.ServerSelectionTimeoutError: 0412be4b71-shard-00-00.90gnc.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076),0412be4b71-shard-00-02.90gnc.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076),0412be4b71-shard-00-01.90gnc.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)

This is likely due to missing system CA certs on Windows hosts in Evergreen (see BUILD-10841).

Once the certs issue is resolved we might uncover other issues to running things reliably on Windows. These kinks need to be ironed out so that this framework can be consumed by driver languages that must use Windows as a testing platform.

@prashantmital
Copy link
Contributor Author

In addition to the cert issue, there is one other minor issue related to how process groups can be spawned and killed on windows that is needed to truly support Windows. The difference arises from the following:

  • the need to use creationflags=subprocess.CREATE_NEW_PROCESS_GROUP instead of preexec_fn=os.setsid on Windows in order to create process groups.
  • the need to use os.kill(pid, signal.CTRL_C_EVENT) instead of os.killpg(pid, signal.SIGINT) (killpg does not exist on Windows).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
high priority This is needed urgently
Projects
None yet
1 participant