You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2005/03/15 20:41:33 UTC

cvs commit: logging-log4cxx/tests/src/helpers optionconvertertestcase.cpp

carnold     2005/03/15 11:41:33

  Modified:    src      system.cpp
               tests/src/helpers optionconvertertestcase.cpp
  Log:
  LOGCXX-76: user.home et al within config files
  
  Revision  Changes    Path
  1.20      +51 -1     logging-log4cxx/src/system.cpp
  
  Index: system.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/system.cpp,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- system.cpp	15 Feb 2005 23:56:01 -0000	1.19
  +++ system.cpp	15 Mar 2005 19:41:32 -0000	1.20
  @@ -28,6 +28,10 @@
   #include <log4cxx/helpers/properties.h>
   #include <log4cxx/helpers/transcoder.h>
   #include <stdlib.h>
  +#include <log4cxx/helpers/pool.h>
  +#include <apr_file_io.h>
  +#include <apr_user.h>
  +
   
   using namespace log4cxx;
   using namespace log4cxx::helpers;
  @@ -40,8 +44,54 @@
                   throw IllegalArgumentException("key is empty");
           }
   
  -        LOG4CXX_ENCODE_CHAR(key, lkey);
           LogString rv;
  +        if (lkey == LOG4CXX_STR("java.io.tmpdir")) {
  +          Pool p;
  +          const char* dir = NULL;
  +          apr_status_t stat = apr_temp_dir_get(&dir, (apr_pool_t*) p.getAPRPool());
  +          if (stat == APR_SUCCESS) {
  +            Transcoder::decode(dir, strlen(dir), rv);
  +          }
  +          return rv;
  +        }
  +
  +        if (lkey == LOG4CXX_STR("user.dir")) {
  +          Pool p;
  +          char* dir = NULL;
  +          apr_status_t stat = apr_filepath_get(&dir, APR_FILEPATH_NATIVE,
  +              (apr_pool_t*) p.getAPRPool());
  +          if (stat == APR_SUCCESS) {
  +            Transcoder::decode(dir, strlen(dir), rv);
  +          }
  +          return rv;
  +        }
  +#if APR_HAS_USER
  +        if (lkey == LOG4CXX_STR("user.home") || lkey == LOG4CXX_STR("user.name")) {
  +          Pool pool;
  +          apr_uid_t userid;
  +          apr_gid_t groupid;
  +          apr_pool_t* p = (apr_pool_t*) pool.getAPRPool();
  +          apr_status_t stat = apr_uid_current(&userid, &groupid, p);
  +          if (stat == APR_SUCCESS) {
  +            char* username = NULL;
  +            stat = apr_uid_name_get(&username, userid, p);
  +            if (stat == APR_SUCCESS) {
  +              if (lkey == LOG4CXX_STR("user.name")) {
  +                Transcoder::decode(username, strlen(username), rv);
  +              } else {
  +                char* dirname = NULL;
  +                stat = apr_uid_homepath_get(&dirname, username, p);
  +                if (stat == APR_SUCCESS) {
  +                  Transcoder::decode(dirname, strlen(dirname), rv);
  +                }
  +              }
  +            }
  +          }
  +          return rv;
  +        }
  +#endif
  +
  +        LOG4CXX_ENCODE_CHAR(key, lkey);
           const char * value = ::getenv(key.c_str());
           if (value != 0) {
                   Transcoder::decode(value, rv);
  
  
  
  1.10      +95 -2     logging-log4cxx/tests/src/helpers/optionconvertertestcase.cpp
  
  Index: optionconvertertestcase.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/tests/src/helpers/optionconvertertestcase.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- optionconvertertestcase.cpp	1 Mar 2005 23:30:45 -0000	1.9
  +++ optionconvertertestcase.cpp	15 Mar 2005 19:41:33 -0000	1.10
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2003,2004 The Apache Software Foundation.
  + * Copyright 2003,2005 The Apache Software Foundation.
    *
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -24,6 +24,9 @@
   #include "../testchar.h"
   #include "../insertwide.h"
   #include <stdlib.h>
  +#include <apr_pools.h>
  +#include <apr_file_io.h>
  +#include <apr_user.h>
   
   
   using namespace log4cxx;
  @@ -40,6 +43,12 @@
         CPPUNIT_TEST(varSubstTest3);
         CPPUNIT_TEST(varSubstTest4);
         CPPUNIT_TEST(varSubstTest5);
  +      CPPUNIT_TEST(testTmpDir);
  +#if APR_HAS_USER
  +      CPPUNIT_TEST(testUserHome);
  +      CPPUNIT_TEST(testUserName);
  +#endif
  +      CPPUNIT_TEST(testUserDir);
      CPPUNIT_TEST_SUITE_END();
   
      Properties props;
  @@ -125,7 +134,91 @@
         CPPUNIT_ASSERT_EQUAL((LogString) LOG4CXX_STR("x1"), res);
      }
   
  -        private:
  +    void testTmpDir()
  +    {
  +       LogString actual(OptionConverter::substVars(
  +          LOG4CXX_STR("${java.io.tmpdir}"), nullProperties));
  +       apr_pool_t* p;
  +       apr_status_t stat = apr_pool_create(&p, NULL);
  +       CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +       const char* tmpdir = NULL;
  +       stat = apr_temp_dir_get(&tmpdir, p);
  +       CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +       LogString expected;
  +       Transcoder::decode(tmpdir, strlen(tmpdir), expected);
  +       apr_pool_destroy(p);
  +
  +       CPPUNIT_ASSERT_EQUAL(expected, actual);
  +    }
  +
  +#if APR_HAS_USER
  +    void testUserHome() {
  +      LogString actual(OptionConverter::substVars(
  +         LOG4CXX_STR("${user.home}"), nullProperties));
  +      apr_pool_t* p;
  +      apr_status_t stat = apr_pool_create(&p, NULL);
  +      CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +      apr_uid_t userid;
  +      apr_gid_t groupid;
  +      stat = apr_uid_current(&userid, &groupid, p);
  +      CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +      char* username = NULL;
  +      stat = apr_uid_name_get(&username, userid, p);
  +      CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +      char* dirname = NULL;
  +      stat = apr_uid_homepath_get(&dirname, username, p);
  +
  +      LogString expected;
  +      Transcoder::decode(dirname, strlen(dirname), expected);
  +      apr_pool_destroy(p);
  +
  +      CPPUNIT_ASSERT_EQUAL(expected, actual);
  +    }
  +
  +    void testUserName() {
  +       LogString actual(OptionConverter::substVars(
  +           LOG4CXX_STR("${user.name}"), nullProperties));
  +       apr_pool_t* p;
  +       apr_status_t stat = apr_pool_create(&p, NULL);
  +       CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +       apr_uid_t userid;
  +       apr_gid_t groupid;
  +       stat = apr_uid_current(&userid, &groupid, p);
  +       CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +       char* username = NULL;
  +       stat = apr_uid_name_get(&username, userid, p);
  +       CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +       LogString expected;
  +       Transcoder::decode(username, strlen(username), expected);
  +       apr_pool_destroy(p);
  +
  +       CPPUNIT_ASSERT_EQUAL(expected, actual);
  +   }
  +#endif
  +
  +    void testUserDir() {
  +      LogString actual(OptionConverter::substVars(
  +          LOG4CXX_STR("${user.dir}"), nullProperties));
  +      apr_pool_t* p;
  +      apr_status_t stat = apr_pool_create(&p, NULL);
  +      CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +      char* dirname = NULL;
  +      stat = apr_filepath_get(&dirname, APR_FILEPATH_NATIVE, p);
  +      CPPUNIT_ASSERT_EQUAL(APR_SUCCESS, stat);
  +
  +      LogString expected;
  +      Transcoder::decode(dirname, strlen(dirname), expected);
  +      apr_pool_destroy(p);
  +
  +      CPPUNIT_ASSERT_EQUAL(expected, actual);
  +    }
   };
   
   CPPUNIT_TEST_SUITE_REGISTRATION(OptionConverterTestCase);