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);