📄 dm6430-test-lib-errors.c
字号:
/* FILE NAME: dm6430-test-lib-errors.c FILE DESCRIPTION: Test program for library error checking This program exercises the error checking code added to the library. All exported functions are verified. The following types of tests are performed: - A function fails when expected. - If a function fails as expected, errno is set as expected depending upon the cause of failure. - A function succeeds when expected. - If a function can accept multiple valid inputs, it succeeds on all combinations of such inputs. PROJECT NAME: Linux DM6430 Driver, Library, and Example Programs PROJECT VERSION: (Defined in README.TXT) Copyright 2004 RTD Embedded Technologies, Inc. All Rights Reserved.*/#include <errno.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dm6430lib.h>#define MAX_BOARDS 4static voidexpect_success(int status) { if (status == -1) { fprintf(stderr, "FAILED: Expected success but failure occurred.\n"); fprintf(stderr, " errno is %d\n", errno); exit(1); }}static voidexpect_failure_and_check(int status, int expected_errno) { if (status != -1) { fprintf(stderr, "FAILED: Expected failure but success occurred.\n"); exit(1); } if (errno != expected_errno) { fprintf( stderr, "FAILED: Expected errno %d, got %d.\n", expected_errno, errno ); exit(1); }}static voidexpect_failure(int status) { if (status != -1) { fprintf(stderr, "FAILED: Expected failure but success occurred.\n"); exit(1); }}static voidusage(void) { fprintf( stderr, "\n" "Test dm6430 library error checking\n" "\n" "dm6430-test-errors --boards NUMBER_OF_BOARDS\n" "\n" );}static voidinterrupt_handler(void) {}intmain(int argument_count, char **arguments_p_p) { double dummy; int descriptors[MAX_BOARDS]; int number_of_boards; int option_index; int status; int int_flag; short int short_int; size_t dma_bytes; unsigned char minor; unsigned char boards_flag = 0; unsigned char dma_buffer[4096]; unsigned char u_char; unsigned char loop_count; unsigned long int counter_value; unsigned short int u_short_int; unsigned short int *digital_table_p; ADTableRow *ad_table_p; if (argument_count != 3) { fprintf(stderr, "Invalid number of command line options.\n"); exit(1); } for (option_index = 1; option_index < argument_count; ) { if (strcmp(arguments_p_p[option_index], "--boards") == 0) { boards_flag = 1; option_index++; number_of_boards = atoi(arguments_p_p[option_index]); if ((number_of_boards <= 0) || (number_of_boards > MAX_BOARDS)) { fprintf(stderr, "Invalid number of boards.\n"); usage(); exit(1); } option_index++; } else { fprintf( stderr, "Invalid argument %s\n", arguments_p_p[option_index] ); usage(); exit(1); } } if (boards_flag == 0) { fprintf(stderr, "--boards argument required.\n"); usage(); exit(1); } /* * Test OpenBoard6430() error checking. */ fprintf(stdout, "## Testing OpenBoard6430() ...\n"); for (minor = 0; minor < (number_of_boards + 1); minor++) { fprintf(stdout, " Minor number %d\n", minor); status = OpenBoard6430(minor); if (minor < number_of_boards) { expect_success(status); descriptors[minor] = status; } else { /* * Do not check errno because it depends on which minor number is * being opened */ expect_failure(status); } } /* * Test CloseBoard6430() error checking. */ fprintf(stdout, "## Testing CloseBoard6430() ...\n"); for (minor = 0; minor < number_of_boards; minor++) { fprintf(stdout, " Minor number %d\n", minor); fprintf(stdout, " First attempt ...\n"); status = CloseBoard6430(descriptors[minor]); expect_success(status); fprintf(stdout, " Second attempt ...\n"); status = CloseBoard6430(descriptors[minor]); expect_failure_and_check(status, EBADF); } /* * Test InstallCallbackIRQHandler6430() error checking. */ fprintf(stdout, "## Testing InstallCallbackIRQHandler6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = InstallCallbackIRQHandler6430( descriptors[0], interrupt_handler, DM6430HR_INT1 ); expect_failure_and_check(status, EBADF); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; fprintf(stdout, " With NULL callback ...\n"); status = InstallCallbackIRQHandler6430( descriptors[0], NULL, DM6430HR_INT1 ); expect_failure_and_check(status, EINVAL); fprintf(stdout, " With bad interrupt circuit ...\n"); status = InstallCallbackIRQHandler6430( descriptors[0], interrupt_handler, (DM6430HR_INT2 + 1) ); expect_failure_and_check(status, EINVAL); fprintf(stdout, " With another bad interrupt circuit ...\n"); status = InstallCallbackIRQHandler6430( descriptors[0], interrupt_handler, -55 ); expect_failure_and_check(status, EINVAL); fprintf(stdout, " On valid descriptor (all circuits) ...\n"); for ( loop_count = DM6430HR_INT1; loop_count <= DM6430HR_INT2; loop_count++ ) { fprintf(stdout, " Circuit %d\n", loop_count); status = InstallCallbackIRQHandler6430( descriptors[0], interrupt_handler, loop_count ); expect_success(status); } status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test RemoveIRQHandler6430() error checking. */ fprintf(stdout, "## Testing RemoveIRQHandler6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = RemoveIRQHandler6430(descriptors[0], DM6430HR_INT1); expect_failure_and_check(status, EBADF); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; fprintf(stdout, " On bad interrupt circuit ...\n"); status = RemoveIRQHandler6430(descriptors[0], (DM6430HR_INT2 + 1)); expect_failure_and_check(status, EINVAL); fprintf(stdout, " On another bad interrupt circuit ...\n"); status = RemoveIRQHandler6430(descriptors[0], -17); expect_failure_and_check(status, EINVAL); fprintf(stdout, " On valid descriptor (all circuits) ...\n"); for ( loop_count = DM6430HR_INT1; loop_count <= DM6430HR_INT2; loop_count++ ) { fprintf(stdout, " Circuit %d\n", loop_count); fprintf(stdout, " InstallCallbackIRQHandler6430()\n"); status = InstallCallbackIRQHandler6430( descriptors[0], interrupt_handler, loop_count ); expect_success(status); fprintf(stdout, " RemoveIRQHandler6430()\n"); status = RemoveIRQHandler6430(descriptors[0], loop_count); expect_success(status); } status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearRegister6430() error checking. */ fprintf(stdout, "## Testing ClearRegister6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearRegister6430(descriptors[0], 0x0000); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearRegister6430(descriptors[0], 0x0000); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearBoard6430() error checking. */ fprintf(stdout, "## Testing ClearBoard6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearBoard6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearBoard6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearADFIFO6430() error checking. */ fprintf(stdout, "## Testing ClearADFIFO6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearADFIFO6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearADFIFO6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearADDMADone6430() error checking. */ fprintf(stdout, "## Testing ClearADDMADone6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearADDMADone6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearADDMADone6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearChannelGainTable6430() error checking. */ fprintf(stdout, "## Testing ClearChannelGainTable6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearChannelGainTable6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearChannelGainTable6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ResetChannelGainTable6430() error checking. */ fprintf(stdout, "## Testing ResetChannelGainTable6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ResetChannelGainTable6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ResetChannelGainTable6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearDINFIFO6430() error checking. */ fprintf(stdout, "## Testing ClearDINFIFO6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearDINFIFO6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearDINFIFO6430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearIRQ06430() error checking. */ fprintf(stdout, "## Testing ClearIRQ06430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearIRQ06430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearIRQ06430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test ClearIRQ16430() error checking. */ fprintf(stdout, "## Testing ClearIRQ16430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = ClearIRQ16430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0); expect_success(status); descriptors[0] = status; status = ClearIRQ16430(descriptors[0]); expect_success(status); status = CloseBoard6430(descriptors[0]); expect_success(status); /* * Test InitBoard6430() error checking. */ fprintf(stdout, "## Testing InitBoard6430() ...\n"); fprintf(stdout, " On bad file descriptor ...\n"); status = InitBoard6430(descriptors[0]); expect_failure_and_check(status, EBADF); fprintf(stdout, " On valid descriptor ...\n"); status = OpenBoard6430(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -