예제 #1
0
int
ndmca_test_tape_write (struct ndm_session *sess, ndmp9_error expect_err,
  char *buf, unsigned count)
{
	struct ndmconn *	conn = sess->plumb.tape;
	int			rc;

	/* close previous test if there is one */
	ndmca_test_close (sess);

	rc = ndmca_tape_write (sess, buf, count);

	rc = ndmca_test_check_expect (conn, rc, expect_err);

	return rc;
}
예제 #2
0
/*
 * type is either 'm' or 'V', see above
 */
int
ndmca_media_write_label (struct ndm_session *sess, int type, char labbuf[])
{
	int		rc;
	char		buf[512];
	char *		p;

	ndmalogf (sess, 0, 1, "Writing tape label '%s' type=%c", labbuf, type);

	for (p = buf; p < &buf[512]; p++) *p = '#';
	for (p = buf+63; p < &buf[512]; p += 64) *p = '\n';

	snprintf (buf, sizeof(buf), "##ndmjob -%c %s", type, labbuf);
	for (p = buf; *p; p++) continue;
	*p++ = '\n';

	rc = ndmca_tape_write (sess, buf, 512);

	return rc;
}
예제 #3
0
/*
 * Precedes tt_read() so that we can make a "known" tape.
 */
int
ndmca_tt_write (struct ndm_session *sess)
{
	int		rc;
	unsigned	n_rec;
	unsigned	recsize;
	unsigned	fileno, recno;
	char *		what;
	char		note[128];
	char		buf[64*1024];

	ndmca_test_phase (sess, "T-WRITE", "Tape Write Series");

	rc = ndmca_test_tape_open(sess,NDMP9_NO_ERR,0,NDMP9_TAPE_RDWR_MODE);
	if (rc) return rc;

	for (fileno = 0; tt_series[fileno].n_rec > 0; fileno++) {
		n_rec = tt_series[fileno].n_rec;
		recsize = tt_series[fileno].recsize;

		sprintf (note, "Write tape file %d", fileno+1);
		ndmca_test_open (sess, note, 0);

		sprintf (note, "file #%d, %d records, %d bytes/rec",
				fileno+1, n_rec, recsize);
		ndmca_test_log_note (sess, 2, note);

		for (recno = 0; recno < n_rec; recno++) {
			ndmca_test_fill_data (buf, recsize, recno, fileno);

			what = "write";
			rc = ndmca_tape_write (sess, buf, recsize);
			if (rc) goto fail;

			CHECK_FILENO_RECNO ("write", fileno, recno+1);
		}

		what = "write filemark";
		rc = ndmca_tape_mtio (sess, NDMP9_MTIO_EOF, 1, 0);
		if (rc) goto fail;

		CHECK_FILENO_RECNO ("wfm", fileno+1, 0);

		/* no test calls so the file operation is the test */
		sprintf (buf, "Passed tape write %s", note);
		ndmca_test_log_step (sess, 2, buf);
	}

	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;

  fail:
	sprintf (buf, "Failed %s recno=%d; %s", what, recno, note);
	ndmca_test_fail (sess, buf);
	return -1;
}
예제 #4
0
/*
 * 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 */
}