我需要在没有剩余磁盘空间的情况下testing我的web应用程序,即我不能再写入任何文件。 但我不想用垃圾填满我的硬盘,只是为了确保没有剩余空间。 我想要的是用特定的过程(实际上是一个PHP应用程序)模拟这种情况。
事实上,暂时禁止磁盘写入进程必须是足够的。
什么是最简单的方法来做到这一点? 我正在使用带有内置Apache / PHP软件包的Mac OS X 10.6.2。 谢谢。
编辑 :磁盘可用空间检查将不会是可靠的,因为它可以改变任何时刻。 许多页面正在同时提供。 检查时可以有足够的可用空间,但是一旦你实际写了东西,就没有空间了。 此外,检查磁盘可用空间将需要在编写文件的任何地方更改代码,这不是我想要的:-)最后,这个解决scheme与我试图testing的内容完全相反:我的应用程序如何在它不能再写了。
请解释这个错误日志
Drupal 7在“第一次加载”上太慢
使用参数redirect到主页url
Apache / Windows上的Mercurial服务器
htaccess自动检测域名
dynamic重写htaccess文件
为什么浏览器请求文件,即使启用了Apache mod_expires?
PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)
你如何设置Python脚本在Apache 2.0中工作?
我敢打赌,你也可以创建自己的.dmg文件与文件系统的大小…说2Mb并写入它。 如果这样做,那么测试非常容易 – 只需安装它并切换测试路径即可。 如果dmg足够小,甚至可能将其上传到源代码管理。
当我需要这样做时,我创建了一个分配给虚拟磁盘空间有限的虚拟机。
不需要使用预先填充的虚拟文件系统。
使用disk_free_space()来模拟FileSystem
disk_free_space() – 给定一个包含目录的字符串,该函数将返回相应文件系统或磁盘分区上的可用字节数。
为了模拟,只需将该函数包装到FileSystem类中即可。 然后把它注入到你的班级做保存作为依赖,并检查是否已满的驱动器,然后再进行实际的保存。 在你的UnitTest中,只需将模拟一个完整的文件系统的课程换出来,就完成了。 这样,您不必重新创建完整的磁盘驱动器,或随时随地将驱动器与项目文件一起保存,例如
class MyFileSystem { public static function df($drive) { return disk_free_space($drive); } }
class MyFileSystemFull { public static function df($drive) { return 0; } }
如果您想要重载函数以便始终返回0,则可以使用RunKit Pecl扩展名并执行以下操作:
runkit_function_redefine('disk_free_space','string','return 0;');
作为vfsstream的另一种选择:
vfsstream是虚拟文件系统的流封装,可能有助于单元测试来模拟真实的文件系统。 它可以用于任何单元测试框架,如PHPUnit或SimpleTest。
我用一个拇指驱动器,作为过程的音量。
我不知道如何在OSX上做到这一点,但在Linux上,我可能会把我的测试用户的磁盘配额,然后运行应用程序。
或者可以创建一个空文件(一个小文件),将其格式化为ext3分区,使用环回设备装载它并在其中运行PHP应用程序。 这将更接近空间不足的物理磁盘。
一个简单快捷的解决方案就是为专门的用户帐户设置一个配额。 Mac OS X上的配额支持
如果您不介意设置它的麻烦,并且您的操作系统可能需要第二个许可证,那么虚拟机可能是具有最长期可能性的最佳主意。
创建一个常规文件(大小有限)的磁盘/文件系统映像,然后循环挂载它。
但是如果你经常这样做,我会创建一个虚拟机 – 你会有机会重用它。
难道你不能使用一个模拟,并用一个假的测试替代品替代你的代码中实际写入磁盘的部分,这将会抛出你期望看到的异常吗?
递归地删除您的应用程序要写入的文件夹,文件夹和文件的所有写入权限。
底线; 不要这样做。 严重的是,当卷空间不足时,有太多的事情会发生严重的错误。 除非目标卷不是引导卷,并且没有其他应用程序正在写入,否则磁盘填充的行为将无法控制。
如果是启动驱动器,那么无论如何系统很可能会出现恐慌或崩溃。 或者,如果不是,它会表现不正常。
如果您正在讨论数据量,那么您是唯一正在写入数据的应用程序吗? 如果有任何其他应用程序正在写,你知道他们可能会失败吗?
现在磁盘空间非常的低廉,以至于确保磁盘空间不会出现问题,这样做的好处就大得多。 放入一个2TB的驱动器,并在达到50%的容量时发出警报。 实施起来要便宜得多(除非你的时间是免费的),而且要可靠得多。
你有没有尝试与-f -r挂载? 这不是非常低的磁盘空间,但它应该从同一级别抛出一个错误。
我认为模拟课的想法是正确的方向。 我通常也是这样测试我的代码。 如果可能的话,我使用框架,而不是自己写这些类。 我不太了解PHP(用C#和Java编写更多的程序),但是这看起来不错。 https://github.com/padraic/mockery
无论您在哪里获取剩余的磁盘空间,只需将其注释掉,并使用替换值(例如0.1,0,-1)运行您的应用程序
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。