Example #1
0
    def setUp(self):
        self.server = TestServerLauncher()
        self.server.start()
        self.api = RestApiClient(ConanOutput(sys.stdout, Color),
                                 requester=requests)
        self.api.remote_url = "http://localhost:%s" % str(self.server.port)

        time.sleep(0.05)  # necessary in linux
        # Authenticate user
        token = self.api.authenticate("private_user", "private_pass")
        self.api.token = token
        self.local_folder = temp_folder()
Example #2
0
File: tools.py Project: tru/conan
    def __init__(
        self,
        read_permissions=None,
        write_permissions=None,
        users=None,
        plugins=None,
        base_path=None,
        server_version=Version(SERVER_VERSION),
        min_client_compatible_version=Version(MIN_CLIENT_COMPATIBLE_VERSION)):
        """
             'read_permissions' and 'write_permissions' is a list of:
                 [("opencv/2.3.4@lasote/testing", "user1, user2")]

             'users':  {username: plain-text-passwd}
        """
        # Unique identifier for this server, will be used by TestRequester
        # to determine where to call. Why? remote_manager just assing an url
        # to the rest_client, so rest_client doesn't know about object instances,
        # just urls, so testing framework performs a map between fake urls and instances
        self.fake_url = "http://fake%s.com" % str(uuid.uuid4()).replace(
            "-", "")
        self.test_server = TestServerLauncher(
            base_path,
            read_permissions,
            write_permissions,
            users,
            base_url=self.fake_url + "/v1",
            plugins=plugins,
            server_version=server_version,
            min_client_compatible_version=min_client_compatible_version)
        self.app = TestApp(self.test_server.ra.root_app)
Example #3
0
    def setUp(self):
        self.server = TestServerLauncher()
        self.server.start()
        self.api = RestApiClient(ConanOutput(sys.stdout, Color), requester=requests)
        self.api.remote_url = "http://localhost:%s" % str(self.server.port)

        time.sleep(0.05)  # necessary in linux
        # Authenticate user
        token = self.api.authenticate("private_user", "private_pass")
        self.api.token = token
        self.local_folder = temp_folder()
Example #4
0
    def setUpClass(cls):
        if not cls.server:
            plugin = VersionCheckerPlugin(Version("0.16.0"), Version("0.16.0"), ["ImCool"])
            cls.server = TestServerLauncher(server_version=Version("0.16.0"),
                                            min_client_compatible_version=Version("0.16.0"),
                                            plugins=[plugin])
            cls.server.start()

            cls.api = RestApiClient(ConanOutput(sys.stdout, Color), requester=requests)
            cls.api.remote_url = "http://localhost:%s" % str(cls.server.port)

            # Authenticate user
            token = cls.api.authenticate("private_user", "private_pass")
            cls.api.token = token
