0
@@ -13,12 +17,31 @@ namespace tut {
0
oldPath = getenv("PATH");
0
+ unsetenv("PHUSION_PASSENGER_TMP");
0
setenv("PATH", oldPath.c_str(), 1);
0
+ unsetenv("PHUSION_PASSENGER_TMP");
0
+ listDir(const char *path) {
0
+ vector<string> result;
0
+ DIR *d = opendir(path);
0
+ while ((ent = readdir(d)) != NULL) {
0
+ if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
0
+ result.push_back(ent->d_name);
0
DEFINE_TEST_GROUP(UtilsTest);
0
@@ -98,4 +121,106 @@ namespace tut {
0
setenv("PATH", binpath.c_str(), 1);
0
ensure("Spawn server is found.", !findSpawnServer().empty());
0
+ /***** Test getTempDir() *****/
0
+ // It returns "/tmp" if the TMP environment is NULL.
0
+ ensure_equals(string(getTempDir()), "/tmp");
0
+ // It returns "/tmp" if the TMP environment is an empty string.
0
+ ensure_equals(string(getTempDir()), "/tmp");
0
+ // It returns the value of the TMP environment if it is not NULL and not empty.
0
+ setenv("TMP", "/foo", 1);
0
+ ensure_equals(string(getTempDir()), "/foo");
0
+ /***** Test getPassengerTempDir() *****/
0
+ // It returns "(tempdir)/passenger.(pid)"
0
+ snprintf(dir, sizeof(dir), "/tmp/passenger.%d", getpid());
0
+ ensure_equals(getPassengerTempDir(), dir);
0
+ // It caches the result into the PHUSION_PASSENGER_TMP environment variable.
0
+ snprintf(dir, sizeof(dir), "/tmp/passenger.%d", getpid());
0
+ getPassengerTempDir();
0
+ ensure_equals(getenv("PHUSION_PASSENGER_TMP"), string(dir));
0
+ // It returns the value of the PHUSION_PASSENGER_TMP environment variable if it's not NULL and not an empty string.
0
+ setenv("PHUSION_PASSENGER_TMP", "/foo", 1);
0
+ ensure_equals(getPassengerTempDir(), "/foo");
0
+ // It does not use query the PHUSION_PASSENGER_TMP environment variable if bypassCache is true.
0
+ setenv("PHUSION_PASSENGER_TMP", "/foo", 1);
0
+ snprintf(dir, sizeof(dir), "/tmp/passenger.%d", getpid());
0
+ ensure_equals(getPassengerTempDir(true), dir);
0
+ /***** Test TempFile *****/
0
+ // It creates a temp file inside getPassengerTempDir().
0
+ setenv("PHUSION_PASSENGER_TMP", "utils_test.tmp", 1);
0
+ mkdir("utils_test.tmp", S_IRWXU);
0
+ TempFile t("temp", false);
0
+ unsigned int size = listDir("utils_test.tmp").size();
0
+ removeDirTree("utils_test.tmp");
0
+ ensure_equals(size, 1u);
0
+ // It deletes the temp file upon destruction.
0
+ setenv("PHUSION_PASSENGER_TMP", "utils_test.tmp", 1);
0
+ mkdir("utils_test.tmp", S_IRWXU);
0
+ TempFile t("temp", false);
0
+ bool dirEmpty = listDir("utils_test.tmp").empty();
0
+ removeDirTree("utils_test.tmp");
0
+ // The temp file's filename is constructed using the given identifier.
0
+ setenv("PHUSION_PASSENGER_TMP", "utils_test.tmp", 1);
0
+ mkdir("utils_test.tmp", S_IRWXU);
0
+ TempFile t("foobar", false);
0
+ vector<string> files(listDir("utils_test.tmp"));
0
+ removeDirTree("utils_test.tmp");
0
+ ensure(files[0].find("foobar") != string::npos);
0
+ // It immediately unlinks the temp file if 'anonymous' is true.
0
+ // It creates a temp file inside getPassengerTempDir().
0
+ setenv("PHUSION_PASSENGER_TMP", "utils_test.tmp", 1);
0
+ mkdir("utils_test.tmp", S_IRWXU);
0
+ unsigned int size = listDir("utils_test.tmp").size();
0
+ removeDirTree("utils_test.tmp");
0
+ ensure_equals(size, 0u);
Comments
No one has commented yet.