github.com/minio/console@v1.4.1/pkg/logger/logger_test.go (about)

     1  // This file is part of MinIO Console Server
     2  // Copyright (c) 2022 MinIO, Inc.
     3  //
     4  // This program is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Affero General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // This program is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  // GNU Affero General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Affero General Public License
    15  // along with this program.  If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package logger
    18  
    19  import (
    20  	"context"
    21  	"fmt"
    22  	"net/http"
    23  	"os"
    24  	"testing"
    25  )
    26  
    27  func testServer(_ http.ResponseWriter, _ *http.Request) {
    28  }
    29  
    30  func TestInitializeLogger(t *testing.T) {
    31  	testServerWillStart := make(chan interface{})
    32  	http.HandleFunc("/", testServer)
    33  	go func() {
    34  		close(testServerWillStart)
    35  		err := http.ListenAndServe("127.0.0.1:1337", nil)
    36  		if err != nil {
    37  			return
    38  		}
    39  	}()
    40  	<-testServerWillStart
    41  
    42  	loggerWebhookEnable := fmt.Sprintf("%s_TEST", EnvLoggerWebhookEnable)
    43  	loggerWebhookEndpoint := fmt.Sprintf("%s_TEST", EnvLoggerWebhookEndpoint)
    44  	loggerWebhookAuthToken := fmt.Sprintf("%s_TEST", EnvLoggerWebhookAuthToken)
    45  	loggerWebhookClientCert := fmt.Sprintf("%s_TEST", EnvLoggerWebhookClientCert)
    46  	loggerWebhookClientKey := fmt.Sprintf("%s_TEST", EnvLoggerWebhookClientKey)
    47  	loggerWebhookQueueSize := fmt.Sprintf("%s_TEST", EnvLoggerWebhookQueueSize)
    48  
    49  	auditWebhookEnable := fmt.Sprintf("%s_TEST", EnvAuditWebhookEnable)
    50  	auditWebhookEndpoint := fmt.Sprintf("%s_TEST", EnvAuditWebhookEndpoint)
    51  	auditWebhookAuthToken := fmt.Sprintf("%s_TEST", EnvAuditWebhookAuthToken)
    52  	auditWebhookClientCert := fmt.Sprintf("%s_TEST", EnvAuditWebhookClientCert)
    53  	auditWebhookClientKey := fmt.Sprintf("%s_TEST", EnvAuditWebhookClientKey)
    54  	auditWebhookQueueSize := fmt.Sprintf("%s_TEST", EnvAuditWebhookQueueSize)
    55  
    56  	type args struct {
    57  		ctx       context.Context
    58  		transport *http.Transport
    59  	}
    60  	tests := []struct {
    61  		name         string
    62  		args         args
    63  		wantErr      bool
    64  		setEnvVars   func()
    65  		unsetEnvVars func()
    66  	}{
    67  		{
    68  			name: "logger or auditlog is not enabled",
    69  			args: args{
    70  				ctx:       context.Background(),
    71  				transport: http.DefaultTransport.(*http.Transport).Clone(),
    72  			},
    73  			wantErr: false,
    74  			setEnvVars: func() {
    75  			},
    76  			unsetEnvVars: func() {
    77  			},
    78  		},
    79  		{
    80  			name: "logger webhook initialized correctly",
    81  			args: args{
    82  				ctx:       context.Background(),
    83  				transport: http.DefaultTransport.(*http.Transport).Clone(),
    84  			},
    85  			wantErr: false,
    86  			setEnvVars: func() {
    87  				os.Setenv(loggerWebhookEnable, "on")
    88  				os.Setenv(loggerWebhookEndpoint, "http://127.0.0.1:1337/logger")
    89  				os.Setenv(loggerWebhookAuthToken, "test")
    90  				os.Setenv(loggerWebhookClientCert, "")
    91  				os.Setenv(loggerWebhookClientKey, "")
    92  				os.Setenv(loggerWebhookQueueSize, "1000")
    93  			},
    94  			unsetEnvVars: func() {
    95  				os.Unsetenv(loggerWebhookEnable)
    96  				os.Unsetenv(loggerWebhookEndpoint)
    97  				os.Unsetenv(loggerWebhookAuthToken)
    98  				os.Unsetenv(loggerWebhookClientCert)
    99  				os.Unsetenv(loggerWebhookClientKey)
   100  				os.Unsetenv(loggerWebhookQueueSize)
   101  			},
   102  		},
   103  		{
   104  			name: "logger webhook failed to initialize",
   105  			args: args{
   106  				ctx:       context.Background(),
   107  				transport: http.DefaultTransport.(*http.Transport).Clone(),
   108  			},
   109  			wantErr: true,
   110  			setEnvVars: func() {
   111  				os.Setenv(loggerWebhookEnable, "on")
   112  				os.Setenv(loggerWebhookEndpoint, "https://aklsjdakljdjkalsd.com")
   113  				os.Setenv(loggerWebhookAuthToken, "test")
   114  				os.Setenv(loggerWebhookClientCert, "")
   115  				os.Setenv(loggerWebhookClientKey, "")
   116  				os.Setenv(loggerWebhookQueueSize, "1000")
   117  			},
   118  			unsetEnvVars: func() {
   119  				os.Unsetenv(loggerWebhookEnable)
   120  				os.Unsetenv(loggerWebhookEndpoint)
   121  				os.Unsetenv(loggerWebhookAuthToken)
   122  				os.Unsetenv(loggerWebhookClientCert)
   123  				os.Unsetenv(loggerWebhookClientKey)
   124  				os.Unsetenv(loggerWebhookQueueSize)
   125  			},
   126  		},
   127  		{
   128  			name: "auditlog webhook initialized correctly",
   129  			args: args{
   130  				ctx:       context.Background(),
   131  				transport: http.DefaultTransport.(*http.Transport).Clone(),
   132  			},
   133  			wantErr: false,
   134  			setEnvVars: func() {
   135  				os.Setenv(auditWebhookEnable, "on")
   136  				os.Setenv(auditWebhookEndpoint, "http://127.0.0.1:1337/audit")
   137  				os.Setenv(auditWebhookAuthToken, "test")
   138  				os.Setenv(auditWebhookClientCert, "")
   139  				os.Setenv(auditWebhookClientKey, "")
   140  				os.Setenv(auditWebhookQueueSize, "1000")
   141  			},
   142  			unsetEnvVars: func() {
   143  				os.Unsetenv(auditWebhookEnable)
   144  				os.Unsetenv(auditWebhookEndpoint)
   145  				os.Unsetenv(auditWebhookAuthToken)
   146  				os.Unsetenv(auditWebhookClientCert)
   147  				os.Unsetenv(auditWebhookClientKey)
   148  				os.Unsetenv(auditWebhookQueueSize)
   149  			},
   150  		},
   151  		{
   152  			name: "auditlog webhook failed to initialize",
   153  			args: args{
   154  				ctx:       context.Background(),
   155  				transport: http.DefaultTransport.(*http.Transport).Clone(),
   156  			},
   157  			wantErr: true,
   158  			setEnvVars: func() {
   159  				os.Setenv(auditWebhookEnable, "on")
   160  				os.Setenv(auditWebhookEndpoint, "https://aklsjdakljdjkalsd.com")
   161  				os.Setenv(auditWebhookAuthToken, "test")
   162  				os.Setenv(auditWebhookClientCert, "")
   163  				os.Setenv(auditWebhookClientKey, "")
   164  				os.Setenv(auditWebhookQueueSize, "1000")
   165  			},
   166  			unsetEnvVars: func() {
   167  				os.Unsetenv(auditWebhookEnable)
   168  				os.Unsetenv(auditWebhookEndpoint)
   169  				os.Unsetenv(auditWebhookAuthToken)
   170  				os.Unsetenv(auditWebhookClientCert)
   171  				os.Unsetenv(auditWebhookClientKey)
   172  				os.Unsetenv(auditWebhookQueueSize)
   173  			},
   174  		},
   175  	}
   176  	for _, tt := range tests {
   177  		t.Run(tt.name, func(_ *testing.T) {
   178  			if tt.setEnvVars != nil {
   179  				tt.setEnvVars()
   180  			}
   181  			if err := InitializeLogger(tt.args.ctx, tt.args.transport); (err != nil) != tt.wantErr {
   182  				t.Errorf("InitializeLogger() error = %v, wantErr %v", err, tt.wantErr)
   183  			}
   184  			if tt.unsetEnvVars != nil {
   185  				tt.unsetEnvVars()
   186  			}
   187  		})
   188  	}
   189  }
   190  
   191  func TestEnableJSON(t *testing.T) {
   192  	tests := []struct {
   193  		name string
   194  	}{
   195  		{
   196  			name: "enable json",
   197  		},
   198  	}
   199  	for _, tt := range tests {
   200  		t.Run(tt.name, func(_ *testing.T) {
   201  			EnableJSON()
   202  			if !IsJSON() {
   203  				t.Errorf("EnableJSON() = %v, want %v", IsJSON(), true)
   204  			}
   205  		})
   206  	}
   207  }
   208  
   209  func TestEnableQuiet(t *testing.T) {
   210  	tests := []struct {
   211  		name string
   212  	}{
   213  		{
   214  			name: "enable quiet",
   215  		},
   216  	}
   217  	for _, tt := range tests {
   218  		t.Run(tt.name, func(_ *testing.T) {
   219  			EnableQuiet()
   220  			if !IsQuiet() {
   221  				t.Errorf("EnableQuiet() = %v, want %v", IsQuiet(), true)
   222  			}
   223  		})
   224  	}
   225  }
   226  
   227  func TestEnableAnonymous(t *testing.T) {
   228  	tests := []struct {
   229  		name string
   230  	}{
   231  		{
   232  			name: "enable anonymous",
   233  		},
   234  	}
   235  	for _, tt := range tests {
   236  		t.Run(tt.name, func(_ *testing.T) {
   237  			EnableAnonymous()
   238  			if !IsAnonymous() {
   239  				t.Errorf("EnableAnonymous() = %v, want %v", IsAnonymous(), true)
   240  			}
   241  		})
   242  	}
   243  }