Bazel-如何获得一个简短但密封的测试温度目录?

Bazel-如何获得一个简短但密封的测试温度目录?,bazel,Bazel,我有一个测试,它试图启动一个嵌入式mysql。 它尝试将套接字文件写入Files.createTempFile(null,.sock”),返回时出现以下错误: mysql启动失败,错误:[错误]套接字文件路径太长(>103):/private/var/tmp/_bazel_user/1c8ed8d84f6cb79483aa3cc4da758c86/bazel sandbox/247811212867584790357/execroot/some_workspace/_tmp/dfebe48cda

我有一个测试,它试图启动一个嵌入式mysql。
它尝试将套接字文件写入
Files.createTempFile(null,.sock”)
,返回时出现以下错误:
mysql启动失败,错误:[错误]套接字文件路径太长(>103):/private/var/tmp/_bazel_user/1c8ed8d84f6cb79483aa3cc4da758c86/bazel sandbox/247811212867584790357/execroot/some_workspace/_tmp/dfebe48cda4dfdc8739653efedfa4933/394798020705754292.sock
我通过使用
jvm\u标志将javatemp dir重新指向
/tmp
解决了这个问题,但是当我尝试使用沙盒时,这不起作用,因为我猜测试不允许在那里写入

我尝试过从java代码(比如so
Files.createSymbolicLink(path.get(“/tmp/foo”)、path.get(System.getProperty(“java.io.tmpdir”)))
中设置符号链接,但这似乎没有帮助

我也尝试过设置
输出\u base
,但也没有帮助


我非常感谢指针和提示,因为我目前无法在sandbox下运行测试,因此无法并行化它们。

我认为您将Java重新指向/tmp的方法应该可以工作。macOS sandbox始终允许写入多个目录和/tmp和/private/tmp。我试图用genrule:
gen重现失败规则(name=“write_to_tmp”,outs=[“out.txt]”,cmd=“touch/tmp/something.sock&&touch$@”)
,它工作正常并创建文件/tmp/something.sock

我认为一般来说,使用
/tmp
应该可以很好地工作,尽管在macOS上似乎有点不寻常。
$TMPDIR
被操作系统设置为一个用户特定的文件夹,在/var/folders下面有一个随机名称,并且似乎普遍鼓励使用该文件夹而不是/tmp。但是如果你知道你在做什么,我看不到真正的问题问题


请注意,我们在macOS上没有可用的tmpfs或类似机制,因此我们无法自动保证您通过actions对可写文件夹(如
/tmp
)的使用是密封的,在运行之间不会泄漏状态,或者文件名不会冲突。请确保通过
mkstemp
或类似方式以安全的方式生成文件名。

在bazel测试中,可以将
test\u TMPDIR
环境变量用于测试专用可写区域


参见

@PhilippWollermann谢谢!你说得对……问题似乎不同。一般来说,你认为使用/tmp有效吗?它太长了。这就是我开始的