int ndmca_test_check_expect (struct ndmconn *conn, int rc, ndmp9_error expect_err) { ndmp9_error errs[2]; errs[0] = expect_err; errs[1] = -1; return ndmca_test_check_expect_errs (conn, rc, errs); }
int ndmca_tt_basic_read (struct ndm_session *sess) { int rc, ix; char buf[2048]; ndmp9_error expect_errs[5]; ndmca_test_phase (sess, "T-BR", "Tape Read Basics"); rc = ndmca_test_tape_read (sess, NDMP9_DEV_NOT_OPEN_ERR, buf, 1024); if (rc) return rc; /* * Read w/ bogus lengths -- mode=READ_MODE */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_READ_MODE); if (rc) return rc; /* read/len=0 MUST be NDMP[23]_NO_ERR or NDMP[23]_ILLEGAL_ARGS */ /* read/len=0 MUST be NDMP4_NO_ERR */ ix = 0; if (sess->plumb.tape->protocol_version < 4) { expect_errs[ix++] = NDMP9_ILLEGAL_ARGS_ERR; } expect_errs[ix++] = NDMP9_NO_ERR; expect_errs[ix++] = -1; rc = ndmca_tape_read (sess, buf, 0); rc = ndmca_test_check_expect_errs (sess->plumb.tape, rc, expect_errs); if (rc) return rc; rc = ndmca_test_tape_read(sess,NDMP9_ILLEGAL_ARGS_ERR,buf,0x80000000); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; /* * Read works -- mode=WRITE_MODE (just to mix it up) */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_RDWR_MODE); if (rc) return rc; rc = ndmca_test_tape_read (sess, NDMP9_NO_ERR, buf, 1024); if (rc) return rc; rc = ndmca_test_tape_read (sess, NDMP9_EOF_ERR, buf, 1024); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; /* * Read works w/ oversize -- mode=READ_MODE (just to mix it up) */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_READ_MODE); if (rc) return rc; rc = ndmca_test_tape_read_2cnt (sess, NDMP9_NO_ERR, buf, 2048, 1024); if (rc) return rc; rc = ndmca_test_tape_read_2cnt (sess, NDMP9_EOF_ERR, buf, 2048, 1024); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; /* * Read works w/ undersize -- mode=READ_MODE (just to mix it up) */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_READ_MODE); if (rc) return rc; rc = ndmca_test_tape_read_2cnt (sess, NDMP9_NO_ERR, buf, 512, 512); if (rc) return rc; rc = ndmca_test_tape_read_2cnt (sess, NDMP9_EOF_ERR, buf, 512, 512); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; return 0; /* pass */ }
/* * Precedes tt_basic_read() so that we can make a "known" tape. */ int ndmca_tt_basic_write (struct ndm_session *sess) { int rc, ix; char buf[1024]; ndmp9_error expect_errs[5]; ndmca_test_phase (sess, "T-BW", "Tape Write Basics"); rc = ndmca_test_tape_write (sess, NDMP9_DEV_NOT_OPEN_ERR, buf, 1024); if (rc) return rc; /* * Write w/ read-only open mode */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_READ_MODE); if (rc) return rc; rc = ndmca_test_tape_write (sess, NDMP9_PERMISSION_ERR, buf, 1024); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; /* * Write w/ bogus lengths */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_RDWR_MODE); if (rc) return rc; /* OPEN Question: what does len==0 mean? */ /* write/len=0 MUST be NDMP[234]_NO_ERR or NDMP[234]_ILLEGAL_ARGS */ /* write/len=0 MUST be NDMP4_NO_ERR */ ix = 0; if (sess->plumb.tape->protocol_version < 5) { expect_errs[ix++] = NDMP9_ILLEGAL_ARGS_ERR; } expect_errs[ix++] = NDMP9_NO_ERR; expect_errs[ix++] = -1; rc = ndmca_tape_write (sess, buf, 0); rc = ndmca_test_check_expect_errs (sess->plumb.tape, rc, expect_errs); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; /* * TODO: bogus length */ /* * Write works */ rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_RDWR_MODE); if (rc) return rc; rc = ndmca_test_tape_write (sess, NDMP9_NO_ERR, buf, 1024); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_EOF, 1, 0); if (rc) return rc; rc = ndmca_test_tape_mtio (sess, NDMP9_NO_ERR, NDMP9_MTIO_REW, 1, 0); if (rc) return rc; rc = ndmca_test_tape_close (sess, NDMP9_NO_ERR); if (rc) return rc; return 0; /* pass */ }