Exemple #1
0
    def test_requester_with_host_specific_proxies(self):
        client = TestClient()
        conf = textwrap.dedent("""
            [proxies]
            https=http://conan.url
              only.for.this.conan.url = http://special.url
              only.for.that.conan.url = http://user:[email protected]
            http=
              only.for.the.other.conan.url = http://other.special.url
                    """)
        save(client.cache.conan_conf_path, conf)
        requester = ConanRequester(client.cache.config)

        def verify_proxies(url, **kwargs):
            self.assertEqual(
                kwargs["proxies"], {
                    "http://only.for.the.other.conan.url":
                    "http://other.special.url",
                    "https":
                    "http://conan.url",
                    "https://only.for.this.conan.url":
                    "http://special.url",
                    "https://only.for.that.conan.url":
                    "http://*****:*****@extra.special.url"
                })
            return "mocked ok!"

        requester._http_requester.get = verify_proxies
        self.assertFalse("NO_PROXY" in os.environ,
                         "Error: NO_PROXY=%s" % os.getenv("NO_PROXY"))

        self.assertEqual(requester.get("MyUrl"), "mocked ok!")
Exemple #2
0
    def test_requester(self):
        client = TestClient()
        conf = """
[proxies]
https=None
no_proxy=http://someurl,http://otherurl.com
http=http://conan.url
        """
        save(client.cache.conan_conf_path, conf)
        with warnings.catch_warnings(record=True) as warn:
            warnings.simplefilter("always")
            requester = ConanRequester(client.cache.config)

            def verify_proxies(url, **kwargs):
                self.assertEqual(kwargs["proxies"], {
                    "https": None,
                    "http": "http://conan.url"
                })
                return "mocked ok!"

            requester._http_requester.get = verify_proxies
            self.assertEqual(os.environ["NO_PROXY"],
                             "http://someurl,http://otherurl.com")

            self.assertEqual(requester.get("MyUrl"), "mocked ok!")

            self.assertEqual(1, len(warn))
            self.assertTrue(issubclass(warn[-1].category, UserWarning))
            self.assertIn(
                "proxies.no_proxy has been deprecated. "
                "Use proxies.no_proxy_match instead", str(warn[-1].message))
Exemple #3
0
 def test_cache_config(self):
     file_path = os.path.join(temp_folder(), "whatever_cacert")
     save(file_path, "")
     conan_conf = os.path.join(temp_folder(), "conan.conf")
     save(conan_conf, normalize(default_client_conf))
     replace_in_file(conan_conf,
                     "# cacert_path",
                     "cacert_path={}".format(file_path),
                     output=TestBufferConanOutput())
     config = ConanClientConfigParser(conan_conf)
     mocked_requester = MockRequesterGet()
     requester = ConanRequester(config, mocked_requester)
     requester.get(url="bbbb", verify=True)
     self.assertEqual(mocked_requester.verify, file_path)
Exemple #4
0
    def test_environ_kept(self):
        client = TestClient()
        conf = """
[proxies]
        """
        save(client.cache.conan_conf_path, conf)
        requester = ConanRequester(client.cache.config)

        def verify_env(url, **kwargs):
            self.assertTrue("HTTP_PROXY" in os.environ)

        with tools.environment_append({"HTTP_PROXY": "my_system_proxy"}):
            requester._http_requester.get = verify_env
            requester.get("MyUrl")
Exemple #5
0
    def test_cache_config(self):
        cache = ClientCache(temp_folder(), TestBufferConanOutput())
        file_path = os.path.join(cache.cache_folder, "whatever_cacert")
        replace_in_file(cache.conan_conf_path,
                        "# cacert_path",
                        "cacert_path={}".format(file_path),
                        output=TestBufferConanOutput())
        save(file_path, "")
        cache.invalidate()

        requester = ConanRequester(cache.config)
        mocked_requester = MockRequesterGet()
        requester._http_requester = mocked_requester
        requester.get(url="bbbb", verify=True)
        self.assertEqual(mocked_requester.verify, file_path)
