Forçando write (2) a retornar 0

2

Estou escrevendo testes de unidade e gostaria de testar a manipulação de alguns códigos do caso em que uma chamada para write (2) retorna zero. Como sempre, seria bom manter o teste o mais autêntico possível.

Eu posso usar um descritor de arquivos de qualquer tipo para esse propósito, contanto que ele retorne zero em uma chamada para escrever (2). Eu também posso passar praticamente qualquer dado de qualquer tamanho para escrever.

No entanto, gostaria de poder alterar o comportamento do descritor de outro thread, depois que o zero foi retornado algumas vezes, portanto, apenas gravar dados de comprimento zero não é aceitável.

Alguém pode pensar em um meio razoavelmente portátil e confiável de colocar um filodescriptor em tal estado? O alvo é o Linux recente, mas trabalhar de forma mais ampla (* BSD, OS X, etc) seria ótimo, se possível.

    
por Dan Sheppard 31.10.2014 / 11:33

1 resposta

3

Se for difícil influenciar a entrada real (como reagir em um erro de disco), você deve criar um wrapper fino ao redor da função, que depende de algum estado global. Nesse caso, eu colocaria esse wrapper em torno de write() para retornar 0 ou o retorno real de write() .

Se a sobrecarga do wrapper for muito grande, use #define para deixar de fora o código do wrapper no sistema de produção, mas pelo menos você pode testar as camadas em cima de write() para reagir corretamente durante unittests definindo o estado global conforme necessário.

    
por 31.10.2014 / 12:33