(플랫폼 : 리눅스, 특히 페도라와 레드햇 엔터프라이즈 리눅스 6)가 만든 임시 디렉토리를 삭제할 수 있습니다 테스트 케이스를 보장
나는 integration test는 다음을 수행하는 파이썬으로 작성했습니다 :
- (아파치에서 실행) rsync에 작업을 실행하는 데
- 웹 서비스를 알려주는 임시 디렉토리를 만듭니다
- 점검이 파일이 제대로 복사 한 디렉토리에 파일을 복사합니다 (즉, 구성이 제대로 전달 FR 옴 웹 서비스를 통해 rsync를 호출)을 통해 클라이언트는
- () rsync를가 자신의 소유가 설정된 파일을 생성하기 때문에, 마지막 단계가 실패하는 순간에 임시 디렉토리
을 삭제하려고 아파치 사용자의 테스트 케이스에 파일을 삭제하는 데 필요한 권한이 없습니다.
이 Server Fault question은 통합 테스트가 설정된 상황에서 정리 단계가 현재 실패한 이유에 대한 좋은 설명을 제공합니다.
현재 수행중인 작업 : 테스트 정리에서 임시 디렉터리를 삭제하지 않기 때문에이 통합 테스트는 수동으로 /tmp
에서 제거해야하는 더미 파일을 남겨 둡니다.
현재 제가 고려중인 주된 해결책은 테스트 스위트의 정리 작업을 처리하기 위해 setuid 스크립트를 특별히 추가하는 것입니다. 이것은 효과가 있지만, 다른 누군가가 좀 더 우아한 해결책을 제안 할 수 있기를 바랍니다. 특히 통합 테스트 클라이언트에서 아파치 프로세스의 uid를 신경 쓰지 않아도된다면 정말 좋겠다. 나는 여러 가지 이유로 고려했지만 거절
접근 :
- 루트로 테스트 케이스를 실행합니다. 이것은 실제로 작동하지만 테스트 스위트를 루트로 실행해야하는 것은 다소 못 생깁니다.
- 테스트 스위트에서 만든 디렉토리에 고정 비트를 설정하십시오. 내가 말할 수있는 것처럼 원격 서버에서 플래그를 복사하기 때문에 rsync는이를 무시합니다. 그러나 실행 비트 만 복사하도록 설정을 조정해도 도움이되지 않았으므로 여전히 작동하지 않는 이유는 확실하지 않습니다.
- apache 그룹에 테스트 사용자 추가. rsync는 그룹 쓰기 권한없이 파일을 생성하므로이 작업은 도움이되지 않습니다.
- 테스트 사용자로 Apache 인스턴스를 실행하고 테스트합니다. 이것은 (통합 테스트에서 아파치가 이미 실행 중일 필요가 없다는 점에서) 몇 가지 장점이 있지만 프로덕션 설정으로 사전 구성된 Apache 인스턴스에 대해 통합 테스트를 실행할 수 없다는 단점이 있습니다. 해당이 정확한지 확인하십시오. 따라서이 기능을 결국 테스트 스위트에 추가 할 가능성은 있지만 현재 문제를보다 직접적으로 해결하기 위해 대체이되지는 않습니다.
내가 정말로하고 싶지 않은 또 다른 한 가지는 테스트 스위트가 임시 디렉토리를 올바르게 정리할 수 있도록 rsync에 전달 된 설정을 변경하는 것입니다. 이것은 서비스 데몬에 대한 통합 테스트이므로 얻을 수있는 한 제품에 가까운 구성을 사용하고 싶습니다.
개별 파일이 아니라 포함하는 디렉터리의 부모에게만 쓰기 권한이 있어야합니다. –
테스트 목적으로 만 웹 서비스를 테스트와 동일한 사용자로 실행할 수 있습니까? 또는, 사용중인 디렉토리를 지우는 다른 서비스를 제공 할 수 있지만 나에게 덜 깨끗하다고 느낄 수 있습니다. –
@James : 음, 좋은 지적입니다. 시작 시간이 좋지 않아 웹 서버의 이미 실행중인 인스턴스에 대해 이러한 통합 테스트를 실행하고 있었지만 파일 권한을보다 잘 제어하기 위해서는 그만한 가치가있을 수 있습니다. – ncoghlan