|
8 | 8 | "testing" |
9 | 9 |
|
10 | 10 | "github.com/stretchr/testify/assert" |
| 11 | + "github.com/stretchr/testify/require" |
11 | 12 | "go.opentelemetry.io/otel/log" |
12 | 13 | ) |
13 | 14 |
|
@@ -81,10 +82,128 @@ var validEncodingTests = []struct { |
81 | 82 | {"SeverityFatal4Plus2", SeverityFatal4 + 2, "FATAL+6"}, |
82 | 83 | } |
83 | 84 |
|
| 85 | +var validDecodingTests = []struct { |
| 86 | + Name string |
| 87 | + Severity Severity |
| 88 | + Text string |
| 89 | +}{ |
| 90 | + {"SeverityTrace", SeverityTrace, "TRACE"}, |
| 91 | + {"SeverityTrace1", SeverityTrace1, "TRACE"}, |
| 92 | + {"SeverityTrace2", SeverityTrace2, "TRACE2"}, |
| 93 | + {"SeverityTrace3", SeverityTrace3, "TRACE3"}, |
| 94 | + {"SeverityTrace4", SeverityTrace4, "TRACE4"}, |
| 95 | + {"SeverityDebug", SeverityDebug, "DEBUG"}, |
| 96 | + {"SeverityDebug1", SeverityDebug1, "DEBUG"}, |
| 97 | + {"SeverityDebug2", SeverityDebug2, "DEBUG2"}, |
| 98 | + {"SeverityDebug3", SeverityDebug3, "DEBUG3"}, |
| 99 | + {"SeverityDebug4", SeverityDebug4, "DEBUG4"}, |
| 100 | + {"SeverityInfo", SeverityInfo, "INFO"}, |
| 101 | + {"SeverityInfo1", SeverityInfo1, "INFO"}, |
| 102 | + {"SeverityInfo2", SeverityInfo2, "INFO2"}, |
| 103 | + {"SeverityInfo3", SeverityInfo3, "INFO3"}, |
| 104 | + {"SeverityInfo4", SeverityInfo4, "INFO4"}, |
| 105 | + {"SeverityWarn", SeverityWarn, "WARN"}, |
| 106 | + {"SeverityWarn1", SeverityWarn1, "WARN"}, |
| 107 | + {"SeverityWarn2", SeverityWarn2, "WARN2"}, |
| 108 | + {"SeverityWarn3", SeverityWarn3, "WARN3"}, |
| 109 | + {"SeverityWarn4", SeverityWarn4, "WARN4"}, |
| 110 | + {"SeverityError", SeverityError, "ERROR"}, |
| 111 | + {"SeverityError1", SeverityError1, "ERROR"}, |
| 112 | + {"SeverityError2", SeverityError2, "ERROR2"}, |
| 113 | + {"SeverityError3", SeverityError3, "ERROR3"}, |
| 114 | + {"SeverityError4", SeverityError4, "ERROR4"}, |
| 115 | + {"SeverityFatal", SeverityFatal, "FATAL"}, |
| 116 | + {"SeverityFatal1", SeverityFatal1, "FATAL"}, |
| 117 | + {"SeverityFatal2", SeverityFatal2, "FATAL2"}, |
| 118 | + {"SeverityFatal3", SeverityFatal3, "FATAL3"}, |
| 119 | + {"SeverityFatal4", SeverityFatal4, "FATAL4"}, |
| 120 | + |
| 121 | + // Test case insensitivity. |
| 122 | + {"SeverityTraceLower", SeverityTrace1, "trace"}, |
| 123 | + {"SeverityDebugMixed", SeverityDebug1, "Debug"}, |
| 124 | + {"SeverityInfoMixed", SeverityInfo1, "InFo"}, |
| 125 | + {"SeverityInfo3Lower", SeverityInfo3, "info3"}, |
| 126 | + |
| 127 | + // Test offset calculations. |
| 128 | + {"SeverityTraceMinus2", SeverityTrace1 - 2, "TRACE-2"}, |
| 129 | + {"SeverityWarnPlus2", SeverityWarn3, "WARN+2"}, |
| 130 | + {"SeverityWarn2Plus2", SeverityWarn4, "WARN2+2"}, |
| 131 | + {"SeverityErrorMinus4", SeverityWarn1, "ERROR-4"}, |
| 132 | + {"SeverityError2Minus4", SeverityWarn2, "ERROR2-4"}, |
| 133 | + {"SeverityFatalPlus10", SeverityFatal1 + 10, "FATAL+10"}, |
| 134 | + |
| 135 | + // Test oversized fine-grained severity. |
| 136 | + {"SeverityTrace15", SeverityWarn3, "TRACE15"}, |
| 137 | + {"SeverityTrace101", SeverityTrace1 + 100, "TRACE101"}, |
| 138 | + |
| 139 | + // Test fine-grained severity of zero. |
| 140 | + {"SeverityTrace0", SeverityTrace, "TRACE0"}, |
| 141 | + {"SeverityTrace0Plus1", SeverityTrace2, "TRACE0+1"}, |
| 142 | +} |
| 143 | + |
| 144 | +var invalidText = []string{ |
| 145 | + "UNKNOWN", |
| 146 | + "DEBUG3+abc", |
| 147 | + "INFO+abc", |
| 148 | + "ERROR-xyz", |
| 149 | + "not-a-level", |
| 150 | +} |
| 151 | + |
84 | 152 | func TestSeverityString(t *testing.T) { |
85 | 153 | for _, test := range validEncodingTests { |
86 | 154 | t.Run(test.Name, func(t *testing.T) { |
87 | 155 | assert.Equal(t, test.Text, test.Severity.String()) |
88 | 156 | }) |
89 | 157 | } |
90 | 158 | } |
| 159 | + |
| 160 | +func TestSeverityMarshalText(t *testing.T) { |
| 161 | + for _, test := range validEncodingTests { |
| 162 | + t.Run(test.Name, func(t *testing.T) { |
| 163 | + got, err := test.Severity.MarshalText() |
| 164 | + require.NoError(t, err) |
| 165 | + assert.Equal(t, test.Text, string(got)) |
| 166 | + }) |
| 167 | + } |
| 168 | +} |
| 169 | + |
| 170 | +func TestSeverityUnmarshalText(t *testing.T) { |
| 171 | + for _, test := range validDecodingTests { |
| 172 | + t.Run(test.Name, func(t *testing.T) { |
| 173 | + var sev Severity |
| 174 | + require.NoError(t, sev.UnmarshalText([]byte(test.Text))) |
| 175 | + const msg = "UnmarshalText(%q) != %d (%[2]s)" |
| 176 | + assert.Equalf(t, test.Severity, sev, msg, test.Text, test.Severity) |
| 177 | + }) |
| 178 | + } |
| 179 | +} |
| 180 | + |
| 181 | +func TestSeverityUnmarshalTextError(t *testing.T) { |
| 182 | + for _, test := range invalidText { |
| 183 | + t.Run(test, func(t *testing.T) { |
| 184 | + var sev Severity |
| 185 | + err := sev.UnmarshalText([]byte(test)) |
| 186 | + assert.Error(t, err) |
| 187 | + }) |
| 188 | + } |
| 189 | +} |
| 190 | + |
| 191 | +func TestSeverityAppendText(t *testing.T) { |
| 192 | + tests := []struct { |
| 193 | + sev Severity |
| 194 | + prefix string |
| 195 | + expected string |
| 196 | + }{ |
| 197 | + {SeverityInfo1, "", "INFO"}, |
| 198 | + {SeverityError1, "level=", "level=ERROR"}, |
| 199 | + {SeverityWarn3, "severity:", "severity:WARN3"}, |
| 200 | + } |
| 201 | + |
| 202 | + for _, test := range tests { |
| 203 | + t.Run(test.expected, func(t *testing.T) { |
| 204 | + result, err := test.sev.AppendText([]byte(test.prefix)) |
| 205 | + require.NoError(t, err) |
| 206 | + assert.Equal(t, test.expected, string(result)) |
| 207 | + }) |
| 208 | + } |
| 209 | +} |
0 commit comments