diff options
Diffstat (limited to 'scripts/Component.py')
-rw-r--r-- | scripts/Component.py | 268 |
1 files changed, 268 insertions, 0 deletions
diff --git a/scripts/Component.py b/scripts/Component.py new file mode 100644 index 00000000000..92fe6b81805 --- /dev/null +++ b/scripts/Component.py @@ -0,0 +1,268 @@ +# ********************************************************************** +# +# Copyright (c) 2003-2018 ZeroC, Inc. All rights reserved. +# +# This copy of Ice is licensed to you under the terms described in the +# ICE_LICENSE file included in this distribution. +# +# ********************************************************************** + +import os + +from Util import * + +class Ice(Component): + + # All option values for Ice/IceBox tests. + coreOptions = { + "protocol" : ["tcp", "ssl", "wss", "ws"], + "compress" : [False, True], + "ipv6" : [False, True], + "serialize" : [False, True], + "mx" : [False, True], + } + + # All option values for IceGrid/IceStorm/Glacier2/IceDiscovery tests. + serviceOptions = { + "protocol" : ["tcp", "wss"], + "compress" : [False, True], + "ipv6" : [False, True], + "serialize" : [False, True], + "mx" : [False, True], + } + + def __init__(self): + self.nugetVersion = None + + def useBinDist(self, mapping, current): + return Component._useBinDist(self, mapping, current, "ICE_BIN_DIST") + + def getInstallDir(self, mapping, current): + return Component._getInstallDir(self, mapping, current, "ICE_HOME") + + def getPhpExtension(self, mapping, current): + if isinstance(platform, Windows): + return "php_ice.dll" if current.driver.configs[mapping].buildConfig in ["Debug", "Release"] else "php_ice_nts.dll" + else: + return "ice.so" + + def getNugetPackage(self, mapping, compiler=None): + if isinstance(mapping, CSharpMapping): + return "zeroc.ice.net" + else: + return "zeroc.ice.{0}".format(compiler) + + def getNugetPackageVersion(self, mapping): + if not self.nugetVersion: + if isinstance(mapping, CSharpMapping): + with open(os.path.join(toplevel, "csharp", "msbuild", "zeroc.ice.net.nuspec"), "r") as configFile: + self.nugetVersion = re.search("<version>(.*)</version>", configFile.read()).group(1) + else: + with open(os.path.join(toplevel, "config", "icebuilder.props"), "r") as configFile: + self.nugetVersion = re.search("<IceJSONVersion>(.*)</IceJSONVersion>", configFile.read()).group(1) + return self.nugetVersion + + def getFilters(self, mapping, config): + if "xcodesdk" in config.buildConfig: + return (["Ice/.*", "IceSSL/configuration"], + ["Ice/background", + "Ice/echo", + "Ice/faultTolerance", + "Ice/gc", + "Ice/library", + "Ice/logger", + "Ice/properties", + "Ice/plugin", + "Ice/stringConverter", + "Ice/threadPoolPriority", + "Ice/udp"]) + elif "static" in config.buildConfig: + return (["Ice/.*", "IceSSL/configuration", "IceDiscovery/simple", "IceGrid/simple", "Glacier2/application"], + ["Ice/library", "Ice/plugin"]) + elif config.uwp: + return (["Ice/.*", "IceSSL/configuration"], + ["Ice/background", + "Ice/echo", + "Ice/faultTolerance", + "Ice/gc", + "Ice/library", + "Ice/logger", + "Ice/networkProxy", # SOCKS proxy not supported with UWP + "Ice/properties", # Property files are not supported with UWP + "Ice/plugin", + "Ice/threadPoolPriority"]) + elif isinstance(platform, Windows) and platform.getCompiler() in ["VC100"]: + return (["Ice/.*", "IceSSL/.*", "IceBox/.*", "IceDiscovery/.*", "IceUtil/.*", "Slice/.*"], []) + elif isinstance(mapping, AndroidMappingMixin): + return (["Ice/.*"], + ["Ice/hash", + "Ice/faultTolerance", + "Ice/metrics", + "Ice/networkProxy", + "Ice/throughput", + "Ice/plugin", + "Ice/logger", + "Ice/properties"]) + return ([], []) + + def canRun(self, testId, mapping, current): + parent = re.match(r'^([\w]*).*', testId).group(1) + if isinstance(platform, Linux): + if self.linuxId in ["centos", "rhel", "fedora"] and current.config.buildPlatform == "x86": + # + # Don't test Glacier2/IceStorm/IceGrid services with multilib platforms. We only + # build services for the native platform. + # + if parent in ["Glacier2", "IceStorm", "IceGrid"]: + return False + elif isinstance(platform, Linux): + # + # On Windows, if testing with a binary distribution, don't test Glacier2/IceBridge services + # with the Debug configurations since we don't provide binaries for them. + # + if self.useBinDist(mapping, current): + if parent in ["Glacier2", "IceBridge"] and current.config.buildConfig.find("Debug") >= 0: + return False + + # No C++11 tests for IceStorm, IceGrid, etc + if isinstance(mapping, CppMapping) and current.config.cpp11: + if parent in ["IceStorm", "IceBridge"]: + return False + elif parent in ["IceGrid"] and testId not in ["IceGrid/simple"]: + return False + elif parent in ["Glacier2"] and testId not in ["Glacier2/application", "Glacier2/sessionHelper"]: + return False + + if isinstance(mapping, CSharpMapping) and current.config.netframework: + # + # The following tests require multicast, on Unix platforms it's currently only supported + # with IPv4 due to .NET Core bug https://github.com/dotnet/corefx/issues/25525 + # + if not isinstance(platform, Windows) and current.config.ipv6 and testId in ["Ice/udp", + "IceDiscovery/simple", + "IceGrid/simple"]: + return False + + if isinstance(platform, Darwin): + if parent in ["IceSSL", "IceDiscovery"]: + return False + + # TODO: Remove once https://github.com/dotnet/corefx/issues/28759 is fixed + if testId == "Ice/adapterDeactivation" and current.config.protocol in ["ssl", "wss"]: + return False + + return True + + def isMainThreadOnly(self, testId): + return testId.startswith("IceStorm") # TODO: WORKAROUND for ICE-8175 + + def getDefaultProcesses(self, mapping, processType, testId): + if testId.startswith("IceUtil") or testId.startswith("Slice"): + return [SimpleClient()] + elif testId.startswith("IceGrid"): + if processType in ["client", "collocated"]: + return [IceGridClient()] + if processType in ["server", "serveramd"]: + return [IceGridServer()] + + def getOptions(self, testcase, current): + parent = re.match(r'^([\w]*).*', testcase.getTestSuite().getId()).group(1) + if isinstance(testcase, ClientServerTestCase) and parent in ["Ice", "IceBox"]: + return self.coreOptions + elif parent in ["IceGrid", "Glacier2", "IceStorm", "IceDiscovery", "IceBridge"]: + return self.serviceOptions + + def getRunOrder(self): + return ["Slice", "IceUtil", "Ice", "IceSSL", "IceBox", "Glacier2", "IceGrid", "IceStorm"] + + def isCross(self, testId): + return testId in [ + "Ice/ami", + "Ice/info", + "Ice/exceptions", + "Ice/enums", + "Ice/facets", + "Ice/inheritance", + "Ice/invoke", + "Ice/objects", + "Ice/operations", + "Ice/proxy", + "Ice/servantLocator", + "Ice/slicing/exceptions", + "Ice/slicing/objects", + "Ice/optional" + ] + + def getSoVersion(self): + config = open(os.path.join(toplevel, "cpp", "include", "IceUtil", "Config.h"), "r") + intVersion = int(re.search("ICE_INT_VERSION ([0-9]*)", config.read()).group(1)) + majorVersion = int(intVersion / 10000) + minorVersion = int(intVersion / 100) - 100 * majorVersion + patchVersion = intVersion % 100 + if patchVersion < 50: + return '%d' % (majorVersion * 10 + minorVersion) + elif patchVersion < 60: + return '%da%d' % (majorVersion * 10 + minorVersion, patchVersion - 50) + else: + return '%db%d' % (majorVersion * 10 + minorVersion, patchVersion - 60) + +component = Ice() + +from Glacier2Util import * +from IceBoxUtil import * +from IceBridgeUtil import * +from IcePatch2Util import * +from IceGridUtil import * +from IceStormUtil import * + +# +# Supported mappings +# +for m in filter(lambda x: os.path.isdir(os.path.join(toplevel, x)), os.listdir(toplevel)): + if m == "cpp" or re.match("cpp-.*", m): + Mapping.add(m, CppMapping()) + elif m == "java-compat" or re.match("java-compat-.*", m): + Mapping.add(m, JavaCompatMapping()) + elif m == "java" or re.match("java-.*", m): + Mapping.add(m, JavaMapping()) + elif m == "python" or re.match("python-.*", m): + Mapping.add(m, PythonMapping()) + elif m == "ruby" or re.match("ruby-.*", m): + Mapping.add(m, RubyMapping()) + elif m == "php" or re.match("php-.*", m): + Mapping.add(m, PhpMapping()) + elif m == "js" or re.match("js-.*", m): + Mapping.add(m, JavaScriptMapping()) + elif m == "objective-c" or re.match("objective-c-*", m): + Mapping.add(m, ObjCMapping()) + elif m == "csharp" or re.match("charp-.*", m): + Mapping.add("csharp", CSharpMapping()) + +if isinstance(platform, Windows): + # Windows doesn't support all the mappings, we take them out here. + Mapping.remove("ruby") + if platform.getCompiler() != "VC140": + Mapping.remove("python") + Mapping.remove("php") +elif not platform.hasDotNet(): + # Remove C# if Dot Net Core isn't supported + Mapping.remove("csharp", CSharpMapping()) + +# +# Check if the Android SDK is installed and eventually add the Android mappings +# +try: + run("adb version") + Mapping.add(os.path.join("java-compat", "android"), AndroidCompatMapping()) + Mapping.add(os.path.join("java", "android"), AndroidMapping()) +except: + pass + +# +# Check if Matlab is installed and eventually add the Matlab mapping +# +try: + run("where matlab" if isinstance(platform, Windows) else "which matlab") + Mapping.add("matlab", MatlabMapping()) +except: + pass |