LONGBOW_TEST_CASE(Global, athenaTransportLinkAdapter_SetLogLevel) { PARCURI *connectionURI; const char *result; AthenaTransportLinkAdapter *athenaTransportLinkAdapter = athenaTransportLinkAdapter_Create(_removeLink, NULL); assertNotNull(athenaTransportLinkAdapter, "athenaTransportLinkAdapter_Create returned NULL"); _LoadModule(athenaTransportLinkAdapter, "TCP"); connectionURI = parcURI_Parse("tcp://127.0.0.1:50200/listener/name=TCPListener"); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed (%s)", strerror(errno)); parcURI_Release(&connectionURI); connectionURI = parcURI_Parse("tcp://127.0.0.1:50200/name=TCP_0"); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed (%s)", strerror(errno)); parcURI_Release(&connectionURI); athenaTransportLinkAdapter_SetLogLevel(athenaTransportLinkAdapter, 0); athenaTransportLinkAdapter_SetLogLevel(athenaTransportLinkAdapter, PARCLogLevel_Debug); int closeResult = athenaTransportLinkAdapter_CloseByName(athenaTransportLinkAdapter, "TCP_0"); assertTrue(closeResult == 0, "athenaTransportLinkAdapter_CloseByName failed (%s)", strerror(errno)); athenaTransportLinkAdapter_Destroy(&athenaTransportLinkAdapter); }
static CCNxMetaMessage * _Control_Command_Set(Athena *athena, CCNxName *ccnxName, const char *command) { CCNxMetaMessage *responseMessage = NULL; if (ccnxName_GetSegmentCount(ccnxName) <= (AthenaCommandSegment + 2)) { responseMessage = _create_response(athena, ccnxName, "Athena set arguments required <name> <value>"); return responseMessage; } // Check for required set name argument CCNxNameSegment *nameSegment = ccnxName_GetSegment(ccnxName, AthenaCommandSegment + 1); char *name = ccnxNameSegment_ToString(nameSegment); if (strcasecmp(name, AthenaCommand_LogLevel) == 0) { // Check the level to set the log to nameSegment = ccnxName_GetSegment(ccnxName, AthenaCommandSegment + 2); char *level = ccnxNameSegment_ToString(nameSegment); if (strcasecmp(level, AthenaCommand_LogDebug) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Debug); parcLog_SetLevel(athena->log, PARCLogLevel_Debug); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogDebug); } else if (strcasecmp(level, AthenaCommand_LogInfo) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Info); parcLog_SetLevel(athena->log, PARCLogLevel_Info); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogInfo); } else if (strcasecmp(level, AthenaCommand_LogOff) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Off); parcLog_SetLevel(athena->log, PARCLogLevel_Off); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogOff); } else if (strcasecmp(level, AthenaCommand_LogAll) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_All); parcLog_SetLevel(athena->log, PARCLogLevel_All); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogAll); } else if (strcasecmp(level, AthenaCommand_LogError) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Error); parcLog_SetLevel(athena->log, PARCLogLevel_Error); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogError); } else if (strcasecmp(level, AthenaCommand_LogNotice) == 0) { athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Notice); parcLog_SetLevel(athena->log, PARCLogLevel_Notice); athenaInterestControl_LogConfigurationChange(athena, ccnxName, NULL); responseMessage = _create_response(athena, ccnxName, "set athena logging level to %s", AthenaCommand_LogNotice); } else { responseMessage = _create_response(athena, ccnxName, "unknown logging level (%s)", level); } parcMemory_Deallocate(&level); } else { responseMessage = _create_response(athena, ccnxName, "Athena unknown set name (%s)", name); } parcMemory_Deallocate(&name); return responseMessage; }
static void _parseCommandLine(Athena *athena, int argc, char **argv) { int c; bool interfaceConfigured = false; while ((c = getopt_long(argc, argv, "hs:c:vd", options, NULL)) != -1) { switch (c) { case 's': { int sizeInMB = atoi(optarg); if (athenaContentStore_SetCapacity(athena->athenaContentStore, sizeInMB) != true) { parcLog_Error(athena->log, "Unable to resize content store to %d (MB)", sizeInMB); } _contentStoreSizeInMB = sizeInMB; break; } case 'c': { PARCURI *connectionURI = parcURI_Parse(optarg); const char *result = athenaTransportLinkAdapter_Open(athena->athenaTransportLinkAdapter, connectionURI); if (result == NULL) { parcLog_Error(athena->log, "Unable to configure %s: %s", optarg, strerror(errno)); parcURI_Release(&connectionURI); exit(EXIT_FAILURE); } parcURI_Release(&connectionURI); interfaceConfigured = true; break; } case 'v': printf("%s\n", athenaAbout_Version()); exit(0); case 'd': athenaTransportLinkAdapter_SetLogLevel(athena->athenaTransportLinkAdapter, PARCLogLevel_Debug); parcLog_SetLevel(athena->log, PARCLogLevel_Debug); break; case 'h': default: _usage(); exit(EXIT_FAILURE); break; } } if (argc - optind) { parcLog_Error(athena->log, "Bad arguments"); _usage(); exit(EXIT_FAILURE); } if (interfaceConfigured != true) { PARCURI *connectionURI = parcURI_Parse(_athenaDefaultConnectionURI); if (athenaTransportLinkAdapter_Open(athena->athenaTransportLinkAdapter, connectionURI) == NULL) { parcLog_Error(athena->log, "Unable to configure an interface. Exiting..."); parcURI_Release(&connectionURI); exit(EXIT_FAILURE); } parcURI_Release(&connectionURI); struct utsname name; if (uname(&name) == 0) { char nodeURIspecification[MAXPATHLEN]; sprintf(nodeURIspecification, "tcp://%s:%d/listener", name.nodename, AthenaDefaultListenerPort); PARCURI *nodeURI = parcURI_Parse(nodeURIspecification); if (athenaTransportLinkAdapter_Open(athena->athenaTransportLinkAdapter, nodeURI) == NULL) { parcURI_Release(&nodeURI); } } } }
LONGBOW_TEST_CASE(Global, athenaTransportLinkModuleTEMPLATE_SendReceive) { PARCURI *connectionURI; char linkSpecificationURI[MAXPATHLEN]; const char *result; AthenaTransportLinkAdapter *athenaTransportLinkAdapter = athenaTransportLinkAdapter_Create(_removeLink, NULL); assertNotNull(athenaTransportLinkAdapter, "athenaTransportLinkAdapter_Create returned NULL"); // Open a link we can send messages on sprintf(linkSpecificationURI, "template:///name=TEMPLATE_1"); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed (%s)", strerror(errno)); parcURI_Release(&connectionURI); // Enable debug logging after all instances are open athenaTransportLinkAdapter_SetLogLevel(athenaTransportLinkAdapter, PARCLogLevel_Debug); // Construct an interest CCNxName *name = ccnxName_CreateFromCString("lci:/foo/bar"); CCNxMetaMessage *ccnxMetaMessage = ccnxInterest_CreateSimple(name); ccnxName_Release(&name); PARCBitVector *sendVector = parcBitVector_Create(); // Send the interest out on the link, this message will also be received by ourself // since we're sending it to our own MAC destination. int linkId = athenaTransportLinkAdapter_LinkNameToId(athenaTransportLinkAdapter, "TEMPLATE_1"); parcBitVector_Set(sendVector, linkId); athena_EncodeMessage(ccnxMetaMessage); PARCBitVector *resultVector; resultVector = athenaTransportLinkAdapter_Send(athenaTransportLinkAdapter, ccnxMetaMessage, sendVector); assertNull(resultVector, "athenaTransportLinkAdapter_Send failed"); // Send the message a second time resultVector = athenaTransportLinkAdapter_Send(athenaTransportLinkAdapter, ccnxMetaMessage, sendVector); assertNull(resultVector, "athenaTransportLinkAdapter_Send failed"); parcBitVector_Release(&sendVector); ccnxMetaMessage_Release(&ccnxMetaMessage); ccnxMetaMessage = athenaTransportLinkAdapter_Receive(athenaTransportLinkAdapter, &resultVector, 0); assertNotNull(resultVector, "athenaTransportLinkAdapter_Receive failed"); assertTrue(parcBitVector_NumberOfBitsSet(resultVector) == 1, "athenaTransportLinkAdapter_Receive return message with more than one ingress link"); assertNotNull(ccnxMetaMessage, "athenaTransportLinkAdapter_Receive failed to provide message"); parcBitVector_Release(&resultVector); ccnxMetaMessage_Release(&ccnxMetaMessage); // Receive the duplicate ccnxMetaMessage = athenaTransportLinkAdapter_Receive(athenaTransportLinkAdapter, &resultVector, 0); assertTrue(ccnxMetaMessage != NULL, "athenaTransportLinkAdapter_Receive failed to receive duplicate message"); parcBitVector_Release(&resultVector); ccnxMetaMessage_Release(&ccnxMetaMessage); // Nothing else should remain ccnxMetaMessage = athenaTransportLinkAdapter_Receive(athenaTransportLinkAdapter, &resultVector, 0); assertTrue(ccnxMetaMessage == NULL, "athenaTransportLinkAdapter_Receive received extraneous message"); int closeResult = athenaTransportLinkAdapter_CloseByName(athenaTransportLinkAdapter, "TEMPLATE_1"); assertTrue(closeResult == 0, "athenaTransportLinkAdapter_CloseByName failed (%s)", strerror(errno)); athenaTransportLinkAdapter_Destroy(&athenaTransportLinkAdapter); }
LONGBOW_TEST_CASE(Global, athenaTransportLinkModuleTEMPLATE_OpenClose) { PARCURI *connectionURI; const char *result; char linkSpecificationURI[MAXPATHLEN]; AthenaTransportLinkAdapter *athenaTransportLinkAdapter = athenaTransportLinkAdapter_Create(_removeLink, NULL); assertNotNull(athenaTransportLinkAdapter, "athenaTransportLinkAdapter_Create returned NULL"); athenaTransportLinkAdapter_SetLogLevel(athenaTransportLinkAdapter, PARCLogLevel_Debug); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, NULL); assertTrue(result == NULL, "athenaTransportLinkAdapter_Open failed to detect bad URI argument"); sprintf(linkSpecificationURI, "template:///name="); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result == NULL, "athenaTransportLinkAdapter_Open failed to detect bad name argument"); parcURI_Release(&connectionURI); sprintf(linkSpecificationURI, "template:///local="); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result == NULL, "athenaTransportLinkAdapter_Open failed to detect bad local argument"); parcURI_Release(&connectionURI); sprintf(linkSpecificationURI, "template:///local=true"); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed to read true local argument"); parcURI_Release(&connectionURI); int closeResult = athenaTransportLinkAdapter_CloseByName(athenaTransportLinkAdapter, result); assertTrue(closeResult == 0, "athenaTransportLinkAdapter_CloseByName failed (%s)", strerror(errno)); sprintf(linkSpecificationURI, "template:///local=false"); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed to read false local argument"); parcURI_Release(&connectionURI); closeResult = athenaTransportLinkAdapter_CloseByName(athenaTransportLinkAdapter, result); assertTrue(closeResult == 0, "athenaTransportLinkAdapter_CloseByName failed (%s)", strerror(errno)); sprintf(linkSpecificationURI, "template:///nameo="); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result == NULL, "athenaTransportLinkAdapter_Open failed to detect bad name specification"); parcURI_Release(&connectionURI); sprintf(linkSpecificationURI, "template:///name=TEMPLATE_1"); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result != NULL, "athenaTransportLinkAdapter_Open failed (%s)", strerror(errno)); parcURI_Release(&connectionURI); sprintf(linkSpecificationURI, "template:///name=TEMPLATE_1"); connectionURI = parcURI_Parse(linkSpecificationURI); result = athenaTransportLinkAdapter_Open(athenaTransportLinkAdapter, connectionURI); assertTrue(result == NULL, "athenaTransportLinkAdapter_Open succeeded in opening a duplicate link"); parcURI_Release(&connectionURI); closeResult = athenaTransportLinkAdapter_CloseByName(athenaTransportLinkAdapter, "TEMPLATE_1"); assertTrue(closeResult == 0, "athenaTransportLinkAdapter_CloseByName failed (%s)", strerror(errno)); athenaTransportLinkAdapter_Destroy(&athenaTransportLinkAdapter); }