Refactor: simplify signV4TrimAll() (#3179)

This commit is contained in:
Aditya Manthramurthy 2016-11-04 16:52:22 -04:00 committed by Harshavardhana
parent 8408dfaa6c
commit eb1bc67db1
2 changed files with 6 additions and 13 deletions

View File

@ -161,15 +161,7 @@ func extractSignedHeaders(signedHeaders []string, reqHeaders http.Header) (http.
// Trim leading and trailing spaces and replace sequential spaces with one space, following Trimall() // Trim leading and trailing spaces and replace sequential spaces with one space, following Trimall()
// in http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html // in http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html
func signV4TrimAll(input string) string { func signV4TrimAll(input string) string {
// Remove all whitespaces first // Compress adjacent spaces (a space is determined by
cleanWhiteSpaces := func(r rune) rune { // unicode.IsSpace() internally here) to one space and return
switch r {
case '\t', '\n', '\u000b', '\r', '\f':
return ' '
}
return r
}
input = strings.Map(cleanWhiteSpaces, input)
// Compress adjacent spaces to one space and return
return strings.Join(strings.Fields(input), " ") return strings.Join(strings.Fields(input), " ")
} }

View File

@ -212,8 +212,8 @@ func TestFindHost(t *testing.T) {
} }
} }
// TestSigV4TrimAll - tests the logic of TrimAll() function // TestSignV4TrimAll - tests the logic of TrimAll() function
func TestSigV4TrimAll(t *testing.T) { func TestSignV4TrimAll(t *testing.T) {
testCases := []struct { testCases := []struct {
// Input. // Input.
inputStr string inputStr string
@ -229,13 +229,14 @@ func TestSigV4TrimAll(t *testing.T) {
{" a b c ", "a b c"}, {" a b c ", "a b c"},
{"a \t b c ", "a b c"}, {"a \t b c ", "a b c"},
{"\"a \t b c ", "\"a b c"}, {"\"a \t b c ", "\"a b c"},
{" \t\n\u000b\r\fa \t\n\u000b\r\f b \t\n\u000b\r\f c \t\n\u000b\r\f", "a b c"},
} }
// Tests generated values from url encoded name. // Tests generated values from url encoded name.
for i, testCase := range testCases { for i, testCase := range testCases {
result := signV4TrimAll(testCase.inputStr) result := signV4TrimAll(testCase.inputStr)
if testCase.result != result { if testCase.result != result {
t.Errorf("Test %d: Expected sigV4TrimAll result to be \"%s\", but found it to be \"%s\" instead", i+1, testCase.result, result) t.Errorf("Test %d: Expected signV4TrimAll result to be \"%s\", but found it to be \"%s\" instead", i+1, testCase.result, result)
} }
} }
} }