1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#ifdef OHOS_ENABLE_PARAMETER 16#undef _GNU_SOURCE 17#include <hilog/hilog_adapter.c> 18#define _GNU_SOURCE 19#include <musl_log.h> 20#include <test.h> 21#endif 22#include <stdlib.h> 23#include <errno.h> 24#include <stdio.h> 25 26#define OVERWRITE 1 27#define ZERO 0 28#define INVALID_ENV (-1) 29#define VALID_ENV 0 30#define ENABLE_LOG "param set musl.log.enable true" 31#define LOG_LEVEL_FATAL "param set musl.log.level FATAL" 32#define LOG_LEVEL_WARN "param set musl.log.level WARN" 33#define LOG_LEVEL_ERROR "param set musl.log.level ERROR" 34#define LOG_LEVEL_DEBUG "param set musl.log.level DEBUG" 35#define LOG_LEVEL_INFO "param set musl.log.level INFO" 36 37int TestValidEnv(const char *str) 38{ 39 FILE *res = popen(str, "r"); 40 if (res == NULL) { 41 return INVALID_ENV; 42 } 43 char path[1035]; 44 while (fgets(path, sizeof(path), res) != NULL) { 45 if (strstr(path, "fail")) { 46 return INVALID_ENV; 47 } 48 } 49 pclose(res); 50 return VALID_ENV; 51} 52 53void TestFatalLevel() 54{ 55 int result = TestValidEnv(LOG_LEVEL_FATAL); 56 if (result == INVALID_ENV) { 57 return; 58 } 59 musl_log_reset(); 60 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_FATAL)) { 61 t_error("LOG_LEVEL_FATAL level LOG_FATAL print failed \n"); 62 } 63 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_ERROR)) { 64 t_error("LOG_LEVEL_FATAL level LOG_ERROR print failed \n"); 65 } 66 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_WARN)) { 67 t_error("LOG_LEVEL_FATAL level LOG_WARN print failed \n"); 68 } 69 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_INFO)) { 70 t_error("LOG_LEVEL_FATAL level LOG_INFO print failed \n"); 71 } 72 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_DEBUG)) { 73 t_error("LOG_LEVEL_FATAL level LOG_DEBUG print failed \n"); 74 } 75} 76 77void TestErrorLevel() 78{ 79 int result = TestValidEnv(LOG_LEVEL_ERROR); 80 if (result == INVALID_ENV) { 81 return; 82 } 83 musl_log_reset(); 84 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_FATAL)) { 85 t_error("LOG_LEVEL_ERROR level LOG_FATAL print failed \n"); 86 } 87 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_ERROR)) { 88 t_error("LOG_LEVEL_ERROR level LOG_ERROR print failed \n"); 89 } 90 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_WARN)) { 91 t_error("LOG_LEVEL_ERROR level LOG_WARN print failed \n"); 92 } 93 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_INFO)) { 94 t_error("LOG_LEVEL_ERROR level LOG_INFO print failed \n"); 95 } 96 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_DEBUG)) { 97 t_error("LOG_LEVEL_ERROR level LOG_DEBUG print failed \n"); 98 } 99} 100 101void TestWarnLevel() 102{ 103 int result = TestValidEnv(LOG_LEVEL_WARN); 104 if (result == INVALID_ENV) { 105 return; 106 } 107 musl_log_reset(); 108 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_FATAL)) { 109 t_error("LOG_LEVEL_WARN level LOG_FATAL print failed \n"); 110 } 111 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_ERROR)) { 112 t_error("LOG_LEVEL_WARN level LOG_ERROR print failed \n"); 113 } 114 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_WARN)) { 115 t_error("LOG_LEVEL_WARN level LOG_WARN print failed \n"); 116 } 117 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_INFO)) { 118 t_error("LOG_LEVEL_WARN level LOG_INFO print failed \n"); 119 } 120 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_DEBUG)) { 121 t_error("LOG_LEVEL_WARN level LOG_DEBUG print failed \n"); 122 } 123} 124 125void TestInfoLevel() 126{ 127 int result = TestValidEnv(LOG_LEVEL_INFO); 128 if (result == INVALID_ENV) { 129 return; 130 } 131 musl_log_reset(); 132 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_FATAL)) { 133 t_error("LOG_LEVEL_INFO level LOG_FATAL print failed \n"); 134 } 135 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_ERROR)) { 136 t_error("LOG_LEVEL_INFO level LOG_ERROR print failed \n"); 137 } 138 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_WARN)) { 139 t_error("LOG_LEVEL_INFO level LOG_WARN print failed \n"); 140 } 141 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_INFO)) { 142 t_error("LOG_LEVEL_INFO level LOG_INFO print failed \n"); 143 } 144 if (HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_DEBUG)) { 145 t_error("LOG_LEVEL_INFO level LOG_DEBUG print failed \n"); 146 } 147} 148 149void TestDebugLevel() 150{ 151 int result = TestValidEnv(LOG_LEVEL_DEBUG); 152 if (result == INVALID_ENV) { 153 return; 154 } 155 musl_log_reset(); 156 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_FATAL)) { 157 t_error("LOG_LEVEL_DEBUG level LOG_FATAL print failed \n"); 158 } 159 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_ERROR)) { 160 t_error("LOG_LEVEL_DEBUG level LOG_ERROR print failed \n"); 161 } 162 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_WARN)) { 163 t_error("LOG_LEVEL_DEBUG level LOG_WARN print failed \n"); 164 } 165 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_INFO)) { 166 t_error("LOG_LEVEL_DEBUG level LOG_INFO print failed \n"); 167 } 168 if (!HiLogAdapterIsLoggable(MUSL_LOG_DOMAIN, MUSL_LOG_TAG, LOG_DEBUG)) { 169 t_error("LOG_LEVEL_DEBUG level LOG_DEBUG print failed \n"); 170 } 171} 172 173int main() 174{ 175#ifdef OHOS_ENABLE_PARAMETER 176 int result = TestValidEnv(ENABLE_LOG); 177 if (result == INVALID_ENV) { 178 return ZERO; 179 } 180 TestFatalLevel(); 181 TestErrorLevel(); 182 TestWarnLevel(); 183 TestInfoLevel(); 184 TestDebugLevel(); 185#endif 186 return t_status; 187}