1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
/* Test for issue 334-cfdp-transaction-id
* Ensure that CFDP actually returns a transaction
* ID to the caller of cfdp_put, cfdp_get,
* and cfdp_rput.
*
* Author: Samuel Jero
* Date: December 2011 */
#include <cfdp.h>
#include <stdlib.h>
#include "check.h"
#include "testutil.h"
typedef struct
{
CfdpHandler faultHandlers[16];
CfdpNumber destinationEntityNbr;
char sourceFileNameBuf[256];
char *sourceFileName;
char destFileNameBuf[256];
char *destFileName;
BpUtParms utParms;
MetadataList msgsToUser;
MetadataList fsRequests;
CfdpTransactionId transactionId;
} CfdpReqParms;
int main(int argc, char **argv)
{
CfdpReqParms parms;
uvast src;
uvast tid;
int ret;
/* Start ION */
printf("Starting ION...\n");
_xadmin("ionadmin", "", "cfdp.ipn.bp.ltp.udp/config.ionrc");
_xadmin("ltpadmin", "", "cfdp.ipn.bp.ltp.udp/config.ltprc");
_xadmin("bpadmin", "", "cfdp.ipn.bp.ltp.udp/config.bprc");
_xadmin("ipnadmin", "", "cfdp.ipn.bp.ltp.udp/config.ipnrc");
_xadmin("cfdpadmin", "", "cfdp.ipn.bp.ltp.udp/config.cfdprc");
/* Attach to CFDP */
fail_unless(cfdp_attach() >= 0);
/*Send test file*/
memset((char *) &parms, 0, sizeof(CfdpReqParms));
cfdp_compress_number(&parms.destinationEntityNbr, 1);
parms.utParms.lifespan = 86400;
parms.utParms.classOfService = BP_STD_PRIORITY;
parms.utParms.custodySwitch = NoCustodyRequested;
parms.fsRequests=0;
parms.msgsToUser=0;
strcpy(parms.sourceFileNameBuf, "dotest.c");
strcpy(parms.destFileNameBuf, "testfile");
parms.sourceFileName=parms.sourceFileNameBuf;
parms.destFileName=parms.destFileNameBuf;
printf("Starting CFDP Transaction...\n");
fail_unless(cfdp_put(&(parms.destinationEntityNbr),
sizeof(BpUtParms),
(unsigned char *) &(parms.utParms),
parms.sourceFileName,
parms.destFileName, NULL,
parms.faultHandlers, 0, NULL,
parms.msgsToUser,
parms.fsRequests,
&(parms.transactionId)) >= 0);
printf("Call returned...\n");
/* Stop ION */
printf("Stopping ION...\n");
writeErrmsgMemos();
_xadmin("cfdpadmin", "", ".");
ionstop();
/*Fail on ION start/stop errors*/
if(check_summary(argv[0])==1){
return 1;
}
/* Check to see if a transaction ID was returned*/
printf("Checking transaction ID...\n");
cfdp_decompress_number(&src, &parms.transactionId.sourceEntityNbr);
cfdp_decompress_number(&tid, &parms.transactionId.transactionNbr);
if(src != 0 && tid!=0) {
/*Success!*/
ret=0;
printf("A valid Transaction ID was returned. SUCCESS!\n");
} else {
ret=1;/*Failure*/
printf("No Transaction ID returned. FAILURE!\n");
}
return ret;
}
|