-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'feature/25_SetLogLevel' of ssh://github.com/cloudogu/k8…
…s-ces-control into feature/25_SetLogLevel
- Loading branch information
Showing
3 changed files
with
183 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
package logging | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
pb "github.com/cloudogu/ces-control-api/generated/logging" | ||
"strings" | ||
) | ||
|
||
// LogLevel is the log level that can be defined for a dogu. | ||
type LogLevel int | ||
|
||
const ( | ||
LevelUnknown LogLevel = iota | ||
LevelError | ||
LevelWarn | ||
LevelInfo | ||
LevelDebug | ||
) | ||
|
||
// String converts LogLevel type to a string | ||
func (l LogLevel) String() string { | ||
switch l { | ||
case LevelUnknown: | ||
return "UNKNOWN" | ||
case LevelDebug: | ||
return "DEBUG" | ||
case LevelInfo: | ||
return "INFO" | ||
case LevelWarn: | ||
return "WARN" | ||
case LevelError: | ||
return "ERROR" | ||
default: | ||
return "WARN" | ||
} | ||
} | ||
|
||
// CreateLogLevelFromProto maps protobuf log level to an internal log level used in application | ||
func CreateLogLevelFromProto(pLevel pb.LogLevel) (LogLevel, error) { | ||
switch pLevel { | ||
case pb.LogLevel_DEBUG: | ||
return LevelDebug, nil | ||
case pb.LogLevel_INFO: | ||
return LevelInfo, nil | ||
case pb.LogLevel_WARN: | ||
return LevelWarn, nil | ||
case pb.LogLevel_ERROR: | ||
return LevelError, nil | ||
default: | ||
return LevelUnknown, fmt.Errorf("unknown log level: %v", pLevel) | ||
} | ||
} | ||
|
||
// CreateLogLevelFromString maps a string to an internal log level used in application | ||
func CreateLogLevelFromString(sLevel string) (LogLevel, error) { | ||
sLevelUpper := strings.ToUpper(sLevel) | ||
|
||
switch sLevelUpper { | ||
case LevelError.String(): | ||
return LevelError, nil | ||
case LevelWarn.String(): | ||
return LevelWarn, nil | ||
case LevelInfo.String(): | ||
return LevelInfo, nil | ||
case LevelDebug.String(): | ||
return LevelDebug, nil | ||
default: | ||
return LevelUnknown, errors.New("unknown log level") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
package logging | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
pbLogging "github.com/cloudogu/ces-control-api/generated/logging" | ||
"testing" | ||
) | ||
|
||
func TestCreateLogLevelFromProto(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
expected LogLevel | ||
input pbLogging.LogLevel | ||
err error | ||
}{ | ||
{"Debug", LevelDebug, pbLogging.LogLevel_DEBUG, nil}, | ||
{"Info", LevelInfo, pbLogging.LogLevel_INFO, nil}, | ||
{"Warn", LevelWarn, pbLogging.LogLevel_WARN, nil}, | ||
{"Error", LevelError, pbLogging.LogLevel_ERROR, nil}, | ||
{"Unknown", LevelUnknown, 100, fmt.Errorf("unknown log level UNKNOWN")}, | ||
} | ||
|
||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
result, err := CreateLogLevelFromProto(tt.input) | ||
|
||
if tt.err != nil { | ||
if err == nil { | ||
t.Errorf("Expected error, got nil") | ||
} | ||
|
||
} else { | ||
if err != nil { | ||
t.Errorf("Unexpected error: %v", err) | ||
} | ||
|
||
if result != tt.expected { | ||
t.Errorf("Expected log level '%v', got '%v'", tt.expected, result) | ||
} | ||
} | ||
}) | ||
} | ||
} | ||
|
||
func TestCreateLevelFromString(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
input string | ||
expected LogLevel | ||
err error | ||
}{ | ||
{"Debug", "DEBUG", LevelDebug, nil}, | ||
{"Info", "INFO", LevelInfo, nil}, | ||
{"Warn", "WARN", LevelWarn, nil}, | ||
{"Error", "ERROR", LevelError, nil}, | ||
{"Unknown", "UNKNOWN", LevelUnknown, fmt.Errorf("unknown log level UNKNOWN")}, | ||
{"Empty", "", 0, errors.New("log level string is empty")}, | ||
} | ||
|
||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
result, err := CreateLogLevelFromString(tt.input) | ||
|
||
if tt.err != nil { | ||
if err == nil { | ||
t.Errorf("Expected error, got nil") | ||
} | ||
|
||
} else { | ||
if err != nil { | ||
t.Errorf("Unexpected error: %v", err) | ||
} | ||
|
||
if result != tt.expected { | ||
t.Errorf("Expected log level '%v', got '%v'", tt.expected, result) | ||
} | ||
} | ||
}) | ||
} | ||
} | ||
|
||
func TestLogLevel_String(t *testing.T) { | ||
tests := []struct { | ||
name string | ||
input LogLevel | ||
expected string | ||
}{ | ||
{"Debug", LevelDebug, "DEBUG"}, | ||
{"Info", LevelInfo, "INFO"}, | ||
{"Warn", LevelWarn, "WARN"}, | ||
{"Error", LevelError, "ERROR"}, | ||
{"Unknown", LevelUnknown, "UNKNOWN"}, | ||
{"Unknown", LogLevel(100), "WARN"}, | ||
} | ||
|
||
for _, tt := range tests { | ||
t.Run(tt.name, func(t *testing.T) { | ||
result := tt.input.String() | ||
if result != tt.expected { | ||
t.Errorf("Expected '%s', got '%s'", tt.expected, result) | ||
} | ||
}) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters