github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/flag/remote_flags_test.go (about) 1 package flag_test 2 3 import ( 4 "net/http" 5 "testing" 6 7 "github.com/spf13/viper" 8 "github.com/stretchr/testify/assert" 9 "go.uber.org/zap" 10 "go.uber.org/zap/zaptest/observer" 11 12 "github.com/devseccon/trivy/pkg/flag" 13 "github.com/devseccon/trivy/pkg/log" 14 ) 15 16 func TestRemoteFlagGroup_ToOptions(t *testing.T) { 17 type fields struct { 18 Server string 19 CustomHeaders []string 20 Token string 21 TokenHeader string 22 } 23 tests := []struct { 24 name string 25 fields fields 26 want flag.RemoteOptions 27 wantLogs []string 28 }{ 29 { 30 name: "happy", 31 fields: fields{ 32 Server: "http://localhost:4954", 33 CustomHeaders: []string{ 34 "x-api-token:foo bar", 35 "Authorization:user:password", 36 }, 37 Token: "token", 38 TokenHeader: "Trivy-Token", 39 }, 40 want: flag.RemoteOptions{ 41 ServerAddr: "http://localhost:4954", 42 CustomHeaders: http.Header{ 43 "X-Api-Token": []string{"foo bar"}, 44 "Authorization": []string{"user:password"}, 45 "Trivy-Token": []string{"token"}, 46 }, 47 Token: "token", 48 TokenHeader: "Trivy-Token", 49 }, 50 }, 51 { 52 name: "custom headers and no server", 53 fields: fields{ 54 CustomHeaders: []string{ 55 "Authorization:user:password", 56 }, 57 TokenHeader: "Trivy-Token", 58 }, 59 want: flag.RemoteOptions{ 60 CustomHeaders: http.Header{ 61 "Authorization": []string{"user:password"}, 62 }, 63 TokenHeader: "Trivy-Token", 64 }, 65 wantLogs: []string{ 66 `"--custom-header" can be used only with "--server"`, 67 }, 68 }, 69 { 70 name: "token and no server", 71 fields: fields{ 72 Token: "token", 73 }, 74 want: flag.RemoteOptions{ 75 CustomHeaders: http.Header{}, 76 Token: "token", 77 }, 78 wantLogs: []string{ 79 `"--token" can be used only with "--server"`, 80 }, 81 }, 82 { 83 name: "token header and no token", 84 fields: fields{ 85 Server: "http://localhost:4954", 86 TokenHeader: "Non-Default", 87 }, 88 want: flag.RemoteOptions{ 89 CustomHeaders: http.Header{}, 90 ServerAddr: "http://localhost:4954", 91 TokenHeader: "Non-Default", 92 }, 93 wantLogs: []string{ 94 `"--token-header" should be used with "--token"`, 95 }, 96 }, 97 } 98 for _, tt := range tests { 99 t.Run(tt.name, func(t *testing.T) { 100 level := zap.WarnLevel 101 core, obs := observer.New(level) 102 log.Logger = zap.New(core).Sugar() 103 104 viper.Set(flag.ServerAddrFlag.ConfigName, tt.fields.Server) 105 viper.Set(flag.ServerCustomHeadersFlag.ConfigName, tt.fields.CustomHeaders) 106 viper.Set(flag.ServerTokenFlag.ConfigName, tt.fields.Token) 107 viper.Set(flag.ServerTokenHeaderFlag.ConfigName, tt.fields.TokenHeader) 108 109 // Assert options 110 f := &flag.RemoteFlagGroup{ 111 ServerAddr: &flag.ServerAddrFlag, 112 CustomHeaders: &flag.ServerCustomHeadersFlag, 113 Token: &flag.ServerTokenFlag, 114 TokenHeader: &flag.ServerTokenHeaderFlag, 115 } 116 got := f.ToOptions() 117 assert.Equalf(t, tt.want, got, "ToOptions()") 118 119 // Assert log messages 120 var gotMessages []string 121 for _, entry := range obs.AllUntimed() { 122 gotMessages = append(gotMessages, entry.Message) 123 } 124 assert.Equal(t, tt.wantLogs, gotMessages, tt.name) 125 }) 126 } 127 }