|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Copyright (c) 1998,1999,2000
|
|
Packit Service |
392537 |
* Traakan, Inc., Los Altos, CA
|
|
Packit Service |
392537 |
* All rights reserved.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Redistribution and use in source and binary forms, with or without
|
|
Packit Service |
392537 |
* modification, are permitted provided that the following conditions
|
|
Packit Service |
392537 |
* are met:
|
|
Packit Service |
392537 |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit Service |
392537 |
* notice unmodified, this list of conditions, and the following
|
|
Packit Service |
392537 |
* disclaimer.
|
|
Packit Service |
392537 |
* 2. Redistributions in binary form must reproduce the above copyright
|
|
Packit Service |
392537 |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit Service |
392537 |
* documentation and/or other materials provided with the distribution.
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
Packit Service |
392537 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit Service |
392537 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit Service |
392537 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
Packit Service |
392537 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit Service |
392537 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit Service |
392537 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit Service |
392537 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
Packit Service |
392537 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
Packit Service |
392537 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
Packit Service |
392537 |
* SUCH DAMAGE.
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* Project: NDMJOB
|
|
Packit Service |
392537 |
* Ident: $Id: $
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
* Description:
|
|
Packit Service |
392537 |
*
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#include "ndmagents.h"
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#ifndef NDMOS_OPTION_NO_CONTROL_AGENT
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_query_conn_types (struct ndm_session *sess,
|
|
Packit Service |
392537 |
struct ndmconn *ref_conn)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndmconn *conn = ref_conn;
|
|
Packit Service |
392537 |
struct ndm_control_agent *ca = &sess->control_acb;
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
unsigned int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
switch (conn->protocol_version) {
|
|
Packit Service |
392537 |
default: return -1234;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#ifndef NDMOS_OPTION_NO_NDMP2
|
|
Packit Service |
392537 |
case NDMP2VER:
|
|
Packit Service |
392537 |
NDMC_WITH_VOID_REQUEST(ndmp2_config_get_mover_type, NDMP2VER)
|
|
Packit Service |
392537 |
rc = NDMC_CALL(conn);
|
|
Packit Service |
392537 |
if (rc) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1, "GET_MOVER_TYPE failed");
|
|
Packit Service |
392537 |
return rc;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < reply->methods.methods_len; i++) {
|
|
Packit Service |
392537 |
switch(reply->methods.methods_val[i]) {
|
|
Packit Service |
392537 |
case NDMP2_ADDR_LOCAL:
|
|
Packit Service |
392537 |
ca->has_local_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
case NDMP2_ADDR_TCP:
|
|
Packit Service |
392537 |
ca->has_tcp_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
default:
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
NDMC_FREE_REPLY();
|
|
Packit Service |
392537 |
NDMC_ENDWITH
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
#endif /* !NDMOS_OPTION_NO_NDMP2 */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#ifndef NDMOS_OPTION_NO_NDMP3
|
|
Packit Service |
392537 |
case NDMP3VER:
|
|
Packit Service |
392537 |
NDMC_WITH_VOID_REQUEST(ndmp3_config_get_connection_type, NDMP3VER)
|
|
Packit Service |
392537 |
rc = NDMC_CALL(conn);
|
|
Packit Service |
392537 |
if (rc) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1, "GET_CONNECTION_TYPE failed");
|
|
Packit Service |
392537 |
return rc;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < reply->addr_types.addr_types_len; i++) {
|
|
Packit Service |
392537 |
switch(reply->addr_types.addr_types_val[i]) {
|
|
Packit Service |
392537 |
case NDMP3_ADDR_LOCAL:
|
|
Packit Service |
392537 |
ca->has_local_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
case NDMP3_ADDR_TCP:
|
|
Packit Service |
392537 |
ca->has_tcp_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
default:
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
NDMC_FREE_REPLY();
|
|
Packit Service |
392537 |
NDMC_ENDWITH
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
#endif /* !NDMOS_OPTION_NO_NDMP3 */
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
#ifndef NDMOS_OPTION_NO_NDMP4
|
|
Packit Service |
392537 |
case NDMP4VER:
|
|
Packit Service |
392537 |
NDMC_WITH_VOID_REQUEST(ndmp4_config_get_connection_type, NDMP4VER)
|
|
Packit Service |
392537 |
rc = NDMC_CALL(conn);
|
|
Packit Service |
392537 |
if (rc) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1, "GET_CONNECTION_TYPE failed");
|
|
Packit Service |
392537 |
return rc;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; i < reply->addr_types.addr_types_len; i++) {
|
|
Packit Service |
392537 |
switch(reply->addr_types.addr_types_val[i]) {
|
|
Packit Service |
392537 |
case NDMP4_ADDR_LOCAL:
|
|
Packit Service |
392537 |
ca->has_local_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
case NDMP4_ADDR_TCP:
|
|
Packit Service |
392537 |
ca->has_tcp_addr = 1;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
default:
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
NDMC_FREE_REPLY();
|
|
Packit Service |
392537 |
NDMC_ENDWITH
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
#endif /* !NDMOS_OPTION_NO_NDMP4 */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_load_tape (struct ndm_session *sess)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_control_agent *ca = &sess->control_acb;
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ca->tape_mode = NDMP9_TAPE_READ_MODE;
|
|
Packit Service |
392537 |
ca->is_label_op = 1;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmca_op_robot_startup (sess, 1);
|
|
Packit Service |
392537 |
if (rc) return rc;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmca_connect_tape_agent(sess);
|
|
Packit Service |
392537 |
if (rc) {
|
|
Packit Service |
392537 |
ndmconn_destruct (sess->plumb.tape);
|
|
Packit Service |
392537 |
return rc; /* already tattled */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndmca_media_load_first (sess);
|
|
Packit Service |
392537 |
if (rc) return rc;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmca_tape_close (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_unload_tape (struct ndm_session *sess)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
ndmca_tape_open (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmca_media_unload_current(sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_check_expect_errs (struct ndmconn *conn, int rc,
|
|
Packit Service |
392537 |
ndmp9_error expect_errs[])
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_session *sess = conn->context;
|
|
Packit Service |
392537 |
int protocol_version = conn->protocol_version;
|
|
Packit Service |
392537 |
struct ndmp_xa_buf *xa = &conn->call_xa_buf;
|
|
Packit Service |
392537 |
unsigned msg = xa->request.header.message;
|
|
Packit Service |
392537 |
char * msgname = ndmp_message_to_str (protocol_version, msg);
|
|
Packit Service |
392537 |
ndmp9_error reply_error = conn->last_reply_error;
|
|
Packit Service |
392537 |
int i;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* make sure we have a 'test' active */
|
|
Packit Service |
392537 |
ndmca_test_open (sess, msgname, ndmp9_error_to_str (expect_errs[0]));
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc >= 0) {
|
|
Packit Service |
392537 |
/* Call succeeded. Body valid */
|
|
Packit Service |
392537 |
rc = 1;
|
|
Packit Service |
392537 |
for (i = 0; (int)expect_errs[i] >= 0; i++) {
|
|
Packit Service |
392537 |
if (reply_error == expect_errs[i]) {
|
|
Packit Service |
392537 |
rc = 0;
|
|
Packit Service |
392537 |
break;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc) {
|
|
Packit Service |
392537 |
if (reply_error != NDMP9_NO_ERR
|
|
Packit Service |
392537 |
&& expect_errs[0] != NDMP9_NO_ERR) {
|
|
Packit Service |
392537 |
/* both are errors, don't be picky */
|
|
Packit Service |
392537 |
rc = 2;
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
/* intolerable mismatch */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
/* Worked as expected */
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc != 0) {
|
|
Packit Service |
392537 |
char tmpbuf[128];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
for (i = 0; (int)expect_errs[i] >= 0; i++) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1,
|
|
Packit Service |
392537 |
"%s #%d -- .... %s %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
(i==0) ? "expected" : "or",
|
|
Packit Service |
392537 |
ndmp9_error_to_str (expect_errs[i]));
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
sprintf(tmpbuf, "got %s (error expected)", ndmp9_error_to_str (reply_error));
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc == 2)
|
|
Packit Service |
392537 |
ndmca_test_warn (sess, tmpbuf);
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
ndmca_test_fail (sess, tmpbuf);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndma_tattle (conn, xa, rc);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc == 2)
|
|
Packit Service |
392537 |
rc = 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return rc;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_check_expect (struct ndmconn *conn, int rc, ndmp9_error expect_err)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
ndmp9_error errs[2];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
errs[0] = expect_err;
|
|
Packit Service |
392537 |
errs[1] = -1;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return ndmca_test_check_expect_errs (conn, rc, errs);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_check_expect_no_err (struct ndmconn *conn, int rc)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
return ndmca_test_check_expect (conn, rc, NDMP9_NO_ERR);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_check_expect_illegal_state (struct ndmconn *conn, int rc)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
return ndmca_test_check_expect (conn, rc, NDMP9_ILLEGAL_STATE_ERR);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_check_expect_illegal_args (struct ndmconn *conn, int rc)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
return ndmca_test_check_expect (conn, rc, NDMP9_ILLEGAL_ARGS_ERR);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
int
|
|
Packit Service |
392537 |
ndmca_test_call (struct ndmconn *conn,
|
|
Packit Service |
392537 |
struct ndmp_xa_buf *xa, ndmp9_error expect_err)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_session *sess = conn->context;
|
|
Packit Service |
392537 |
int protocol_version = conn->protocol_version;
|
|
Packit Service |
392537 |
unsigned msg = xa->request.header.message;
|
|
Packit Service |
392537 |
char * msgname = ndmp_message_to_str (protocol_version, msg);
|
|
Packit Service |
392537 |
unsigned reply_error;
|
|
Packit Service |
392537 |
int rc;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* close previous test if there is one */
|
|
Packit Service |
392537 |
ndmca_test_close (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* open new 'test' */
|
|
Packit Service |
392537 |
ndmca_test_open (sess, msgname, ndmp9_error_to_str (expect_err));
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
rc = ndma_call_no_tattle (conn, xa);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
reply_error = ndmnmb_get_reply_error (&xa->reply);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc >= 0) {
|
|
Packit Service |
392537 |
/* Call succeeded. Body valid */
|
|
Packit Service |
392537 |
if (reply_error == expect_err) {
|
|
Packit Service |
392537 |
/* Worked exactly as expected */
|
|
Packit Service |
392537 |
rc = 0;
|
|
Packit Service |
392537 |
} else if (reply_error != NDMP9_NO_ERR
|
|
Packit Service |
392537 |
&& expect_err != NDMP9_NO_ERR) {
|
|
Packit Service |
392537 |
/* both are errors, don't be picky about the codes */
|
|
Packit Service |
392537 |
rc = 2;
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
/* intolerable mismatch */
|
|
Packit Service |
392537 |
rc = 1;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc != 0) {
|
|
Packit Service |
392537 |
char tmpbuf[128];
|
|
Packit Service |
392537 |
sprintf(tmpbuf, "got %s (call)", ndmp9_error_to_str (reply_error));
|
|
Packit Service |
392537 |
if (rc == 2)
|
|
Packit Service |
392537 |
ndmca_test_warn (sess, tmpbuf);
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
ndmca_test_fail (sess, tmpbuf);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndma_tattle (conn, xa, rc);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (rc == 2)
|
|
Packit Service |
392537 |
rc = 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
return rc;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* start or open a test if not already opened
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_open (struct ndm_session *sess, char *test_name, char *sub_test_name)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
static char test_name_buf[512];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (sess->control_acb.active_test == 0) {
|
|
Packit Service |
392537 |
/* record name */
|
|
Packit Service |
392537 |
if (sub_test_name)
|
|
Packit Service |
392537 |
sprintf(test_name_buf, "%s/%s", test_name, sub_test_name);
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
strcpy(test_name_buf, test_name);
|
|
Packit Service |
392537 |
sess->control_acb.active_test = test_name_buf;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* make sure flags are cleared */
|
|
Packit Service |
392537 |
sess->control_acb.active_test_failed = (char *)0;
|
|
Packit Service |
392537 |
sess->control_acb.active_test_warned = (char *)0;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_warn (struct ndm_session *sess, char *warn_msg)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
static char warn_msg_buf[512];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmca_test_open (sess, "UNKNOWN WARN", 0);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
strcpy(warn_msg_buf, warn_msg);
|
|
Packit Service |
392537 |
sess->control_acb.active_test_warned = warn_msg_buf;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_fail (struct ndm_session *sess, char *fail_msg)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
static char fail_msg_buf[512];
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmca_test_open (sess, "UNKNOWN FAIL", 0);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
strcpy(fail_msg_buf, fail_msg);
|
|
Packit Service |
392537 |
sess->control_acb.active_test_failed = fail_msg_buf;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* close or end a test if not already closed
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_close (struct ndm_session *sess)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
if (sess->control_acb.active_test != 0) {
|
|
Packit Service |
392537 |
/* count test */
|
|
Packit Service |
392537 |
sess->control_acb.n_step_tests++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* display results */
|
|
Packit Service |
392537 |
if (sess->control_acb.active_test_failed) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1,
|
|
Packit Service |
392537 |
"%s #%d -- Failed %s %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
sess->control_acb.active_test,
|
|
Packit Service |
392537 |
sess->control_acb.active_test_failed);
|
|
Packit Service |
392537 |
sess->control_acb.n_step_fail++;
|
|
Packit Service |
392537 |
exit(1);
|
|
Packit Service |
392537 |
} else if (sess->control_acb.active_test_warned) {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 1,
|
|
Packit Service |
392537 |
"%s #%d -- Almost %s %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
sess->control_acb.active_test,
|
|
Packit Service |
392537 |
sess->control_acb.active_test_warned);
|
|
Packit Service |
392537 |
sess->control_acb.n_step_warn++;
|
|
Packit Service |
392537 |
exit(1);
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", 2,
|
|
Packit Service |
392537 |
"%s #%d -- Passed %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
sess->control_acb.active_test);
|
|
Packit Service |
392537 |
sess->control_acb.n_step_pass++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* clear flags */
|
|
Packit Service |
392537 |
sess->control_acb.active_test = (char *)0;
|
|
Packit Service |
392537 |
sess->control_acb.active_test_failed = (char *)0;
|
|
Packit Service |
392537 |
sess->control_acb.active_test_warned = (char *)0;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* advance test count */
|
|
Packit Service |
392537 |
sess->control_acb.test_step++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* start a test phase (part of a series)
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_phase (struct ndm_session *sess, char *test_phase, char *desc)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
ndmalogf (sess, "TEST", 0, "Test %s -- %s", test_phase, desc);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
sess->control_acb.test_phase = test_phase;
|
|
Packit Service |
392537 |
sess->control_acb.test_step = 1;
|
|
Packit Service |
392537 |
sess->control_acb.n_step_pass = 0;
|
|
Packit Service |
392537 |
sess->control_acb.n_step_fail = 0;
|
|
Packit Service |
392537 |
sess->control_acb.n_step_warn = 0;
|
|
Packit Service |
392537 |
sess->control_acb.n_step_tests = 0;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_log_step (struct ndm_session *sess, int level, char *msg)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
int had_active = (sess->control_acb.active_test != 0);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", level, "%s #%d -- %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
msg);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* in case we have a open test -- close it */
|
|
Packit Service |
392537 |
ndmca_test_close (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* advance test count if we didn't have an active test */
|
|
Packit Service |
392537 |
if (!had_active)
|
|
Packit Service |
392537 |
sess->control_acb.test_step++;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_log_note (struct ndm_session *sess, int level, char *msg)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
ndmalogf (sess, "Test", level, "%s #%d %s",
|
|
Packit Service |
392537 |
sess->control_acb.test_phase,
|
|
Packit Service |
392537 |
sess->control_acb.test_step,
|
|
Packit Service |
392537 |
msg);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* finish a test phase (part of a series)
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_done_phase (struct ndm_session *sess)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_control_agent *ca = &sess->control_acb;
|
|
Packit Service |
392537 |
char * status;
|
|
Packit Service |
392537 |
int had_active = (sess->control_acb.active_test != 0);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* close previous test if there is one */
|
|
Packit Service |
392537 |
ndmca_test_close (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (ca->n_step_fail)
|
|
Packit Service |
392537 |
status = "Failed";
|
|
Packit Service |
392537 |
else if (ca->n_step_warn)
|
|
Packit Service |
392537 |
status = "Almost";
|
|
Packit Service |
392537 |
else if (ca->n_step_pass > 0)
|
|
Packit Service |
392537 |
status = "Passed";
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
status = "Whiffed";
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmalogf (sess, "TEST", 0, "Test %s %s -- pass=%d warn=%d fail=%d (total %d)",
|
|
Packit Service |
392537 |
ca->test_phase,
|
|
Packit Service |
392537 |
status,
|
|
Packit Service |
392537 |
ca->n_step_pass,
|
|
Packit Service |
392537 |
ca->n_step_warn,
|
|
Packit Service |
392537 |
ca->n_step_fail,
|
|
Packit Service |
392537 |
ca->n_step_tests);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ca->total_n_step_pass += ca->n_step_pass;
|
|
Packit Service |
392537 |
ca->total_n_step_warn += ca->n_step_warn;
|
|
Packit Service |
392537 |
ca->total_n_step_fail += ca->n_step_fail;
|
|
Packit Service |
392537 |
ca->total_n_step_tests += ca->n_step_tests;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* advance test count if we didn't have an active test so
|
|
Packit Service |
392537 |
* clean up phases have a new test count
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
if (!had_active)
|
|
Packit Service |
392537 |
sess->control_acb.test_step++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/*
|
|
Packit Service |
392537 |
* finish a test series (which may include test phases)
|
|
Packit Service |
392537 |
*/
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_done_series (struct ndm_session *sess, char *series_name)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
struct ndm_control_agent *ca = &sess->control_acb;
|
|
Packit Service |
392537 |
char * status;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
/* close previous test if there is one */
|
|
Packit Service |
392537 |
ndmca_test_close (sess);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (ca->total_n_step_fail)
|
|
Packit Service |
392537 |
status = "Failed";
|
|
Packit Service |
392537 |
else if (ca->total_n_step_warn)
|
|
Packit Service |
392537 |
status = "Almost";
|
|
Packit Service |
392537 |
else
|
|
Packit Service |
392537 |
status = "Passed";
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
ndmalogf (sess, "TEST", 0, "FINAL %s %s -- pass=%d warn=%d fail=%d (total %d)",
|
|
Packit Service |
392537 |
series_name,
|
|
Packit Service |
392537 |
status,
|
|
Packit Service |
392537 |
ca->total_n_step_pass,
|
|
Packit Service |
392537 |
ca->total_n_step_warn,
|
|
Packit Service |
392537 |
ca->total_n_step_fail,
|
|
Packit Service |
392537 |
ca->total_n_step_tests);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
void
|
|
Packit Service |
392537 |
ndmca_test_fill_data (char *buf, int bufsize, int recno, int fileno)
|
|
Packit Service |
392537 |
{
|
|
Packit Service |
392537 |
char * src;
|
|
Packit Service |
392537 |
char * srcend;
|
|
Packit Service |
392537 |
char * dst = buf;
|
|
Packit Service |
392537 |
char * dstend = buf+bufsize;
|
|
Packit Service |
392537 |
unsigned short sequence = 0;
|
|
Packit Service |
392537 |
struct {
|
|
Packit Service |
392537 |
unsigned short fileno;
|
|
Packit Service |
392537 |
unsigned short sequence;
|
|
Packit Service |
392537 |
unsigned long recno;
|
|
Packit Service |
392537 |
} x;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
x.fileno = fileno;
|
|
Packit Service |
392537 |
x.recno = recno;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
srcend = (char *) &x;
|
|
Packit Service |
392537 |
srcend += sizeof x;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
while (dst < dstend) {
|
|
Packit Service |
392537 |
x.sequence = sequence++;
|
|
Packit Service |
392537 |
src = (char *) &x;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
while (src < srcend && dst < dstend)
|
|
Packit Service |
392537 |
*dst++ = *src++;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
#endif /* !NDMOS_OPTION_NO_CONTROL_AGENT */
|