Example #5
0
class RestApiTest(unittest.TestCase):

    def setUp(self):
        self.server = TestServerLauncher()
        self.server.start()
        self.api = RestApiClient(ConanOutput(sys.stdout, Color), requester=requests)
        self.api.remote_url = "http://*****:*****@private_user/testing")
        self._upload_conan(conan_reference)

        # Get the conans
        conan = self.api.get_conan(conan_reference)
        self.assertIsNotNone(conan)
        self.assertIn(CONANFILE, conan)
        self.assertIn(CONAN_MANIFEST, conan)

    def get_conan_digest_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads("conan2/1.0.0@private_user/testing")
        self._upload_conan(conan_reference)

        # Get the conans digest
        digest = self.api.get_conan_digest(conan_reference)
        self.assertEquals(digest.sha, "thesha")
        self.assertEquals(digest.time, 123123123)

    def get_package_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads("conan3/1.0.0@private_user/testing")
        self._upload_conan(conan_reference)

        # Upload an package
        package_reference = PackageReference(conan_reference, "1F23223EFDA")
        self._upload_package(package_reference)

        # Get the package
        package = self.api.get_package(package_reference)
        self.assertIsNotNone(package)
        self.assertIn("hello.cpp", package)

    def upload_huge_conan_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads("conanhuge/1.0.0@private_user/testing")
        files = {"file%s.cpp" % name: "File conent" for name in xrange(1000)}
        self._upload_conan(conan_reference, files)

        # Get the conans
        pack = self.api.get_conan(conan_reference)
        self.assertIsNotNone(pack)
        self.assertIn("file999.cpp", pack)

    def search_test(self):
        # Upload a conan1
        conan_name1 = "HelloOnly/0.10@private_user/testing"
        conan_reference1 = ConanFileReference.loads(conan_name1)
        self._upload_conan(conan_reference1)

        # Upload an package
        conan_info = """[settings]
    arch: x86_64
    compiler: gcc
    os: Linux
[options]
    386: False
[requires]
    Hello
    Bye/2.9
    Say/2.1@user/testing
    Chat/2.1@user/testing:SHA_ABC
"""
        package_reference = PackageReference(conan_reference1, "1F23223EFDA")
        self._upload_package(package_reference, {CONANINFO: conan_info})

        # Upload a conan2
        conan_name2 = "helloonlyToo/2.1@private_user/stable"
        conan_reference2 = ConanFileReference.loads(conan_name2)
        self._upload_conan(conan_reference2)

        # Get the info about this ConanFileReference
        info = self.api.search("helloonly*")
        expected_info1 = {"1F23223EFDA": ConanInfo.loads(conan_info)}
        expected_info2 = {}
        self.assertEqual(expected_info1, info[conan_reference1])
        self.assertEqual(expected_info2, info[conan_reference2])

        # Get the info about this ConanFileReference
        info = self.api.search("HelloOnly*", ignorecase=False)
        expected_info = {"1F23223EFDA": ConanInfo.loads(conan_info)}
        self.assertEqual({conan_reference1: expected_info}, info)

    def remove_test(self):
        # Upload a conans
        conan_reference1 = ConanFileReference.loads("MyFirstConan/1.0.0@private_user/testing")
        self._upload_conan(conan_reference1)
        path1 = self.server.paths.conan(conan_reference1)
        self.assertTrue(os.path.exists(path1))
        # Remove conans and packages
        self.api.remove(conan_reference1)
        self.assertFalse(os.path.exists(path1))

    def remove_packages_test(self):
        conan_ref = ConanFileReference.loads("MySecondConan/2.0.0@private_user/testing")
        self._upload_conan(conan_ref)

        folders = {}
        for sha in ["1", "2", "3", "4", "5"]:
            # Upload an package
            package_ref = PackageReference(conan_ref, sha)
            self._upload_package(package_ref)
            folder = self.server.paths.package(package_ref)
            self.assertTrue(os.path.exists(folder))
            folders[sha] = folder

        self.api.remove_packages(conan_ref, ["1"])
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        self.assertFalse(os.path.exists(folders["1"]))
        self.assertTrue(os.path.exists(folders["2"]))
        self.assertTrue(os.path.exists(folders["3"]))
        self.assertTrue(os.path.exists(folders["4"]))
        self.assertTrue(os.path.exists(folders["5"]))

        self.api.remove_packages(conan_ref, ["2", "3"])
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        self.assertFalse(os.path.exists(folders["1"]))
        self.assertFalse(os.path.exists(folders["2"]))
        self.assertFalse(os.path.exists(folders["3"]))
        self.assertTrue(os.path.exists(folders["4"]))
        self.assertTrue(os.path.exists(folders["5"]))

        self.api.remove_packages(conan_ref)
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        for sha in ["1", "2", "3", "4", "5"]:
            self.assertFalse(os.path.exists(folders[sha]))

    def _upload_package(self, package_reference, base_files=None):

        files = hello_source_files(3, [1, 12])
        if base_files:
            files.update(base_files)
        self.api.upload_package(package_reference, files)

    def _upload_conan(self, conan_reference, base_files=None):

        files = hello_source_files(3, [1, 12])
        if base_files:
            files.update(base_files)
        content = """
from conans import ConanFile

class MyConan(ConanFile):
    name = "%s"
    version = "%s"
    settings = arch, compiler, os
""" % (conan_reference.name, conan_reference.version)
        files[CONANFILE] = content
        files_md5s = {filename: md5(content) for filename, content in files.iteritems()}
        conan_digest = FileTreeManifest(123123123, files_md5s)
        files[CONAN_MANIFEST] = str(conan_digest)

        self.api.upload_conan(conan_reference, files)
