Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 19f7275

Browse files
authoredApr 28, 2020
Merge pull request #74 from checkr/zz/add-base64-env-example
Add headers rendering and example of basicauth
2 parents c582703 + 7f5190e commit 19f7275

File tree

6 files changed

+62
-25
lines changed

6 files changed

+62
-25
lines changed
 

‎.circleci/config.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: 2
22
jobs:
33
unittest:
44
docker:
5-
- image: circleci/golang:1.12
5+
- image: circleci/golang:1.14
66
working_directory: /go/src/github.com/checkr/openmock
77
steps:
88
- checkout

‎.golangci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ linters:
55
- golint
66
disable:
77
- maligned
8+
- gocognit
89
presets:
910
- bugs
1011
- complexity

‎Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.12 as builder
1+
FROM golang:1.14 as builder
22
WORKDIR /go/src/github.com/checkr/openmock
33
ADD . .
44
RUN make build

‎Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ run: build
2323
lint:
2424
ifndef GOLANGCILINT
2525
@GO111MODULE=off go get -u github.com/myitcv/gobin
26-
@gobin github.com/golangci/golangci-lint/cmd/golangci-lint@v1.17.1
26+
@gobin github.com/golangci/golangci-lint/cmd/golangci-lint@v1.24.0
2727
endif
2828
@golangci-lint run
2929

‎demo_templates/http.yaml

+12
Original file line numberDiff line numberDiff line change
@@ -193,3 +193,15 @@
193193
- reply_http:
194194
status_code: 200
195195
body: '{{ .HTTPBody | jsonPath "foo" }}'
196+
197+
- key: base64-basicauth-with-env
198+
kind: Behavior
199+
expect:
200+
http:
201+
method: POST
202+
path: /base64-basicauth-with-env
203+
actions:
204+
- reply_http:
205+
headers:
206+
Authorization: '{{ printf "foobar:%s" (env "BASIC_AUTH_PASS") | b64enc }}'
207+
status_code: 200

‎handle_actions.go

+46-22
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@ import (
99
"github.com/sirupsen/logrus"
1010
)
1111

