github.com/vmware/go-vcloud-director/v2@v2.24.0/util/logging_test.go (about) 1 /* 2 * Copyright 2019 VMware, Inc. All rights reserved. Licensed under the Apache v2 License. 3 */ 4 5 package util 6 7 import ( 8 "os" 9 "path/filepath" 10 "regexp" 11 "testing" 12 ) 13 14 func fileExists(filename string) bool { 15 _, err := os.Stat(filename) 16 return !os.IsNotExist(err) 17 } 18 19 func removeFile(t *testing.T, filename string) error { 20 err := os.Remove(filename) 21 if err != nil { 22 t.Logf("Can't remove file %s", filename) 23 t.Fail() 24 return err 25 } 26 return nil 27 } 28 29 func testLog(logn int, t *testing.T, filename string, want_enabled bool, success_msg, failure_msg string) { 30 Logger.Printf("test %d\n", logn) 31 if want_enabled { 32 if fileExists(filename) { 33 t.Logf("ok - [%d] %s", logn, success_msg) 34 } else { 35 t.Logf("not ok - [%d] %s", logn, failure_msg) 36 t.Fail() 37 } 38 } else { 39 if !fileExists(filename) { 40 t.Logf("ok - [%d] %s", logn, success_msg) 41 } else { 42 t.Logf("not ok - [%d] %s", logn, failure_msg) 43 t.Fail() 44 } 45 } 46 } 47 48 func TestEnableLogging(t *testing.T) { 49 ApiLogFileName = "temporary-for-test.log" 50 customLogFile := "temporary-custom-for-test.log" 51 if fileExists(ApiLogFileName) { 52 err := removeFile(t, ApiLogFileName) 53 if err != nil { 54 return 55 } 56 } 57 if fileExists(customLogFile) { 58 err := removeFile(t, customLogFile) 59 if err != nil { 60 return 61 } 62 } 63 64 EnableLogging = true 65 SetLog() 66 testLog(1, t, ApiLogFileName, true, "log enabled", "log was not enabled") 67 err := removeFile(t, ApiLogFileName) 68 if err != nil { 69 return 70 } 71 72 EnableLogging = false 73 SetLog() 74 testLog(2, t, ApiLogFileName, false, "log was disabled", "log was not disabled") 75 76 EnableLogging = false 77 _ = os.Setenv(envUseLog, "1") 78 InitLogging() 79 testLog(3, t, ApiLogFileName, true, "log enabled via env variable", "log was not enabled via env variable") 80 err = removeFile(t, ApiLogFileName) 81 if err != nil { 82 return 83 } 84 85 EnableLogging = false 86 _ = os.Setenv(envUseLog, "") 87 InitLogging() 88 testLog(4, t, ApiLogFileName, false, "log was disabled via env variable", "log was not disabled via env variable") 89 customLogger := newLogger(customLogFile) 90 SetCustomLogger(customLogger) 91 testLog(5, t, customLogFile, true, "log was enabled via custom logger", "log was not enabled via custom logger") 92 err = removeFile(t, customLogFile) 93 if err != nil { 94 return 95 } 96 } 97 98 func TestCaller(t *testing.T) { 99 type callData struct { 100 fun func() string 101 label string 102 expected string 103 } 104 var data = []callData{ 105 { 106 label: "current function name", 107 fun: CurrentFuncName, 108 expected: `^util.TestCaller$`, 109 }, 110 { 111 label: "function caller", 112 fun: CallFuncName, 113 expected: `^testing.tRunner$`, 114 }, 115 { 116 label: "function stack", 117 fun: FuncNameCallStack, 118 expected: "testing.tRunner", 119 }, 120 } 121 122 for _, d := range data { 123 value := filepath.Base(d.fun()) 124 reFunc := regexp.MustCompile(`\b` + d.expected + `\b`) 125 if reFunc.MatchString(value) { 126 t.Logf("ok - %s as expected: '%s' matches '%s' \n", d.label, value, d.expected) 127 } else { 128 t.Logf("not ok - %s doesn't match. Expected: '%s' - Found: '%s'\n", d.label, d.expected, value) 129 t.Fail() 130 } 131 } 132 } 133 134 func init() { 135 // Before running log tests, let's make sure all the log related 136 // environment variables are unset 137 _ = os.Setenv(envUseLog, "") 138 _ = os.Setenv(envLogFileName, "") 139 _ = os.Setenv(envLogOnScreen, "") 140 _ = os.Setenv(envLogPasswords, "") 141 _ = os.Setenv(envLogSkipHttpReq, "") 142 _ = os.Setenv(envLogSkipHttpResp, "") 143 _ = os.Setenv(envLogSkipTagList, "") 144 _ = os.Setenv(envLogFileName, "") 145 }