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  }