Example #6
0
class RestApiTest(unittest.TestCase):
    def setUp(self):
        self.server = TestServerLauncher()
        self.server.start()
        self.api = RestApiClient(ConanOutput(sys.stdout, Color),
                                 requester=requests)
        self.api.remote_url = "http://*****:*****@private_user/testing")
        self._upload_conan(conan_reference)

        # Get the conans
        conan = self.api.get_conan(conan_reference)
        self.assertIsNotNone(conan)
        self.assertIn(CONANFILE, conan)
        self.assertIn(CONAN_MANIFEST, conan)

    def get_conan_digest_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads(
            "conan2/1.0.0@private_user/testing")
        self._upload_conan(conan_reference)

        # Get the conans digest
        digest = self.api.get_conan_digest(conan_reference)
        self.assertEquals(digest.sha, "thesha")
        self.assertEquals(digest.time, 123123123)

    def get_package_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads(
            "conan3/1.0.0@private_user/testing")
        self._upload_conan(conan_reference)

        # Upload an package
        package_reference = PackageReference(conan_reference, "1F23223EFDA")
        self._upload_package(package_reference)

        # Get the package
        package = self.api.get_package(package_reference)
        self.assertIsNotNone(package)
        self.assertIn("hello.cpp", package)

    def upload_huge_conan_test(self):
        # Upload a conans
        conan_reference = ConanFileReference.loads(
            "conanhuge/1.0.0@private_user/testing")
        files = {"file%s.cpp" % name: "File conent" for name in range(1000)}
        self._upload_conan(conan_reference, files)

        # Get the conans
        pack = self.api.get_conan(conan_reference)
        self.assertIsNotNone(pack)
        self.assertIn("file999.cpp", pack)

    def search_test(self):
        # Upload a conan1
        conan_name1 = "HelloOnly/0.10@private_user/testing"
        conan_reference1 = ConanFileReference.loads(conan_name1)
        self._upload_conan(conan_reference1)

        # Upload an package
        conan_info = """[settings]
    arch: x86_64
    compiler: gcc
    os: Linux
[options]
    386: False
[requires]
    Hello
    Bye/2.9
    Say/2.1@user/testing
    Chat/2.1@user/testing:SHA_ABC
"""
        package_reference = PackageReference(conan_reference1, "1F23223EFDA")
        self._upload_package(package_reference, {CONANINFO: conan_info})

        # Upload a conan2
        conan_name2 = "helloonlyToo/2.1@private_user/stable"
        conan_reference2 = ConanFileReference.loads(conan_name2)
        self._upload_conan(conan_reference2)

        # Get the info about this ConanFileReference
        info = self.api.search("helloonly*")
        expected_info1 = {"1F23223EFDA": ConanInfo.loads(conan_info)}
        expected_info2 = {}
        self.assertEqual(expected_info1, info[conan_reference1])
        self.assertEqual(expected_info2, info[conan_reference2])

        # Get the info about this ConanFileReference
        info = self.api.search("HelloOnly*", ignorecase=False)
        expected_info = {"1F23223EFDA": ConanInfo.loads(conan_info)}
        self.assertEqual({conan_reference1: expected_info}, info)

    def remove_test(self):
        # Upload a conans
        conan_reference1 = ConanFileReference.loads(
            "MyFirstConan/1.0.0@private_user/testing")
        self._upload_conan(conan_reference1)
        path1 = self.server.paths.conan(conan_reference1)
        self.assertTrue(os.path.exists(path1))
        # Remove conans and packages
        self.api.remove(conan_reference1)
        self.assertFalse(os.path.exists(path1))

    def remove_packages_test(self):
        conan_ref = ConanFileReference.loads(
            "MySecondConan/2.0.0@private_user/testing")
        self._upload_conan(conan_ref)

        folders = {}
        for sha in ["1", "2", "3", "4", "5"]:
            # Upload an package
            package_ref = PackageReference(conan_ref, sha)
            self._upload_package(package_ref)
            folder = self.server.paths.package(package_ref)
            self.assertTrue(os.path.exists(folder))
            folders[sha] = folder

        self.api.remove_packages(conan_ref, ["1"])
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        self.assertFalse(os.path.exists(folders["1"]))
        self.assertTrue(os.path.exists(folders["2"]))
        self.assertTrue(os.path.exists(folders["3"]))
        self.assertTrue(os.path.exists(folders["4"]))
        self.assertTrue(os.path.exists(folders["5"]))

        self.api.remove_packages(conan_ref, ["2", "3"])
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        self.assertFalse(os.path.exists(folders["1"]))
        self.assertFalse(os.path.exists(folders["2"]))
        self.assertFalse(os.path.exists(folders["3"]))
        self.assertTrue(os.path.exists(folders["4"]))
        self.assertTrue(os.path.exists(folders["5"]))

        self.api.remove_packages(conan_ref)
        self.assertTrue(os.path.exists(self.server.paths.conan(conan_ref)))
        for sha in ["1", "2", "3", "4", "5"]:
            self.assertFalse(os.path.exists(folders[sha]))

    def _upload_package(self, package_reference, base_files=None):

        files = hello_source_files(3, [1, 12])
        if base_files:
            files.update(base_files)
        self.api.upload_package(package_reference, files)

    def _upload_conan(self, conan_reference, base_files=None):

        files = hello_source_files(3, [1, 12])
        if base_files:
            files.update(base_files)
        content = """
from conans import ConanFile

class MyConan(ConanFile):
    name = "%s"
    version = "%s"
    settings = arch, compiler, os
""" % (conan_reference.name, conan_reference.version)
        files[CONANFILE] = content
        files_md5s = {
            filename: md5(content)
            for filename, content in files.items()
        }
        conan_digest = FileTreeManifest(123123123, files_md5s)
        files[CONAN_MANIFEST] = str(conan_digest)

        self.api.upload_conan(conan_reference, files)