-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path08-actual-response-translater.go
111 lines (73 loc) · 1.97 KB
/
08-actual-response-translater.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package main
import (
"bufio"
"fmt"
"sort"
"strings"
)
func actualResponseReceiver(context *context) {
context.log("08 actual-response-receiver")
message := &message{}
responseLineNumber := 1
version := context.HTTPResponse.Proto
parts := strings.Split(context.HTTPResponse.Status, " ")
statusCode := parts[0]
reasonPhrase := strings.Join(parts[1:], " ")
statusLineText := "< " + version + " " + statusCode + " " + reasonPhrase
statusLine, err :=
newLineFromText("response", responseLineNumber, statusLineText)
if errorHandler(context, err) {
return
}
responseLineNumber++
message.FirstLine = statusLine
var headerNames []string
for headerName := range context.HTTPResponse.Header {
headerNames = append(headerNames, headerName)
}
var headerLine *line
var headerLines []*line
sort.Strings(headerNames)
for _, name := range headerNames {
headerText := "< " + name + ": " + context.HTTPResponse.Header.Get(name)
headerLine, err =
newLineFromText("response", responseLineNumber, headerText)
if errorHandler(context, err) {
return
}
headerLines =
append(headerLines, headerLine)
responseLineNumber++
}
message.HeaderLines = headerLines
message.BlankLine, err =
newLineFromText("response", responseLineNumber, "<")
if errorHandler(context, err) {
return
}
responseLineNumber++
scanner := bufio.NewScanner(context.HTTPResponse.Body)
var bodyLine *line
var bodyLines []*line
for scanner.Scan() {
if errorHandler(context, scanner.Err()) {
return
}
bodyLine, err =
newLineFromText("response", responseLineNumber, "< "+scanner.Text())
if errorHandler(context, err) {
return
}
bodyLines =
append(bodyLines, bodyLine)
responseLineNumber++
}
context.HTTPResponse.Body.Close()
message.BodyLines = bodyLines
context.SpecTriplet.ActualResponse = &response{message}
if context.SpecTriplet.isRequestOnly() {
context.Err = fmt.Errorf("no expected response")
return
}
responseComparitor(context)
}