Test Cases for the Interrupt IOCTLs Test (User Mode)
9/8/2008
A seguinte tabela mostra os casos testar para a interrupção IOCTLs de teste (modo de usuário). Observe o seguinte pontos:
- Os testes alocação e versão podem executar em qualquer imagem. Esses testes devem ser assinado para que eles tenham baixo nível acessar para as rotinas IOCTL interrupção.
- Intervalos de IRQ são usados em toda a codificar. Os intervalos usar como padrão atualmente são definidos de 0 a 1024. Para alguns dos testes, o intervalo de IRQ pode ser definido pelos argumentos linha de comando. Todos os intervalos de IRQ são inclusive, a menos que especificado caso contrário.
- Os IOCTLs só devem ser chamado no modo kernel. Em modo de usuário, o kernel deve evitar a codificar OAL mesmo seja chamado. É a testar executar em modo de usuário para confirmar que nenhum dos completo de chamadas com êxito.
- A codificar testar IOCTL tem várias verificações internas que confirme que os dados corretos são retornados. Os dois importantes:
- SYSINTRs válidos: SYSINTRs válidos devem estar entre [0, 72]. Nada é um erro.
- Número de livre SYSINTRs antes e depois de testar: Os testes são projetados para deixar o sistema no estado que eles encontrado-la no. Isso pode ser confirmado, comparando o número de livre SYSINTRs antes e depois de testar. Isso ajuda a capturar erros dois sobre os testes e erros nas rotinas próprios.
- Dado as demandas dos clientes diferentes e as restrições impostas pelo kernel vs. modo usuário, a tabela função tux enumera todas as combinações possíveis necessárias para testar completamente as IOCTLs. Como alguns das rotinas Init precisar acessar modo kernel, eles não podem ser executar de modo de usuário. Portanto, permitindo que cada entrada tabela função seja poderia executar do modo de usuário assunto de usuário para confuso mensagens. Além disso, isso seria difícil de codificar e manter, desde alguns rotinas Init chamar funções muitos níveis profundo. Por denotando determinados casos testar como "modo de usuário" e outras pessoas como "modo kernel", o usuário pode escolher e escolher baseado de como os testes são executar.
- "estendido estrutura sinalizador" Permite que os sinalizadores OAL_INTR_ * para especificar mais ações para os IOCTLs.
- Desde o controle rotinas interrupção comportamento sistema essenciais, trashed tabelas que mapa (n.); mapear (v.) que as IRQs para SYSINTRs geralmente levam a instabilidade no sistema e falhas. Isso significa que o usuário pedantic poderia executar cada maiúsculas e minúsculas testar individualmente. Em vez disso, esses testes executar em duas passagens em CETK: modo kernel e modo usuário (eles exigem diferentes Command lines). Uma falha na testar normalmente irá interromper todos os outros. Isso precisa ser observado para qualquer pessoa olhando resultados CETK.
Testar maiúsculas e minúsculas | Descrição |
---|---|
500 |
IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida (estrutura sinalizador estendido) - argumentos não concluídas Intervalo de IRQ: Linha de comando ou usar como padrão Verifica o seguinte:
|
510 |
IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida (estrutura sinalizador estendido) - tamanhos de entrada inválido Intervalo de IRQ: Comando ou usar como padrão Estrutura de entrada deve ser DWORDS, portanto, Comprimento muito sempre ser um múltiplo de quatro. Furthemore, ele deve ser sempre > DWORDS 2, ou 8 bytes. Confirme isso até um 32 bytes arbitrário. |
520 |
IOCTL_HAL_REQUEST_SYSINTR: Entrada inválida-tamanho Intervalo de IRQ: Linha de comando ou usar como padrão Confirme que nada, exceto para 4 bytes causa uma falha. |
530 |
IOCTL_HAL_REQUEST_SYSINTR: Sinalizadores incorretos Intervalo de IRQ: Linha de comando ou usar como padrão Funciona de teste de 0 a 256, ignorando o válido sinalizadores (OAL_INTR_TRANSLATE, OAL_INTR_STATIC, OAL_INTR_DYNAMIC, OAL_INTR_FORCE_STATIC). |
540 550 |
Teste maiúsculas e minúsculas 540: IOCTL_HAL_REQUEST_SYSINTR: Out-Size incorreto (estrutura sinalizador estendido) Teste maiúsculas e minúsculas 550: IOCTL_HAL_REQUEST_SYSINTR: Out-Size incorreto Intervalo de IRQ: Linha de comando ou usar como padrão Qualquer tamanho menor que 4 bytes causa falha. Observe que apenas 4 bytes é necessária para saída. Se dado mais, o IOCTL apenas ignora-lo. |
600 |
IOCTL_HAL_RELEASE_SYSINTR: Tamanho de entrada incorreto Intervalo de IRQ: Linha de comando ou usar como padrão Confirme que diferente de 4 bytes causa um erro. Este IOCTL não passa nenhuma saída. Nesta maiúsculas e minúsculas a codificar deveria ser completamente ignorar Valores de saída, incluem lpBytesReturned. |
1000 |
Livres SYSINTRs que não devem ser liberados Qualquer SYSINTR menor que 8 ou maior do que 71 não é válido. Liberar esses deve resultar em FALSE o IOCTL e nenhuma alteração no sistema. Este testar tenta versão desses SYSINTRs. Desde liberando ~ 2 ^ 32 interrupções leva um longo tempo, nós ocorrência os valores mais prováveis:
|
12000 12100 12200 |
Teste maiúsculas e minúsculas 12000: Alocações de IRQ única: Única alocação padrão de IRQ Teste maiúsculas e minúsculas 12100: Alocações de IRQ única: Única alocação estática de IRQ Teste maiúsculas e minúsculas 12200: Alocações de IRQ única: Dinâmico IRQ único alocação Intervalo de IRQ: Linha de comando ou usar como padrão Há alocações podem ser feitas de modo de usuário. Versões desses testes modo usuário falhará se qualquer alocações são bem-sucedido. Desde que todos os casos devem falhar, é necessário exercício todos os valores possíveis de IRQ. Não há nenhum "no intervalo" testar, uma vez que este é um subconjunto do intervalo de usar como padrão. |
14000 14100 14200 |
Teste maiúsculas e minúsculas 14000: Várias alocações de IRQ: Alocação estática IRQ MULT Teste maiúsculas e minúsculas 14100: Várias alocações de IRQ: Alocação dinâmica de IRQ MULT Teste maiúsculas e minúsculas 14200: Várias alocações de IRQ: Alocação force-estático IRQ MULT Intervalo de IRQ: Linha de comando ou usar como padrão Nesses casos testar aleatoriamente gerar um conjunto de IRQs para um determinado chamar. As IRQs provenientes de intervalo de IRQ (consulte a discussão abaixo). O número de IRQs passados para o IOCTL varia de 1 para o número máximo permitido no sistema, conforme determinado pela testar. A testar tenta 100 alocações diferentes para cada número de IRQs. No modo de usuário, nenhuma das alocações de deve ter êxito. Somente o intervalo usar como padrão for oferecido, desde que o linha de comando oferece um subconjunto dos quais deve transmitir |
20010 |
IOCTL_HAL_REQUEST_IRQ: Verificações de parâmetro incorreto: Tamanho de entrada incorreto Intervalo de IRQ: Linha de comando ou usar como padrão Confirmar que qualquer tamanho não = sizeof (DEVICE_LOCATION) causa uma falha. |
20020 |
IOCTL_HAL_REQUEST_IRQ: Verificações de parâmetro incorreto: Tamanho Incorreto de saída Intervalo de IRQ: Linha de comando ou usar como padrão Este IOCTL suporta múltiplo IRQs na saída. Entradas incorretas consistem outputBufSize < 4 bytes. A codificar testar usa aleatório valores para o de entrada estruturas, que infelizmente não fornece cobertura ideal, desde que esses aleatório valores falhará mesmo assim. |
30100 30200 |
IOCTL_HAL_REQUEST_IRQ: Solicitação aleatória IOCTL_HAL_REQUEST_IRQ: Usuário especificados parâmetros Intervalo de IRQ: Linha de comando ou usar como padrão IOCTL_HAL_REQUEST_IRQ é usado para codificar determinados DEVICE_LOCATION valores para determinados IRQs na plataforma. Isso parece ser usado apenas em PCI e serial kitl. A entrada é uma estrutura DEVICE_LOCATION. Os campos essa estrutura são comparados com valores cased especiais na OAL. O valor de retorno é um IRQ. A entrada espaço é muito grande. Cada plataforma parece usar campos diferentes e possuem diferentes valores para esses campos. Além disso, o intervalo constantes all over o mapa (n.); mapear (v.). Nós não pôr qualquer intervalo neles. A "Solicitação aleatória" testar seleciona aleatoriamente valores para os campos de estrutura de DEVICE_LOCATION. A meta não é para localizar um conjunto de valores que trabalho com o IOCTL; Em vez disso, ele é tentar causar um falhar/violação de acesso memória enviando em incorreto entrada. O "usuário especificados parâmetros" testar permite que o usuário para transmitir os valores para o ioctl. Esses valores não necessariamente fazer causar o IOCTL seja bem-sucedida. Este testar sempre passa, pois a testar não tem nenhuma idéia que o usuário espera acontecer com estes argumentos. Para executar o segundo testar, chamar a testar com argumentos testar: -Dispositivo Fixar LogicalLoc BusNumber IfcType Observe que a estrutura DEVICE_LOCATION também possui um valor PhysicalLoc. Este é um PVOID e é reservado para uso futuro, portanto, é definir a zero por nosso testar. Em modo de usuário, este testar nunca deve êxito. Ambos testar falhará se o IOCTL nunca for bem-sucedido ao executar no modo de usuário. |