From 7e75073889cd2324f33b959c4fb4545440da046c Mon Sep 17 00:00:00 2001 From: Bramha Ghosh Date: Wed, 19 May 2021 18:06:43 -0400 Subject: [PATCH] adding a noop/noop modifier with a json API (#319) * Adding a noop modifier in its own noop package --- go.mod | 1 + har/har.go | 2 ++ noop/noop.go | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 noop/noop.go diff --git a/go.mod b/go.mod index 31b92adbe..82a7c29e0 100644 --- a/go.mod +++ b/go.mod @@ -8,4 +8,5 @@ require ( golang.org/x/net v0.0.0-20190628185345-da137c7871d7 google.golang.org/grpc v1.37.0 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 // indirect + google.golang.org/protobuf v1.26.0 // indirect ) diff --git a/har/har.go b/har/har.go index 1ac23adfa..00e7872fd 100644 --- a/har/har.go +++ b/har/har.go @@ -307,6 +307,7 @@ type contentJSON struct { Encoding string `json:"encoding,omitempty"` } +// MarshalJSON marshals the byte slice into json after encoding based on c.Encoding. func (c Content) MarshalJSON() ([]byte, error) { var txt string switch c.Encoding { @@ -327,6 +328,7 @@ func (c Content) MarshalJSON() ([]byte, error) { return json.Marshal(cj) } +// UnmarshalJSON unmarshals the bytes slice into Content. func (c *Content) UnmarshalJSON(data []byte) error { var cj contentJSON if err := json.Unmarshal(data, &cj); err != nil { diff --git a/noop/noop.go b/noop/noop.go new file mode 100644 index 000000000..9ef61db06 --- /dev/null +++ b/noop/noop.go @@ -0,0 +1,78 @@ +// Copyright 2021 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package noop provides a martian.RequestResponseModifier that does not +// modify the request or response. +package noop + +import ( + "encoding/json" + "net/http" + + "github.com/google/martian/v3" + "github.com/google/martian/v3/log" + "github.com/google/martian/v3/parse" +) + +func init() { + parse.Register("noop.Modifier", modifierFromJSON) +} + +type noopModifier struct { + id string +} + +// Noop returns a modifier that does not change the request or the response. +func Noop(id string) martian.RequestResponseModifier { + return &noopModifier{ + id: id, + } +} + +// ModifyRequest logs a debug line. +func (nm *noopModifier) ModifyRequest(*http.Request) error { + log.Debugf("noopModifier: %s: no request modification applied", nm.id) + return nil +} + +// ModifyResponse logs a debug line. +func (nm *noopModifier) ModifyResponse(*http.Response) error { + log.Debugf("noopModifier: %s: no response modification applied", nm.id) + return nil +} + +type modifierJSON struct { + Name string `json:"name"` + Scope []parse.ModifierType `json:"scope"` +} + +// modifierFromJSON takes a JSON message as a byte slice and returns +// a headerModifier and an error. +// +// Example JSON configuration message: +// { +// "scope": ["request", "result"], +// "name": "noop-name", +// } +func modifierFromJSON(b []byte) (*parse.Result, error) { + msg := &modifierJSON{} + if err := json.Unmarshal(b, msg); err != nil { + return nil, err + } + + modifier := Noop(msg.Name) + + return parse.NewResult(modifier, msg.Scope) +} +