def pic_client_certs_test(self): class MyRequester(object): def __init__(*args, **kwargs): pass def get(self, _, **kwargs): return kwargs.get("cert", None) client = TestClient(requester_class=MyRequester) self.assertIsNone(client.requester.get("url")) tools.save(client.cache.client_cert_path, "Fake cert") client.init_dynamic_vars() self.assertEqual(client.requester.get("url"), client.cache.client_cert_path) tools.save(client.cache.client_cert_path, "Fake cert") tools.save(client.cache.client_cert_key_path, "Fake key") client.init_dynamic_vars() self.assertEqual( client.requester.get("url"), (client.cache.client_cert_path, client.cache.client_cert_key_path)) # assert that the cacert file is created self.assertTrue(os.path.exists(client.cache.cacert_path))
def no_request_timeout_test(self): # Test that not having timeout works client = TestClient(requester_class=MyRequester) conf = """ [general] """ save(client.client_cache.conan_conf_path, conf) client.init_dynamic_vars() self.assertEquals(client.requester.get("MyUrl"), "NOT SPECIFIED")
def cmake_multi_find_test(self): if platform.system() not in ["Windows", "Linux"]: return client = TestClient() conanfile = """from conans import ConanFile, CMake class HelloConan(ConanFile): name = "Hello" version = "0.1" settings = "build_type" exports = '*' def package(self): self.copy(pattern="*", src="%s" % self.settings.build_type) """ client.save({"conanfile.py": conanfile, "Debug/FindHello.cmake": 'message(STATUS "FIND HELLO DEBUG!")', "Release/FindHello.cmake": 'message(STATUS "FIND HELLO RELEASE!")'}) client.run("export . lasote/testing") cmake = """set(CMAKE_CXX_COMPILER_WORKS 1) project(MyHello CXX) cmake_minimum_required(VERSION 2.8) include(conanbuildinfo_multi.cmake) conan_basic_setup() find_package(Hello) """ conanfile = """from conans import ConanFile, CMake class HelloConan(ConanFile): requires = "Hello/0.1@lasote/testing" settings = "build_type" generators = "cmake_multi" """ client.save({"conanfile.py": conanfile, "CMakeLists.txt": cmake}, clean_first=True) client.run("install . --build=missing ") client.run("install . -s build_type=Debug --build=missing ") with tools.remove_from_path("sh"): generator = "MinGW Makefiles" if platform.system() == "Windows" else "Unix Makefiles" client.runner('cmake . -G "%s" -DCMAKE_BUILD_TYPE=Debug' % generator, cwd=client.current_folder) self.assertIn("FIND HELLO DEBUG!", client.user_io.out) self.assertNotIn("FIND HELLO RELEASE!", client.user_io.out) client.init_dynamic_vars() # to reset output client.runner('cmake . -G "%s" -DCMAKE_BUILD_TYPE=Release' % generator, cwd=client.current_folder) self.assertIn("FIND HELLO RELEASE!", client.user_io.out) self.assertNotIn("FIND HELLO DEBUG!", client.user_io.out)
def cmake_multi_find_test(self): if platform.system() not in ["Windows", "Linux"]: return client = TestClient() conanfile = """from conans import ConanFile, CMake class HelloConan(ConanFile): name = "Hello" version = "0.1" settings = "build_type" exports = '*' def package(self): self.copy(pattern="*", src="%s" % self.settings.build_type) """ client.save({"conanfile.py": conanfile, "Debug/FindHello.cmake": 'message(STATUS "FIND HELLO DEBUG!")', "Release/FindHello.cmake": 'message(STATUS "FIND HELLO RELEASE!")'}) client.run("export . lasote/testing") cmake = """set(CMAKE_CXX_COMPILER_WORKS 1) project(MyHello CXX) cmake_minimum_required(VERSION 2.8) include(conanbuildinfo_multi.cmake) conan_basic_setup() find_package(Hello) """ conanfile = """from conans import ConanFile, CMake class HelloConan(ConanFile): requires = "Hello/0.1@lasote/testing" settings = "build_type" generators = "cmake_multi" """ client.save({"conanfile.py": conanfile, "CMakeLists.txt": cmake}, clean_first=True) client.run("install . --build=missing ") client.run("install . -s build_type=Debug --build=missing ") with clean_sh_from_path(): generator = "MinGW Makefiles" if platform.system() == "Windows" else "Unix Makefiles" client.runner('cmake . -G "%s" -DCMAKE_BUILD_TYPE=Debug' % generator, cwd=client.current_folder) self.assertIn("FIND HELLO DEBUG!", client.user_io.out) self.assertNotIn("FIND HELLO RELEASE!", client.user_io.out) client.init_dynamic_vars() # to reset output client.runner('cmake . -G "%s" -DCMAKE_BUILD_TYPE=Release' % generator, cwd=client.current_folder) self.assertIn("FIND HELLO RELEASE!", client.user_io.out) self.assertNotIn("FIND HELLO DEBUG!", client.user_io.out)
def requester_timeout_test(self): client = TestClient(requester_class=MyRequester) conf = """ [general] request_timeout=2 """ save(client.client_cache.conan_conf_path, conf) client.init_dynamic_vars() self.assertEquals(client.requester.get("MyUrl"), 2.0) with tools.environment_append({"CONAN_REQUEST_TIMEOUT": "4.3"}): client = TestClient(requester_class=MyRequester) client.init_dynamic_vars() self.assertEquals(client.requester.get("MyUrl"), 4.3)
def new_proxy_exclude_test(self): class MyRequester(object): def __init__(self, *args, **kwargs): pass def get(self, _, **kwargs): return "excluded!" if "proxies" not in kwargs else "not excluded!" client = TestClient(requester_class=MyRequester) conf = """ [proxies] https=None no_proxy_match=MyExcludedUrl*, *otherexcluded_one* http=http://conan.url """ save(client.cache.conan_conf_path, conf) client.init_dynamic_vars() self.assertEqual(client.requester.get("MyUrl"), "not excluded!") self.assertEqual(client.requester.get("**otherexcluded_one***"), "excluded!") self.assertEqual(client.requester.get("MyExcludedUrl***"), "excluded!") self.assertEqual(client.requester.get("**MyExcludedUrl***"), "not excluded!")
def new_proxy_exclude_test(self): class MyRequester(object): def __init__(*args, **kwargs): pass def get(self, _, **kwargs): return "excluded!" if "proxies" not in kwargs else "not excluded!" client = TestClient(requester_class=MyRequester) conf = """ [proxies] https=None no_proxy_match=MyExcludedUrl*, *otherexcluded_one* http=http://conan.url """ save(client.client_cache.conan_conf_path, conf) client.init_dynamic_vars() self.assertEquals(client.requester.get("MyUrl"), "not excluded!") self.assertEquals(client.requester.get("**otherexcluded_one***"), "excluded!") self.assertEquals(client.requester.get("MyExcludedUrl***"), "excluded!") self.assertEquals(client.requester.get("**MyExcludedUrl***"), "not excluded!")
def complete_test(self): """ basic installation of a new conans """ client = TestClient() client.init_dynamic_vars() files = hello_source_files() conan_ref = ConanFileReference.loads("Hello/1.2.1/frodo/stable") reg_folder = client.paths.export(conan_ref) client.save(files, path=reg_folder) client.save( { CONANFILE: myconan1, CONANINFO: "//empty", "include/no_copy/lib0.h": "NO copy", "include/math/lib1.h": "copy", "include/math/lib2.h": "copy", "include/physics/lib.hpp": "copy", "my_lib/debug/libd.a": "copy", "my_data/readme.txt": "copy", "my_data/readme.md": "NO copy", "contrib/math/math.h": "copy", "contrib/physics/gravity.h": "copy", "contrib/contrib.h": "copy", "include/opencv/opencv.hpp": "copy", "include/opencv2/opencv2.hpp": "copy", "modules/simu/src/simu.cpp": "NO copy", "modules/simu/include/opencv2/simu/simu.hpp": "copy", "modules/3D/doc/readme.md": "NO copy", "modules/3D/include/opencv2/3D/3D.hpp": "copy", "modules/dev/src/dev.cpp": "NO copy", "modules/dev/include/opencv2/dev/dev.hpp": "copy", "modules/opencv_mod.hpp": "copy" }, path=reg_folder) conanfile_path = os.path.join(reg_folder, CONANFILE) package_ref = PackageReference(conan_ref, "myfakeid") build_folder = client.paths.build(package_ref) package_folder = client.paths.package(package_ref) shutil.copytree(reg_folder, build_folder) output = ScopedOutput("", TestBufferConanOutput()) loader = ConanFileLoader(None, Settings(), Profile()) conanfile = loader.load_conan(conanfile_path, None) create_package(conanfile, build_folder, build_folder, package_folder, output, copy_info=True) # test build folder self.assertTrue(os.path.exists(build_folder)) self.assertTrue(os.path.exists(os.path.join(package_folder, CONANINFO))) # test pack folder self.assertTrue(os.path.exists(package_folder)) def exist(rel_path): return os.path.exists(os.path.join(package_folder, rel_path)) # Expected files self.assertTrue(exist("include/lib1.h")) self.assertTrue(exist("include/lib2.h")) self.assertTrue(exist("include/physics/lib.hpp")) self.assertTrue(exist("include/contrib/math/math.h")) self.assertTrue(exist("include/contrib/physics/gravity.h")) self.assertTrue(exist("include/contrib/contrib.h")) self.assertTrue(exist("include/opencv/opencv.hpp")) self.assertTrue(exist("include/opencv2/opencv2.hpp")) self.assertTrue(exist("include/opencv2/simu/simu.hpp")) self.assertTrue(exist("include/opencv2/3D/3D.hpp")) self.assertTrue(exist("include/opencv2/dev/dev.hpp")) self.assertTrue(exist("lib/my_lib/libd.a")) self.assertTrue(exist("res/shares/readme.txt")) # Not expected files self.assertFalse(exist("include/opencv2/opencv_mod.hpp")) self.assertFalse(exist("include/opencv2/simu.hpp")) self.assertFalse(exist("include/opencv2/3D.hpp")) self.assertFalse(exist("include/opencv2/dev.hpp")) self.assertFalse(exist("include/modules/simu/src/simu.cpp")) self.assertFalse(exist("include/modules/3D/doc/readme.md")) self.assertFalse(exist("include/modules/dev/src/dev.cpp")) self.assertFalse(exist("include/opencv2/opencv_mod.hpp")) self.assertFalse(exist("include/include/no_copy/lib0.h")) self.assertFalse(exist("res/my_data/readme.md"))
def complete_multi_conf_build_test(self): client = TestClient() def files(name, depend=None): includes = ('#include "hello%s.h"' % depend) if depend else "" calls = ('hello%s();' % depend) if depend else "" deps = ('"Hello%s/0.1@lasote/stable"' % depend) if depend else "None" return { "conanfile.py": conanfile_build.format(deps=deps, name=name), "src/hello%s.h" % name: hello_h.format(name=name), "src/hello.cpp": hello_cpp.format(name=name, includes=includes, calls=calls), "src/CMakeLists.txt": cmake_multi.format(name=name) } client.save(files("C"), path=os.path.join(client.current_folder, "C")) client.save(files("B", "C"), path=os.path.join(client.current_folder, "B")) a = files("A", "B") a["src/CMakeLists.txt"] += ("add_executable(app main.cpp)\n" "target_link_libraries(app helloA)\n") a["src/main.cpp"] = main_cpp client.save(a, path=os.path.join(client.current_folder, "A")) project = dedent(""" editables: HelloB/0.1@lasote/stable: path: B HelloC/0.1@lasote/stable: path: C HelloA/0.1@lasote/stable: path: A layout: layout workspace_generator: cmake root: HelloA/0.1@lasote/stable """) layout = dedent(""" [build_folder] build [source_folder] src [includedirs] src [libdirs] build/{{settings.build_type}} """) metacmake = dedent(""" cmake_minimum_required(VERSION 3.3) project(MyProject CXX) include(${CMAKE_BINARY_DIR}/conanworkspace.cmake) conan_workspace_subdirectories() """) client.save({ "conanws.yml": project, "layout": layout, "CMakeLists.txt": metacmake }) build = os.path.join(client.current_folder, "build") with client.chdir("build"): client.run("workspace install ../conanws.yml") client.run("workspace install ../conanws.yml -s build_type=Debug") client.init_dynamic_vars() generator = "Visual Studio 15 Win64" client.runner('cmake .. -G "%s" -DCMAKE_BUILD_TYPE=Release' % generator, cwd=build) client.runner('cmake --build . --config Release', cwd=build) cmd_release = os.path.normpath("./A/build/Release/app") cmd_debug = os.path.normpath("./A/build/Debug/app") client.runner(cmd_release, cwd=client.current_folder) self.assertIn("Hello World C Release!", client.out) self.assertIn("Hello World B Release!", client.out) self.assertIn("Hello World A Release!", client.out) tools.replace_in_file(os.path.join(client.current_folder, "C/src/hello.cpp"), "Hello World", "Bye Moon", output=client.out) client.runner('cmake --build . --config Release', cwd=build) client.runner(cmd_release, cwd=client.current_folder) self.assertIn("Bye Moon C Release!", client.out) self.assertIn("Hello World B Release!", client.out) self.assertIn("Hello World A Release!", client.out) tools.replace_in_file(os.path.join(client.current_folder, "B/src/hello.cpp"), "Hello World", "Bye Moon", output=client.out) client.runner('cmake --build . --config Release', cwd=build) client.runner(cmd_release, cwd=client.current_folder) self.assertIn("Bye Moon C Release!", client.out) self.assertIn("Bye Moon B Release!", client.out) self.assertIn("Hello World A Release!", client.out) self.assertNotIn("Debug", client.out) client.runner('cmake .. -G "%s" -DCMAKE_BUILD_TYPE=Debug' % generator, cwd=build) # CMake configure will find the Release libraries, as we are in cmake-multi mode # Need to reset the output after that client.init_dynamic_vars() # Reset output client.runner('cmake --build . --config Debug', cwd=build) client.runner(cmd_debug, cwd=client.current_folder) self.assertIn("Bye Moon C Debug!", client.out) self.assertIn("Bye Moon B Debug!", client.out) self.assertIn("Hello World A Debug!", client.out) tools.replace_in_file(os.path.join(client.current_folder, "C/src/hello.cpp"), "Bye Moon", "Hello World", output=client.out) client.runner('cmake --build . --config Debug', cwd=build) client.runner(cmd_debug, cwd=client.current_folder) self.assertIn("Hello World C Debug!", client.out) self.assertIn("Bye Moon B Debug!", client.out) self.assertIn("Hello World A Debug!", client.out) self.assertNotIn("Release", client.out)
def complete_test(self): """ basic installation of a new conans """ servers = {} # All can write (for avoid authentication until we mock user_io) test_server = TestServer([("*/*@*/*", "*")], [("*/*@*/*", "*")]) servers["default"] = test_server conan_digest = FileTreeManifest(123123123, {}) client = TestClient(servers=servers) client.init_dynamic_vars() conan_ref = ConanFileReference.loads("Hello/1.2.1@frodo/stable") reg_folder = client.paths.export(conan_ref) files = hello_source_files() client.save(files, path=reg_folder) client.save( { CONANFILE: myconan1, CONAN_MANIFEST: str(conan_digest), "include/math/lib1.h": "//copy", "my_lib/debug/libd.a": "//copy", "my_data/readme.txt": "//copy" }, path=reg_folder) exports_sources_dir = client.paths.export_sources(conan_ref) os.makedirs(exports_sources_dir) package_ref = PackageReference(conan_ref, "fakeid") package_folder = client.paths.package(package_ref) save(os.path.join(package_folder, CONANINFO), "info") save(os.path.join(package_folder, CONAN_MANIFEST), "manifest") save(os.path.join(package_folder, "include", "lib1.h"), "//header") save(os.path.join(package_folder, "lib", "my_lib", "libd.a"), "//lib") save(os.path.join(package_folder, "res", "shares", "readme.txt"), "//res") digest_path = client.client_cache.digestfile_package(package_ref) expected_manifest = FileTreeManifest.create( os.path.dirname(digest_path)) save(os.path.join(package_folder, CONAN_MANIFEST), str(expected_manifest)) client.run("upload %s" % str(conan_ref)) client.run("upload %s -p %s" % (str(conan_ref), package_ref.package_id)) client2 = TestClient(servers=servers) client2.init_dynamic_vars() installer = ConanProxy(client2.paths, client2.user_io, client2.remote_manager, "default") installer.get_recipe(conan_ref) installer.get_package(package_ref, short_paths=False) # Check that the output is done in order lines = [ line.strip() for line in str(client2.user_io.out).splitlines() if line.startswith("Downloading") ] self.assertEqual(lines, [ "Downloading conanmanifest.txt", "Downloading conanfile.py", "Downloading conan_export.tgz", "Downloading conanmanifest.txt", "Downloading conaninfo.txt", "Downloading conan_package.tgz" ]) reg_path = client2.paths.export( ConanFileReference.loads("Hello/1.2.1/frodo/stable")) pack_folder = client2.paths.package(package_ref) # Test the file in the downloaded conans files = [ 'CMakeLists.txt', 'my_lib/debug/libd.a', 'hello.cpp', 'hello0.h', CONANFILE, CONAN_MANIFEST, 'main.cpp', 'include/math/lib1.h', 'my_data/readme.txt' ] for _file in files: self.assertTrue(os.path.exists(os.path.join(reg_path, _file))) self.assertTrue(os.path.exists(pack_folder)) # Test the file in the downloaded package self.assertTrue(os.path.exists(pack_folder)) self.assertTrue( os.path.exists(os.path.join(pack_folder, "include", "lib1.h"))) self.assertTrue( os.path.exists(os.path.join(pack_folder, "lib", "my_lib/libd.a"))) self.assertTrue( os.path.exists( os.path.join(pack_folder, "res", "shares/readme.txt")))
def complete_test(self): """ basic installation of a new conans """ servers = {} # All can write (for avoid authentication until we mock user_io) test_server = TestServer([("*/*@*/*", "*")], [("*/*@*/*", "*")]) servers["default"] = test_server conan_digest = FileTreeManifest(123123123, {}) client = TestClient(servers=servers) client.init_dynamic_vars() conan_ref = ConanFileReference.loads("Hello/1.2.1@frodo/stable") reg_folder = client.paths.export(conan_ref) files = hello_source_files() client.save(files, path=reg_folder) client.save({CONANFILE: myconan1, CONAN_MANIFEST: str(conan_digest), "include/math/lib1.h": "//copy", "my_lib/debug/libd.a": "//copy", "my_data/readme.txt": "//copy"}, path=reg_folder) exports_sources_dir = os.path.join(reg_folder, EXPORT_SOURCES_DIR) os.makedirs(exports_sources_dir) package_ref = PackageReference(conan_ref, "fakeid") package_folder = client.paths.package(package_ref) save(os.path.join(package_folder, CONANINFO), "info") save(os.path.join(package_folder, CONAN_MANIFEST), "manifest") save(os.path.join(package_folder, "include", "lib1.h"), "//header") save(os.path.join(package_folder, "lib", "my_lib", "libd.a"), "//lib") save(os.path.join(package_folder, "res", "shares", "readme.txt"), "//res") digest_path = client.client_cache.digestfile_package(package_ref) expected_manifest = FileTreeManifest.create(os.path.dirname(digest_path)) save(os.path.join(package_folder, CONAN_MANIFEST), str(expected_manifest)) client.run("upload %s" % str(conan_ref)) client.run("upload %s -p %s" % (str(conan_ref), package_ref.package_id)) client2 = TestClient(servers=servers) client2.init_dynamic_vars() installer = ConanProxy(client2.paths, client2.user_io, client2.remote_manager, "default") installer.get_recipe(conan_ref) installer.get_package(package_ref, short_paths=False) # Check that the output is done in order lines = [line.strip() for line in str(client2.user_io.out).splitlines() if line.startswith("Downloading")] self.assertEqual(lines, ["Downloading conanmanifest.txt", "Downloading conanfile.py", "Downloading conan_export.tgz", "Downloading conanmanifest.txt", "Downloading conaninfo.txt", "Downloading conan_package.tgz" ]) reg_path = client2.paths.export(ConanFileReference.loads("Hello/1.2.1/frodo/stable")) pack_folder = client2.paths.package(package_ref) # Test the file in the downloaded conans files = ['CMakeLists.txt', 'my_lib/debug/libd.a', 'hello.cpp', 'hello0.h', CONANFILE, CONAN_MANIFEST, 'main.cpp', 'include/math/lib1.h', 'my_data/readme.txt'] for _file in files: self.assertTrue(os.path.exists(os.path.join(reg_path, _file))) self.assertTrue(os.path.exists(pack_folder)) # Test the file in the downloaded package self.assertTrue(os.path.exists(pack_folder)) self.assertTrue(os.path.exists(os.path.join(pack_folder, "include", "lib1.h"))) self.assertTrue(os.path.exists(os.path.join(pack_folder, "lib", "my_lib/libd.a"))) self.assertTrue(os.path.exists(os.path.join(pack_folder, "res", "shares/readme.txt")))
def complete_test(self): """ basic installation of a new conans """ client = TestClient() client.init_dynamic_vars() files = hello_source_files() conan_ref = ConanFileReference.loads("Hello/1.2.1/frodo/stable") reg_folder = client.paths.export(conan_ref) client.save(files, path=reg_folder) client.save({CONANFILE: myconan1, CONANINFO: "//empty", "include/no_copy/lib0.h": "NO copy", "include/math/lib1.h": "copy", "include/math/lib2.h": "copy", "include/physics/lib.hpp": "copy", "my_lib/debug/libd.a": "copy", "my_data/readme.txt": "copy", "my_data/readme.md": "NO copy", "contrib/math/math.h": "copy", "contrib/physics/gravity.h": "copy", "contrib/contrib.h": "copy", "include/opencv/opencv.hpp": "copy", "include/opencv2/opencv2.hpp": "copy", "modules/simu/src/simu.cpp": "NO copy", "modules/simu/include/opencv2/simu/simu.hpp": "copy", "modules/3D/doc/readme.md": "NO copy", "modules/3D/include/opencv2/3D/3D.hpp": "copy", "modules/dev/src/dev.cpp": "NO copy", "modules/dev/include/opencv2/dev/dev.hpp": "copy", "modules/opencv_mod.hpp": "copy"}, path=reg_folder) conanfile_path = os.path.join(reg_folder, CONANFILE) package_ref = PackageReference(conan_ref, "myfakeid") build_folder = client.paths.build(package_ref) package_folder = client.paths.package(package_ref) shutil.copytree(reg_folder, build_folder) loader = ConanFileLoader(None, Settings(), Profile()) conanfile = loader.load_conan(conanfile_path, None) output = ScopedOutput("", TestBufferConanOutput()) create_package(conanfile, build_folder, build_folder, package_folder, output) # test build folder self.assertTrue(os.path.exists(build_folder)) self.assertTrue(os.path.exists(os.path.join(package_folder, CONANINFO))) # test pack folder self.assertTrue(os.path.exists(package_folder)) def exist(rel_path): return os.path.exists(os.path.join(package_folder, rel_path)) # Expected files self.assertTrue(exist("include/lib1.h")) self.assertTrue(exist("include/lib2.h")) self.assertTrue(exist("include/physics/lib.hpp")) self.assertTrue(exist("include/contrib/math/math.h")) self.assertTrue(exist("include/contrib/physics/gravity.h")) self.assertTrue(exist("include/contrib/contrib.h")) self.assertTrue(exist("include/opencv/opencv.hpp")) self.assertTrue(exist("include/opencv2/opencv2.hpp")) self.assertTrue(exist("include/opencv2/simu/simu.hpp")) self.assertTrue(exist("include/opencv2/3D/3D.hpp")) self.assertTrue(exist("include/opencv2/dev/dev.hpp")) self.assertTrue(exist("lib/my_lib/libd.a")) self.assertTrue(exist("res/shares/readme.txt")) # Not expected files self.assertFalse(exist("include/opencv2/opencv_mod.hpp")) self.assertFalse(exist("include/opencv2/simu.hpp")) self.assertFalse(exist("include/opencv2/3D.hpp")) self.assertFalse(exist("include/opencv2/dev.hpp")) self.assertFalse(exist("include/modules/simu/src/simu.cpp")) self.assertFalse(exist("include/modules/3D/doc/readme.md")) self.assertFalse(exist("include/modules/dev/src/dev.cpp")) self.assertFalse(exist("include/opencv2/opencv_mod.hpp")) self.assertFalse(exist("include/include/no_copy/lib0.h")) self.assertFalse(exist("res/my_data/readme.md"))