def test_dont_upload_non_built_packages(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) with environment_append({"CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******"}): mulitpackager = get_patched_multipackager(tc, exclude_vcvars_precommand=True) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertIn("Uploading package 1/2", tc.out) self.assertIn("Uploading package 2/2", tc.out) # With the same cache and server try to rebuild them with policy missing mulitpackager = get_patched_multipackager(tc, build_policy="missing", exclude_vcvars_precommand=True) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertIn("Skipping upload for 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9", tc.out) self.assertIn("Skipping upload for 2a623e3082a38f90cd2c3d12081161412de331b0", tc.out) self.assertNotIn("HALLO", tc.out) # Without any build policy they get built mulitpackager = get_patched_multipackager(tc, exclude_vcvars_precommand=True) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertNotIn("Skipping upload for 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9", tc.out) self.assertNotIn("Skipping upload for 2a623e3082a38f90cd2c3d12081161412de331b0", tc.out) self.assertIn("Uploading package 1/2", tc.out) self.assertIn("Uploading package 2/2", tc.out) self.assertIn("HALLO", tc.out)
def test_update_some_dependencies(self): with environment_append({ "CONAN_UPLOAD": self._server.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_DEPENDENCIES": "all", "CONAN_UPDATE_DEPENDENCIES": "True" }): mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy=["foobar", "bar", "foo", "qux"], exclude_vcvars_precommand=True, ci_manager=self._ci_manager) mulitpackager.add({}, {}) mulitpackager.run() self.assertIn("Uploading packages for 'foobar/2.0@user/testing'", self._client.out) self.assertIn("Uploading packages for 'bar/0.1.0@foo/stable'", self._client.out) self.assertIn("Uploading packages for 'foo/1.0.0@bar/testing'", self._client.out) self.assertIn("Uploading packages for 'qux/1.0.0@qux/stable'", self._client.out) # only build and upload foobar mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy="foobar", exclude_vcvars_precommand=True, ci_manager=self._ci_manager, conanfile="conanfile.py") mulitpackager.add({}, {}) mulitpackager.run() self.assertRegexpMatches(str(self._client.out), r'bar/0.1.0@foo/stable:.* - Cache') self.assertRegexpMatches(str(self._client.out), r'foo/1.0.0@bar/testing:.* - Cache') self.assertRegexpMatches(str(self._client.out), r'qux/1.0.0@qux/stable:.* - Cache') self.assertRegexpMatches(str(self._client.out), r'foobar/2.0@user/testing:.* - Build') self.assertIn("Uploading packages for 'foobar/2.0@user/testing'", self._client.out) self.assertNotIn("Uploading packages for 'bar/0.1.0@foo/stable'", self._client.out) self.assertNotIn("Uploading packages for 'foo/1.0.0@bar/testing'", self._client.out) self.assertNotIn("Uploading packages for 'qux/1.0.0@qux/stable'", self._client.out)
def test_update_all_dependencies(self): with environment_append({ "CONAN_UPLOAD": self._server.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_DEPENDENCIES": "all", "CONAN_UPDATE_DEPENDENCIES": "True" }): mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy="missing", exclude_vcvars_precommand=True, ci_manager=self._ci_manager) mulitpackager.add({}, {}) mulitpackager.run() self.assertIn("Uploading packages for 'foobar/2.0@user/testing'", self._client.out) self.assertIn("Uploading packages for 'bar/0.1.0@foo/stable'", self._client.out) self.assertIn("Uploading packages for 'foo/1.0.0@bar/testing'", self._client.out) self.assertIn("Uploading packages for 'qux/1.0.0@'", self._client.out) # Upload new version of foo/1.0.0@bar/testing and re-add old revision in local cache self._client.save({"conanfile_foo.py": self.conanfile_foo_2}) mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy="missing", exclude_vcvars_precommand=True, ci_manager=self._ci_manager, conanfile="conanfile_foo.py") mulitpackager.add({}, {}) mulitpackager.run() self._client.run("remove -f foo/1.0.0@bar/testing") self._client.save({"conanfile_foo.py": self.conanfile_foo}) self._client.run("export conanfile_foo.py bar/testing") # build again and update newest revision from remote mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy="missing", exclude_vcvars_precommand=True, ci_manager=self._ci_manager) mulitpackager.add({}, {}) mulitpackager.run() self.assertIn("foo/1.0.0@bar/testing: Package installed", self._client.out)
def test_upload_only_recipe_params(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) # Upload only the recipe with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_CHANNEL": "mychannel" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True, upload_only_recipe=True, ci_manager=self._ci_manager) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertIn(" Uploading packages for 'lib/1.0@user/mychannel'", tc.out) self.assertIn("Uploading lib/1.0@user/mychannel to remote", tc.out) self.assertIn("Uploaded conan recipe 'lib/1.0@user/mychannel'", tc.out) self.assertNotIn("Uploading package 1/2", tc.out) self.assertNotIn("Uploading package 2/2", tc.out) # Re-use cache the upload the binary packages with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_CHANNEL": "mychannel" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True, upload_only_recipe=False, ci_manager=self._ci_manager) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertIn(" Uploading packages for 'lib/1.0@user/mychannel'", tc.out) self.assertIn("Uploading lib/1.0@user/mychannel to remote", tc.out) self.assertIn("Recipe is up to date, upload skipped", tc.out) self.assertIn("Uploading package 1/2", tc.out) self.assertIn("Uploading package 2/2", tc.out)
def test_toolsets_works(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_VISUAL_TOOLSETS": "15=v140;v140_xp,11=v140;v140_xp" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True) mulitpackager.add_common_builds(reference="lib/1.0@user/stable", shared_option_name=False) mulitpackager.run() if platform.system() == "Windows": self.assertIn("Uploading package 1/4", tc.out) self.assertIn("Uploading package 2/4", tc.out) self.assertIn("Uploading package 3/4", tc.out) self.assertIn("Uploading package 4/4", tc.out) self.assertIn("compiler.toolset=v140", tc.out) self.assertIn("compiler.toolset=v140_xp", tc.out) else: self.assertIn("Uploading package 1/2", tc.out) self.assertIn("Uploading package 2/2", tc.out)
def test_upload_when_tag_is_false(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) zip_path = os.path.join(tc.current_folder, 'config.zip') zipf = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) zipf.close() with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_CONFIG_URL": zip_path, "CONAN_UPLOAD_ONLY_WHEN_TAG": "1", "TRAVIS": "1" }): mp = get_patched_multipackager(tc, exclude_vcvars_precommand=True) mp.add_common_builds(shared_option_name=False) mp.run() self.assertNotIn("Redefined channel by branch tag", tc.out) self.assertNotIn("Uploading packages for 'lib/1.0@user/stable'", tc.out) self.assertNotIn( "Uploading package 1/1: 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9 to 'default'", tc.out) self.assertIn("Skipping upload, not tag branch", tc.out)
def test_upload_package_revisions(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_REVISIONS_ENABLED": "1" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True, ci_manager=self._ci_manager) mulitpackager.add({}, {"shared": True}) mulitpackager.add({}, {"shared": False}) mulitpackager.run() self.assertNotIn( "Skipping upload for 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9", tc.out) self.assertNotIn( "Skipping upload for 2a623e3082a38f90cd2c3d12081161412de331b0", tc.out) self.assertIn("Uploading package 1/2", tc.out) self.assertIn("Uploading package 2/2", tc.out) self.assertIn("HALLO", tc.out)
def test_toolsets_works(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) zip_path = os.path.join(tc.current_folder, 'config.zip') zipf = zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) zipf.close() with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_CONFIG_URL": zip_path }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True) mulitpackager.add_common_builds(reference="lib/1.0@user/stable", shared_option_name=False) mulitpackager.run() self.assertIn("Installing config from address %s" % zip_path, tc.out)
def test_invalid_upload_dependencies(self): with environment_append({ "CONAN_UPLOAD": self._server.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_DEPENDENCIES": "all,bar/0.1.0@foo/stable" }): with self.assertRaises(Exception) as context: get_patched_multipackager(self._client, exclude_vcvars_precommand=True) self.assertIn( "Upload dependencies only accepts or 'all' or package references. Do not mix both!", str(context.exception))
def test_upload_specific_dependencies(self): with environment_append({ "CONAN_UPLOAD": self._server.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_DEPENDENCIES": "foo/1.0.0@bar/testing" }): mulitpackager = get_patched_multipackager( self._client, username="******", channel="testing", build_policy="missing", exclude_vcvars_precommand=True, ci_manager=self._ci_manager) mulitpackager.add({}, {}) mulitpackager.run() self.assertIn("Uploading packages for 'foobar/2.0@user/testing'", self._client.out) self.assertIn("Uploaded conan recipe 'foobar/2.0@user/testing'", self._client.out) self.assertIn( "Uploading package 1/1: f88b82969cca9c4bf43f9effe1157e641f38f16d", self._client.out) self.assertNotIn("Uploading packages for 'bar/0.1.0@foo/stable'", self._client.out) self.assertNotIn("Uploaded conan recipe 'bar/0.1.0@foo/stable'", self._client.out) self.assertNotIn( "Uploading package 1/1: 5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9", self._client.out) self.assertIn("Uploading packages for 'foo/1.0.0@bar/testing'", self._client.out) self.assertIn("Uploaded conan recipe 'foo/1.0.0@bar/testing'", self._client.out) self.assertIn( "Uploading package 1/1: 2a623e3082a38f90cd2c3d12081161412de331b0", self._client.out)
def test_upload_partial_reference(self): ts = TestServer(users={"user": "******"}, write_permissions=[("lib/1.0", "user")]) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_REFERENCE": "lib/1.0@", }): mp = get_patched_multipackager(tc, exclude_vcvars_precommand=True) mp.add_common_builds(shared_option_name=False) mp.run() self.assertIn("Uploading packages for 'lib/1.0@'", tc.out) self.assertIn("lib/1.0: WARN: HALLO", tc.out)
def test_invalid_configuration_skipped_but_warned(self): ts = TestServer(users={"user": "******"}) tc = TestClient(servers={"default": ts}, users={"default": [("user", "password")]}) tc.save({"conanfile.py": self.conanfile}) with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True) mulitpackager.add({"arch": "x86_64"}, {}) mulitpackager.add({"arch": "x86"}, {}) mulitpackager.run() self.assertIn("Uploading package 1/1", tc.out) self.assertIn( "Invalid configuration: This library doesn't support x86", tc.out)
def test_python_requires(self): base_conanfile = """from conans import ConanFile myvar = 123 def myfunct(): return 234 class Pkg(ConanFile): pass """ conanfile = """from conans import ConanFile class Pkg(ConanFile): name = "pyreq" version = "1.0.0" python_requires = "pyreq_base/0.1@user/channel" def build(self): v = self.python_requires["pyreq_base"].module.myvar f = self.python_requires["pyreq_base"].module.myfunct() self.output.info("%s,%s" % (v, f)) """ client = TestClient() client.save({"conanfile_base.py": base_conanfile}) client.run("export conanfile_base.py pyreq_base/0.1@user/channel") client.save({"conanfile.py": conanfile}) mulitpackager = get_patched_multipackager( client, username="******", channel="testing", exclude_vcvars_precommand=True) mulitpackager.add({}, {}) mulitpackager.run() self.assertIn("pyreq/1.0.0@user/", client.out) self.assertIn(": 123,234", client.out)
def test_forced_upload(self): NO_SETTINGS_PACKAGE_ID = "5ab84d6acfe1f23c4fae0ab88f26e3a396351ac9" conanfile = textwrap.dedent(""" from conans import ConanFile class Pkg(ConanFile): def configure(self): self.output.warn("Mens sana in corpore sano") """) ts = TestServer(users={"foo": "password"}) tc = TestClient(servers={"foo_server": ts}, users={"foo_server": [("foo", "password")]}) tc.save({"conanfile.py": conanfile}) tc.run("create . lib/1.0@foo/stable") tc.run("upload lib/1.0@foo/stable --all -r foo_server") pref = PackageReference.loads("lib/1.0@foo/stable#{}:{}".format( 0, NO_SETTINGS_PACKAGE_ID)) path = os.path.join(ts.server_store.package_revisions_root(pref), "0") manifest = FileTreeManifest.load(path) manifest.time += 1000 manifest.save(path) tc.save({"conanfile.py": conanfile.replace("warn", "info")}) tc.run("create . lib/1.0@foo/stable") # Force is True, package must be uploaded all times with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_FORCE": "True" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True) mulitpackager.add_common_builds(reference="lib/1.0@foo/stable", shared_option_name=False) mulitpackager.run() self.assertIn("Uploading packages for 'lib/1.0@foo/stable'", tc.out) self.assertNotIn("Recipe is up to date, upload skipped", tc.out) self.assertNotIn("Package is up to date, upload skipped", tc.out) with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_FORCE": "FALSE" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True, upload_force=True) mulitpackager.add_common_builds(reference="lib/1.0@foo/stable", shared_option_name=False) mulitpackager.run() self.assertIn("Uploading packages for 'lib/1.0@foo/stable'", tc.out) self.assertNotIn("Package is up to date, upload skipped", tc.out) self.assertNotIn("Recipe is up to date, upload skipped", tc.out) # Force is False. Must not upload any package with environment_append({ "CONAN_UPLOAD": ts.fake_url, "CONAN_LOGIN_USERNAME": "******", "CONAN_PASSWORD": "******", "CONAN_USERNAME": "******", "CONAN_UPLOAD_FORCE": "FALSE" }): mulitpackager = get_patched_multipackager( tc, exclude_vcvars_precommand=True, upload_force=False) mulitpackager.add_common_builds(reference="lib/1.0@foo/stable", shared_option_name=False) mulitpackager.run() self.assertIn("Uploading packages for 'lib/1.0@foo/stable'", tc.out) self.assertIn("Recipe is up to date, upload skipped", tc.out) self.assertIn("Package is up to date, upload skipped", tc.out)