Exemple #6
0
    def _init_collaborators(self, user_io=None):

        output = TestBufferConanOutput()
        self.user_io = user_io or MockedUserIO(self.users, out=output)

        self.runner = TestRunner(output, runner=self.conan_runner)

        # Check if servers are real
        real_servers = False
        for server in self.servers.values():
            if isinstance(server, str):  # Just URI
                real_servers = True

        if real_servers:
            requester = requests.Session()
        else:
            if self.requester_class:
                requester = self.requester_class(self.servers)
            else:
                requester = TestRequester(self.servers)

        self.requester = ConanRequester(requester, self.client_cache)

        self.localdb, self.rest_api_client, self.remote_manager = Conan.instance_remote_manager(
            self.requester, self.client_cache, self.user_io,
            self.client_version, self.min_server_compatible_version)

        set_global_instances(output, self.requester)
Exemple #7
0
    def setUpClass(cls):
        if not cls.server:
            cls.server = TestServerLauncher(
                server_capabilities=['ImCool', 'TooCool'])
            cls.server.start()

            filename = os.path.join(temp_folder(), "conan.conf")
            save(filename, "")
            config = ConanClientConfigParser(filename)
            requester = ConanRequester(config, requests)
            client_factory = RestApiClientFactory(TestBufferConanOutput(),
                                                  requester=requester,
                                                  config=config)
            localdb = LocalDBMock()

            mocked_user_io = UserIO(out=TestBufferConanOutput())
            mocked_user_io.get_username = Mock(return_value="private_user")
            mocked_user_io.get_password = Mock(return_value="private_pass")

            cls.auth_manager = ConanApiAuthManager(client_factory,
                                                   mocked_user_io, localdb)
            cls.remote = Remote("myremote",
                                "http://127.0.0.1:%s" % str(cls.server.port),
                                True, True)
            cls.auth_manager._authenticate(cls.remote,
                                           user="******",
                                           password="******")
            cls.api = client_factory.new(cls.remote, localdb.access_token,
                                         localdb.refresh_token, {})
Exemple #8
0
    def _init_collaborators(self, user_io=None):

        output = TestBufferConanOutput()
        self.user_io = user_io or MockedUserIO(self.users, out=output)
        self.cache = ClientCache(self.base_folder, self.storage_folder, output)
        self.runner = TestRunner(output, runner=self.conan_runner)

        # Check if servers are real
        real_servers = False
        for server in self.servers.values():
            if isinstance(server, str) or isinstance(
                    server, ArtifactoryServer):  # Just URI
                real_servers = True
                break

        with tools.environment_append(self.cache.config.env_vars):
            if real_servers:
                requester = requests.Session()
            else:
                if self.requester_class:
                    requester = self.requester_class(self.servers)
                else:
                    requester = TestRequester(self.servers)

            self.requester = ConanRequester(requester, self.cache,
                                            get_request_timeout())

            self.hook_manager = HookManager(self.cache.hooks_path,
                                            get_env("CONAN_HOOKS", list()),
                                            self.user_io.out)

            self.localdb, self.rest_api_client, self.remote_manager = \
                Conan.instance_remote_manager(self.requester, self.cache,
                                              self.user_io, self.hook_manager)
            return output, self.requester
Exemple #9
0
    def _init_collaborators(self, user_io=None):

        output = TestBufferConanOutput()
        self.user_io = user_io or MockedUserIO(self.users, out=output)

        self.runner = TestRunner(output, runner=self.conan_runner)

        # Check if servers are real
        real_servers = False
        for server in self.servers.values():
            if isinstance(server, str):  # Just URI
                real_servers = True

        with tools.environment_append(self.client_cache.conan_config.env_vars):
            if real_servers:
                requester = requests.Session()
            else:
                if self.requester_class:
                    requester = self.requester_class(self.servers)
                else:
                    requester = TestRequester(self.servers)

            self.requester = ConanRequester(requester, self.client_cache,
                                            get_request_timeout())

            self.plugin_manager = PluginManager(
                self.client_cache.plugins_path,
                get_env("CONAN_PLUGINS", list()), self.user_io.out)

            self.localdb, self.rest_api_client, self.remote_manager = Conan.instance_remote_manager(
                self.requester, self.client_cache, self.user_io,
                self.client_version, self.min_server_compatible_version,
                self.plugin_manager)
            set_global_instances(output, self.requester)
    def test_requester(self):
        client = TestClient()
        conf = """
[proxies]
https=None
no_proxy=http://someurl,http://otherurl.com
http=http://conan.url
        """
        save(client.cache.conan_conf_path, conf)
        client.cache.invalidate()
        requester = ConanRequester(client.cache.config)

        def verify_proxies(url, **kwargs):
            self.assertEqual(kwargs["proxies"], {"https": None, "http": "http://conan.url"})
            return "mocked ok!"

        requester._http_requester.get = verify_proxies
        self.assertEqual(os.environ["NO_PROXY"], "http://someurl,http://otherurl.com")

        self.assertEqual(requester.get("MyUrl"), "mocked ok!")
