/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "../task-controller.h" #define HADOOP_CONF_DIR "/tmp" int write_config_file(char *file_name) { FILE *file; char const *str = "mapreduce.cluster.local.dir=/tmp/testing1,/tmp/testing2,/tmp/testing3,/tmp/testing4\n"; file = fopen(file_name, "w"); if (file == NULL) { printf("Failed to open %s.\n", file_name); return EXIT_FAILURE; } fwrite(str, 1, strlen(str), file); fclose(file); return 0; } void test_check_variable_against_config() { // A temporary configuration directory char *conf_dir_templ = "/tmp/test-task-controller-conf-dir-XXXXXX"; // To accomodate "/conf/taskcontroller.cfg" char template[strlen(conf_dir_templ) + strlen("/conf/taskcontroller.cfg")]; strcpy(template, conf_dir_templ); char *temp_dir = mkdtemp(template); if (temp_dir == NULL) { printf("Couldn't create a temporary dir for conf.\n"); goto cleanup; } // Set the configuration directory hadoop_conf_dir = strdup(temp_dir); // create the configuration directory strcat(template, "/conf"); char *conf_dir = strdup(template); mkdir(conf_dir, S_IRWXU); // create the configuration file strcat(template, "/taskcontroller.cfg"); if (write_config_file(template) != 0) { printf("Couldn't write the configuration file.\n"); goto cleanup; } // Test obtaining a value for a key from the config char *config_values[4] = { "/tmp/testing1", "/tmp/testing2", "/tmp/testing3", "/tmp/testing4" }; char *value = (char *) get_value("mapreduce.cluster.local.dir"); if (strcmp(value, "/tmp/testing1,/tmp/testing2,/tmp/testing3,/tmp/testing4") != 0) { printf("Obtaining a value for a key from the config failed.\n"); goto cleanup; } // Test the parsing of a multiple valued key from the config char **values = (char **)get_values("mapreduce.cluster.local.dir"); char **values_ptr = values; int i = 0; while (*values_ptr != NULL) { printf(" value : %s\n", *values_ptr); if (strcmp(*values_ptr, config_values[i++]) != 0) { printf("Configured values are not read out properly. Test failed!"); goto cleanup;; } values_ptr++; } if (check_variable_against_config("mapreduce.cluster.local.dir", "/tmp/testing5") == 0) { printf("Configuration should not contain /tmp/testing5! \n"); goto cleanup; } if (check_variable_against_config("mapreduce.cluster.local.dir", "/tmp/testing4") != 0) { printf("Configuration should contain /tmp/testing4! \n"); goto cleanup; } cleanup: if (value != NULL) { free(value); } if (values != NULL) { free(values); } if (hadoop_conf_dir != NULL) { free(hadoop_conf_dir); } unlink(template); rmdir(conf_dir); rmdir(hadoop_conf_dir); } void test_get_user_directory() { char *user_dir = (char *) get_user_directory("/tmp", "user"); printf("user_dir obtained is %s\n", user_dir); int ret = 0; if (strcmp(user_dir, "/tmp/taskTracker/user") != 0) { ret = -1; } free(user_dir); assert(ret == 0); } void test_get_job_directory() { char *job_dir = (char *) get_job_directory("/tmp", "user", "job_200906101234_0001"); printf("job_dir obtained is %s\n", job_dir); int ret = 0; if (strcmp(job_dir, "/tmp/taskTracker/user/jobcache/job_200906101234_0001") != 0) { ret = -1; } free(job_dir); assert(ret == 0); } void test_get_attempt_directory() { char *job_dir = (char *) get_job_directory("/tmp", "user", "job_200906101234_0001"); printf("job_dir obtained is %s\n", job_dir); char *attempt_dir = (char *) get_attempt_directory(job_dir, "attempt_200906101234_0001_m_000000_0"); printf("attempt_dir obtained is %s\n", attempt_dir); int ret = 0; if (strcmp( attempt_dir, "/tmp/taskTracker/user/jobcache/job_200906101234_0001/attempt_200906101234_0001_m_000000_0") != 0) { ret = -1; } free(job_dir); free(attempt_dir); assert(ret == 0); } void test_get_task_launcher_file() { char *job_dir = (char *) get_job_directory("/tmp", "user", "job_200906101234_0001"); char *task_file = (char *) get_task_launcher_file(job_dir, "attempt_200906112028_0001_m_000000_0"); printf("task_file obtained is %s\n", task_file); int ret = 0; if (strcmp( task_file, "/tmp/taskTracker/user/jobcache/job_200906101234_0001/attempt_200906112028_0001_m_000000_0/taskjvm.sh") != 0) { ret = -1; } free(task_file); assert(ret == 0); } void test_get_job_log_dir() { char *logdir = (char *) get_job_log_dir("/tmp/testing", "job_200906101234_0001"); printf("logdir obtained is %s\n", logdir); int ret = 0; if (strcmp(logdir, "/tmp/testing/userlogs/job_200906101234_0001") != 0) { ret = -1; } free(logdir); assert(ret == 0); } void test_get_job_acls_file() { char *job_acls_file = (char *) get_job_acls_file( "/tmp/testing/userlogs/job_200906101234_0001"); printf("job acls file obtained is %s\n", job_acls_file); int ret = 0; if (strcmp(job_acls_file, "/tmp/testing/userlogs/job_200906101234_0001/job-acls.xml") != 0) { ret = -1; } free(job_acls_file); assert(ret == 0); } void test_get_task_log_dir() { char *logdir = (char *) get_task_log_dir("/tmp/testing", "job_200906101234_0001", "attempt_200906112028_0001_m_000000_0"); printf("logdir obtained is %s\n", logdir); int ret = 0; if (strcmp(logdir, "/tmp/testing/userlogs/job_200906101234_0001/attempt_200906112028_0001_m_000000_0") != 0) { ret = -1; } free(logdir); assert(ret == 0); } int main(int argc, char **argv) { printf("\nStarting tests\n"); LOGFILE = stdout; printf("\nTesting check_variable_against_config()\n"); test_check_variable_against_config(); printf("\nTesting get_user_directory()\n"); test_get_user_directory(); printf("\nTesting get_job_directory()\n"); test_get_job_directory(); printf("\nTesting get_attempt_directory()\n"); test_get_attempt_directory(); printf("\nTesting get_task_launcher_file()\n"); test_get_task_launcher_file(); printf("\nTesting get_job_log_dir()\n"); test_get_job_log_dir(); printf("\nTesting get_job_acls_file()\n"); test_get_job_acls_file(); printf("\nTesting get_task_log_dir()\n"); test_get_task_log_dir(); printf("\nFinished tests\n"); return 0; }