문제

디스크 공간이없는 시나리오에서 웹 앱을 테스트해야합니다. 즉, 더 이상 파일을 쓸 수 없습니다. 그러나 나는 실제로 공간이 남아 있지 않은지 확인하기 위해 내 하드 드라이브를 쓰레기로 채우고 싶지 않습니다. 내가 원하는 것은 특정 프로세스 (실제로 PHP 앱)와 함께이 상황을 시뮬레이션하는 것입니다.

실제로, 일시적으로 디스크를 금지하는 것은 프로세스에 충분해야합니다.

이것을하는 가장 쉬운 방법은 무엇입니까? 내장 Apache/PHP 번들과 함께 Mac OS X 10.6.2를 사용하고 있습니다. 감사.

편집하다: 디스크 여유 공간 검사는 순간을 바꿀 수 있기 때문에 신뢰할 수 없습니다. 많은 페이지가 동시에 제공되고 있습니다. 확인할 때 충분한 여유 공간이있을 수 있지만 실제로 무언가를 쓰는 순간에는 아무것도 없습니다. 또한 디스크 여유 공간을 확인하려면 파일을 쓰는 곳마다 코드를 변경해야합니다. 제가 원하는 것이 아닙니다. 더 이상 쓸 수 없습니다.

도움이 되었습니까?

해결책

크기의 파일 시스템으로 자신만의 .dmg 파일을 만들 수 있습니다. 2MB를 말하고 쓸 수 있습니다. 이것이 작동하면 테스트하기에 매우 중요합니다. 마운트 한 후 테스트 경로를 전환합니다. DMG가 충분히 작 으면 소스 컨트롤에 업로드 할 수도 있습니다.

다른 팁

이 작업을 수행해야 할 때 가상 디스크에 할당 된 공간이 제한된 가상 머신을 만들었습니다.

미리 채워진 더미 파일 시스템을 사용할 필요가 없습니다.
사용 disk_free_space() 파일 시스템을 조롱합니다

DISK_FREE_SPACE () - 디렉토리가 포함 된 문자열이 주어지면이 기능은 해당 파일 시스템 또는 디스크 파티션에서 사용 가능한 바이트 수를 반환합니다.

시뮬레이션하려면 함수를 파일 시스템 클래스로 랩핑하십시오. 그런 다음 의존성으로 저축을하는 클래스에 주입하고 실제 저축을하기 전에 드라이브가 가득 찼는지 확인하십시오. 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에서는 테스트 사용자에게 디스크 할당량을 넣은 다음 앱을 실행할 것입니다.

또는 NULL 파일 (작은 파일)을 작성하고 ERF3 파티션으로 포맷하고 Loopback 장치를 사용하여 마운트 한 후 PHP 앱을 실행하십시오. 이것은 공간이 부족한 물리적 디스크에 더 가깝습니다.

빠르고 쉬운 솔루션은 전문 사용자 계정에 대한 할당량을 설정하는 것입니다. Mac OS X에 대한 할당량 지원

번거 로움을 느끼지 못하고 운영 체제에 대한 두 번째 라이센스가 필요할 것이라는 사실이라면 가상 머신이 가장 장기적인 가능성을 가진 최상의 아이디어 일 것입니다.

규칙적인 파일 (제한된 크기)으로 디스크/파일 시스템 이미지를 만들고 루프 마운트를 마운트하십시오.

그러나이 일을 종종 할 것이라면 가상 머신을 만들려면 재사용 할 수있는 기회를 찾을 수 있습니다.

모의를 사용하고 실제로 디스크에 쓰는 코드의 일부를 대체 할 수 없으며 가짜 테스트 대체품으로 예외를 던질 예외가 있습니까?

웹 폴더에서 모든 쓰기 권한을 재귀 적으로 제거하고, 앱이 작성할 폴더 및 파일.

결론; 그렇게하지 마십시오. 진지하게 - 있습니다 너무 많은 것들 볼륨이 공간이 부족할 때 끔찍하게 잘못됩니다. 대상이없는 경우가 아니라면 ~ 아니다 부츠 볼륨과 가지고 있습니다 다른 응용 프로그램은 그것에 글을 쓰지 않습니다, 디스크가 채워지는 동작은 어쨌든 당신의 제어에서 벗어날 것입니다.

부트 드라이브 인 경우 시스템은 어쨌든 풀 디스크에 당황하거나 충돌 할 가능성이 높습니다. 또는 그렇지 않으면 불규칙하게 행동 할 것입니다.

데이터 볼륨에 대해 이야기하고 있다면 글을 쓰고있는 앱? 다른 앱이 쓰는 경우, 당신은 당신을합니까? 알다 그들이 어떻게 실패 할 수 있습니까?

디스크 공간은 요즘에는 너무 흙이 뛰어나서 당신이 디스크 공간 밖 결코 일어나지 않을 것입니다. 2TB 드라이브를 떨어 뜨리고 50% 용량에 도달하면 알람을 넣습니다. 시간이 자유롭지 않은 한 (시간이 자유롭지 않은 한) 구현하기 훨씬 더 저렴하고 훨씬 더 안정적입니다.

-f -r로 Mount를 사용해 보셨습니까? 실제로 디스크 공간이 낮지는 않지만 같은 레벨에서 오류를 던져야합니다.

모의 클래스에 대한 아이디어가 올바른 방향이라고 생각합니다. 나는 보통 내 코드도 그런 식으로 테스트합니다. 가능하다면 나는 그 수업을 직접 작성하는 대신 그 프레임 워크를 사용합니다. 나는 PHP를 잘 잘 모르겠지만 (C# 및 Java를 사용한 더 많은 프로그래밍), 이것은 좋은 것 같습니다.https://github.com/padraic/mockery

나머지 디스크 공간을 얻는 곳마다 주석을주고 0.1, 0, -1과 같은 대체 값으로 앱을 실행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top