Exemple #11
0
    def test_user_agent(self):
        cache_folder = temp_folder()
        cache = ClientCache(cache_folder, TestBufferConanOutput())
        mock_http_requester = MagicMock()
        requester = ConanRequester(cache.config, mock_http_requester)
        requester.get(url="aaa")
        headers = mock_http_requester.get.call_args[1]["headers"]
        self.assertIn("Conan/%s" % __version__, headers["User-Agent"])

        requester.get(url="aaa", headers={"User-Agent": "MyUserAgent"})
        headers = mock_http_requester.get.call_args[1]["headers"]
        self.assertEqual("MyUserAgent", headers["User-Agent"])
Exemple #12
0
    def setUpClass(cls):
        if not cls.server:
            cls.server = TestServerLauncher(
                server_capabilities=['ImCool', 'TooCool'])
            cls.server.start()

            filename = os.path.join(temp_folder(), "conan.conf")
            save(filename, "")
            config = ConanClientConfigParser(filename)
            requester = ConanRequester(config, requests)
            cls.api = RestApiClient(TestBufferConanOutput(),
                                    requester=requester,
                                    revisions_enabled=False)
            cls.api.remote_url = "http://127.0.0.1:%s" % str(cls.server.port)

            # Authenticate user
            token = cls.api.authenticate("private_user", "private_pass")
            cls.api.token = token
Exemple #13
0
    def init_dynamic_vars(self, user_io=None):
        # Migration system
        output = TestBufferConanOutput()
        self.user_io = user_io or MockedUserIO(self.users, out=output)
        self.cache = ClientCache(self.base_folder, output)

        # Migration system
        migrator = ClientMigrator(self.cache, Version(__version__), output)
        migrator.migrate()

        http_requester = self._get_http_requester()
        config = self.cache.config
        if self.conan_runner:
            self.runner = self.conan_runner
        else:
            self.runner = ConanRunner(config.print_commands_to_output,
                                      config.generate_run_log_file,
                                      config.log_run_to_output,
                                      output=output)

        self.requester = ConanRequester(config, http_requester)
        self.hook_manager = HookManager(self.cache.hooks_path, config.hooks,
                                        self.user_io.out)

        put_headers = self.cache.read_put_headers()
        self.rest_api_client = RestApiClient(
            self.user_io.out,
            self.requester,
            revisions_enabled=config.revisions_enabled,
            put_headers=put_headers)
        # To store user and token
        self.localdb = LocalDB.create(self.cache.localdb)
        # Wraps RestApiClient to add authentication support (same interface)
        auth_manager = ConanApiAuthManager(self.rest_api_client, self.user_io,
                                           self.localdb)
        # Handle remote connections
        self.remote_manager = RemoteManager(self.cache, auth_manager,
                                            self.user_io.out,
                                            self.hook_manager)
        return output, self.requester
Exemple #14
0
    def test_environ_removed(self):

        client = TestClient()
        conf = """
[proxies]
no_proxy_match=MyExcludedUrl*
"""
        save(client.cache.conan_conf_path, conf)
        requester = ConanRequester(client.cache.config)

        def verify_env(url, **kwargs):
            self.assertFalse("HTTP_PROXY" in os.environ)
            self.assertFalse("http_proxy" in os.environ)

        with tools.environment_append({"http_proxy": "my_system_proxy"}):
            requester._http_requester.get = verify_env
            requester.get("MyUrl")
            self.assertEqual(os.environ["http_proxy"], "my_system_proxy")

        with tools.environment_append({"HTTP_PROXY": "my_system_proxy"}):
            requester._http_requester.get = verify_env
            requester.get("MyUrl")
            self.assertEqual(os.environ["HTTP_PROXY"], "my_system_proxy")
Exemple #15
0
def get_basic_requester(client_cache):
    requester = requests.Session()
    # Manage the verify and the client certificates and setup proxies
    return ConanRequester(requester, client_cache)
Exemple #16
0
 def _create_requesters(cache_folder=None):
     cache = ClientCache(cache_folder or temp_folder(),
                         TestBufferConanOutput())
     mock_requester = MockRequesterGet()
     requester = ConanRequester(cache.config, mock_requester)
     return requester, mock_requester, cache