1414#include " common/c-api/zmqconsumerstatetable.h"
1515#include " common/c-api/zmqproducerstatetable.h"
1616#include " common/c-api/zmqserver.h"
17+ #include " common/c-api/logger.h"
1718#include " common/select.h"
1819#include " common/subscriberstatetable.h"
1920#include " gtest/gtest.h"
2021
2122using namespace std ;
2223using namespace swss ;
2324
25+ static char LOG_LEVEL_FOR_TEST[32 ] = " " ;
26+ static char LOG_OUTPUT_FOR_TEST[32 ] = " " ;
27+ static const char * LOG_NAME_FOR_TEST = " test" ;
28+
2429static void clearDB () {
2530 DBConnector db (" TEST_DB" , 0 , true );
2631 RedisReply r (&db, " FLUSHALL" , REDIS_REPLY_STATUS);
@@ -87,6 +92,20 @@ struct SWSSStringManager {
8792 }
8893};
8994
95+ void logLevelNotify (const char * component, const char * prioStr)
96+ {
97+ if (strcmp (component, LOG_NAME_FOR_TEST) != 0 )
98+ return ;
99+ strncpy (LOG_LEVEL_FOR_TEST, prioStr, sizeof (LOG_LEVEL_FOR_TEST)-1 );
100+ }
101+
102+ void logOutputNotify (const char * component, const char * outputStr)
103+ {
104+ if (strcmp (component, LOG_NAME_FOR_TEST) != 0 )
105+ return ;
106+ strncpy (LOG_OUTPUT_FOR_TEST, outputStr, sizeof (LOG_OUTPUT_FOR_TEST)-1 );
107+ }
108+
90109TEST (c_api, DBConnector) {
91110 clearDB ();
92111 SWSSStringManager sm;
@@ -483,3 +502,40 @@ TEST(c_api, exceptions) {
483502 SWSSString_free (result.location );
484503 SWSSString_free (result.message );
485504}
505+
506+ TEST (c_api, Logger) {
507+
508+ clearDB ();
509+ SWSSStringManager sm;
510+
511+ SWSSDBConnector db;
512+ SWSSFieldValueArray fvs;
513+
514+ SWSSDBConnector_new_named (" CONFIG_DB" , 1000 , true , &db);
515+
516+ SWSSLogger_linkToDbWithOutput (LOG_NAME_FOR_TEST, logLevelNotify, " NOTICE" , logOutputNotify, " SYSLOG" );
517+ SWSSLogger_restartLogger ();
518+
519+ sleep (1 );
520+
521+ cout << " Checking log level for " << LOG_NAME_FOR_TEST << endl;
522+ EXPECT_STREQ (LOG_LEVEL_FOR_TEST, " NOTICE" );
523+ cout << " Checking log output for " << LOG_NAME_FOR_TEST << endl;
524+ EXPECT_STREQ (LOG_OUTPUT_FOR_TEST, " SYSLOG" );
525+
526+ cout << " Setting log level/output for " << LOG_NAME_FOR_TEST << endl;
527+ SWSSTable tbl;
528+ SWSSTable_new (db, " LOGGER" , &tbl);
529+ SWSSFieldValueTuple data[2 ] = {{.field = DAEMON_LOGLEVEL, .value = sm.makeString (" DEBUG" )},
530+ {.field = DAEMON_LOGOUTPUT, .value = sm.makeString (" STDOUT" )}};
531+ fvs.len = 2 ;
532+ fvs.data = data;
533+ SWSSTable_set (tbl, LOG_NAME_FOR_TEST, fvs);
534+
535+ sleep (1 );
536+
537+ cout << " Checking log level for " << LOG_NAME_FOR_TEST << endl;
538+ EXPECT_STREQ (LOG_LEVEL_FOR_TEST, " DEBUG" );
539+ cout << " Checking log output for " << LOG_NAME_FOR_TEST << endl;
540+ EXPECT_STREQ (LOG_OUTPUT_FOR_TEST, " STDOUT" );
541+ }
0 commit comments