12-
func (ms MocksArray) DoActions(c Context) error {
12+
func (ms MocksArray) DoActions(ctx Context) error {
1313
for _, m := range ms {
14-
if err := m.DoActions(c); err != nil {
14+
if err := m.DoActions(ctx); err != nil {
1515
return nil
1616
}
1717
}
1818
return nil
1919
}
2020

21-
func (m *Mock) DoActions(c Context) error {
22-
c.Values = m.Values
23-
if !c.MatchCondition(m.Expect.Condition) {
21+
func (m *Mock) DoActions(ctx Context) error {
22+
ctx.Values = m.Values
23+
if !ctx.MatchCondition(m.Expect.Condition) {
2424
return nil
2525
}
2626
for _, actionDispatcher := range m.Actions {
2727
actualAction := getActualAction(actionDispatcher)
28-
if err := actualAction.Perform(c); err != nil {
28+
if err := actualAction.Perform(ctx); err != nil {
2929
logrus.WithFields(logrus.Fields{
3030
"err": err,
3131
"action": fmt.Sprintf("%T", actualAction),
@@ -35,13 +35,13 @@ func (m *Mock) DoActions(c Context) error {
3535
return nil
3636
}
3737

38-
func (a ActionSendHTTP) Perform(context Context) error {
39-
bodyStr, err := context.Render(a.Body)
38+
func (a ActionSendHTTP) Perform(ctx Context) error {
39+
bodyStr, err := ctx.Render(a.Body)
4040
if err != nil {
4141
return err
4242
}
4343

44-
urlStr, err := context.Render(a.URL)
44+
urlStr, err := ctx.Render(a.URL)
4545
if err != nil {
4646
return err
4747
}
@@ -50,6 +50,11 @@ func (a ActionSendHTTP) Perform(context Context) error {
5050
SetDebug(true).
5151
CustomMethod(a.Method, urlStr)
5252

53+
a.Headers, err = renderHeaders(ctx, a.Headers)
54+
if err != nil {
55+
return err
56+
}
57+
5358
for k, v := range a.Headers {
5459
request.Set(k, v)
5560
}
@@ -61,19 +66,25 @@ func (a ActionSendHTTP) Perform(context Context) error {
6166
return nil
6267
}
6368

64-
func (a ActionReplyHTTP) Perform(context Context) error {
65-
ec := context.HTTPContext
69+
func (a ActionReplyHTTP) Perform(ctx Context) (err error) {
70+
ec := ctx.HTTPContext
6671
contentType := echo.MIMEApplicationJSON // default to JSON
6772
if ct, ok := a.Headers[echo.HeaderContentType]; ok {
6873
contentType = ct
6974
}
75+
76+
a.Headers, err = renderHeaders(ctx, a.Headers)
77+
if err != nil {
78+
return err
79+
}
80+
7081
for k, v := range a.Headers {
7182
ec.Response().Header().Set(k, v)
7283
}
7384

74-
msg, err := context.Render(a.Body)
85+
msg, err := ctx.Render(a.Body)
7586
if err != nil {
76-
logrus.WithField("err", err).Error("failed to render template for http")
87+
logrus.WithField("err", err).Error("failed to render template for http body")
7788
return err
7889
}
7990

@@ -98,46 +109,59 @@ func (a ActionReplyHTTP) Perform(context Context) error {
98109
return nil
99110
}
100111

101-
func (a ActionRedis) Perform(context Context) error {
112+
func (a ActionRedis) Perform(ctx Context) error {
102113
for _, cmd := range a {
103-
_, err := context.Render(cmd)
114+
_, err := ctx.Render(cmd)
104115
if err != nil {
105116
return err
106117
}
107118
}
108119
return nil
109120
}
110121

111-
func (a ActionSleep) Perform(context Context) error {
122+
func (a ActionSleep) Perform(ctx Context) error {
112123
time.Sleep(a.Duration)
113124
return nil
114125
}
115126

116-
func (a ActionPublishKafka) Perform(context Context) error {
127+
func (a ActionPublishKafka) Perform(ctx Context) error {
117128
msg := a.Payload
118-
msg, err := context.Render(msg)
129+
msg, err := ctx.Render(msg)
119130
if err != nil {
120131
logrus.WithField("err", err).Error("failed to render template for kafka payload")
121132
return err
122133
}
123-
err = context.om.kafkaClient.sendMessage(a.Topic, []byte(msg))
134+
err = ctx.om.kafkaClient.sendMessage(a.Topic, []byte(msg))
124135
if err != nil {
125136
logrus.WithField("err", err).Error("failed to publish to kafka")
126137
}
127138
return err
128139
}
129140

130-
func (a ActionPublishAMQP) Perform(context Context) error {
131-
msg, err := context.Render(a.Payload)
141+
func (a ActionPublishAMQP) Perform(ctx Context) error {
142+
msg, err := ctx.Render(a.Payload)
132143
if err != nil {
133144
logrus.WithField("err", err).Error("failed to render template for amqp")
134145
return err
135146
}
136147
publishToAMQP(
137-
context.om.AMQPURL,
148+
ctx.om.AMQPURL,
138149
a.Exchange,
139150
a.RoutingKey,
140151
msg,
141152
)
142153
return nil
143154
}
155+
156+
func renderHeaders(ctx Context, headers map[string]string) (map[string]string, error) {
157+
ret := make(map[string]string)
158+
for k, v := range headers {
159+
msg, err := ctx.Render(v)
160+
if err != nil {
161+
logrus.WithField("err", err).Error("failed to render template for http headers")
162+
return nil, err
163+
}
164+
ret[k] = msg
165+
}
166+
return ret, nil
167+
}

0 commit comments

Comments
 (0)
Please sign in to comment.