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)
Пример #11
0
    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)
Пример #14
0
    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)