From d02a6cfeaafb9345062c6da9b9c6ef95f1f17829 Mon Sep 17 00:00:00 2001 From: xiedeyantu Date: Sun, 8 Feb 2026 10:16:38 +0800 Subject: [PATCH] [CALCITE-7412] Redis test failed on higher versions of macOS --- redis/build.gradle.kts | 1 + .../java/redis/embedded/util/JarUtil.java | 50 +++++++++++++++++++ .../redis/embedded/util/package-info.java | 21 ++++++++ 3 files changed, 72 insertions(+) create mode 100644 redis/src/main/java/redis/embedded/util/JarUtil.java create mode 100644 redis/src/main/java/redis/embedded/util/package-info.java diff --git a/redis/build.gradle.kts b/redis/build.gradle.kts index 80e24755d953..0cbc43112fe4 100644 --- a/redis/build.gradle.kts +++ b/redis/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { implementation("com.fasterxml.jackson.core:jackson-core") implementation("com.fasterxml.jackson.core:jackson-databind") implementation("com.google.guava:guava") + implementation("commons-io:commons-io") implementation("org.apache.calcite.avatica:avatica-core") implementation("org.apache.commons:commons-lang3") implementation("org.apache.commons:commons-pool2") diff --git a/redis/src/main/java/redis/embedded/util/JarUtil.java b/redis/src/main/java/redis/embedded/util/JarUtil.java new file mode 100644 index 000000000000..9e8896ee10d5 --- /dev/null +++ b/redis/src/main/java/redis/embedded/util/JarUtil.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package redis.embedded.util; + +import org.apache.commons.io.FileUtils; + +import com.google.common.io.Resources; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; + +/** Utility class for extracting executables from JAR files. */ +public class JarUtil { + + private JarUtil() { + // Utility class should not be instantiated + } + + public static File extractExecutableFromJar(String executable) throws IOException { + File tmpDir = Files.createTempDirectory("redis-").toFile(); + tmpDir.deleteOnExit(); + + // On newer versions of macOS, the temporary directory /var/folders does not + // support executing binary files with a .app extension, which prevents Redis + // from starting. To ensure Redis runs correctly, the redis-server binary is + // uniformly renamed to redis-server. + String executableName = "redis-server"; + File command = new File(tmpDir, executableName); + FileUtils.copyURLToFile(Resources.getResource(executable), command); + command.deleteOnExit(); + command.setExecutable(true); + + return command; + } +} diff --git a/redis/src/main/java/redis/embedded/util/package-info.java b/redis/src/main/java/redis/embedded/util/package-info.java new file mode 100644 index 000000000000..5e31ad3901b5 --- /dev/null +++ b/redis/src/main/java/redis/embedded/util/package-info.java @@ -0,0 +1,21 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Utility classes for embedded Redis. + */ +package redis.embedded.util;