我有一个试图启动嵌入式mysql的测试
它尝试将套接字文件写入Files.createTempFile(null, ".sock")
,返回时出现以下错误:
mysql start failed with error: [ERROR] The socket file path is too long (> 103): /private/var/tmp/_bazel_user/1c8ed8d84f6cb79483aa3cc4da758c86/bazel-sandbox/2478112867584790357/execroot/some_workspace/_tmp/dfebe48cda4dfdc8739653efedfa4933/394798020705754292.sock
。
我通过使用/tmp
将java temp dir重新指向jvm_flags
来解决这个问题,但是当我尝试使用沙盒时,这并不起作用,因为我猜测测试isn&允许写在那里。
我尝试过设置java代码中的符号链接(例如Files.createSymbolicLink(Paths.get("/tmp/foo"),Paths.get(System.getProperty("java.io.tmpdir")))
,但这似乎没什么帮助。
我也试过设置output_base
,但这也没有帮助。
非常感谢指针和提示,因为我目前无法在沙盒下运行我的测试,因此无法将它们并行化。
答案 0 :(得分:3)
我认为你将Java重新指向/ tmp的方法应该有效。 macOS沙箱始终允许写入多个目录和/ tmp和/ private / tmp are included in this set。我尝试用genrule重现失败:genrule(name = "write_to_tmp", outs = ["out.txt"], cmd = "touch /tmp/something.sock && touch $@")
,它可以正常工作并创建文件/tmp/something.sock。
我认为通常使用/tmp
应该可以正常工作,尽管它在macOS上似乎有点不寻常。 $TMPDIR
被设置为一个特定于用户的文件夹,操作系统在/ var / folders下面有一个随机名称,似乎通常鼓励使用它而不是/ tmp。但如果你知道自己在做什么,我就不会发现真正的问题。
请注意,我们没有在macOS上提供tmpfs或类似机制,因此我们无法自动保证您通过操作使用/tmp
这样的可写文件夹是密封的,赢得了'运行之间的泄漏状态或文件名不会发生冲突。确保通过mkstemp
或类似方式以安全的方式生成文件名。
答案 1 :(得分:0)
在bazel测试中,您可以将TEST_TMPDIR
环境变量用于测试专用可写区域。
请参阅https://docs.bazel.build/versions/master/test-encyclopedia.html