-
Notifications
You must be signed in to change notification settings - Fork 555
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(events): add VPC Lattice request/response types
- Loading branch information
1 parent
771b391
commit de2a65f
Showing
5 changed files
with
202 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"isBase64Encoded": true, | ||
"statusCode": 200, | ||
"statusDescription": "200 OK", | ||
"headers": { | ||
"set-cookie": "cookies", | ||
"content-type": "application/json" | ||
}, | ||
"body": "BODY" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"raw_path": "/", | ||
"method": "POST", | ||
"headers": { | ||
"accept-encoding": "gzip, br, deflate", | ||
"accept": "application/json", | ||
"content-length": "4", | ||
"content-type": "application/json", | ||
"host": "some-host.vpc-lattice-svcs.us-east-1.on.aws", | ||
"x-forwarded-for": "1.2.3.4,2.3.4.5", | ||
"x-forwarded-port": "443" | ||
}, | ||
"query_string_parameters": {}, | ||
"body": "BODY", | ||
"is_base64_encoded": true | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
{ | ||
"version": "2.0", | ||
"path": "/", | ||
"method": "POST", | ||
"headers": { | ||
"accept": [ | ||
"application/json" | ||
], | ||
"x-forwarded-port": [ | ||
"443" | ||
], | ||
"x-forwarded-for": [ | ||
"1.2.3.4,2.3.4.5" | ||
], | ||
"host": [ | ||
"some-host.vpc-lattice-svcs.us-east-1.on.aws" | ||
], | ||
"content-type": [ | ||
"application/json" | ||
], | ||
"content-length": [ | ||
"4" | ||
], | ||
"accept-encoding": [ | ||
"gzip, br, deflate" | ||
] | ||
}, | ||
"body": "BODY", | ||
"requestContext": { | ||
"serviceNetworkArn": "arn:aws:vpc-lattice:us-east-1:12346789012:servicenetwork/sn-0db8ae434454b4422", | ||
"serviceArn": "arn:aws:vpc-lattice:us-east-1:12346789012:service/svc-0db8ae434454b4422", | ||
"targetGroupArn": "arn:aws:vpc-lattice:us-east-1:12346789012:targetgroup/tg-0db8ae434454b4422", | ||
"identity": { | ||
"sourceVpcArn": "arn:aws:ec2:us-east-1:12346789012:vpc/vpc-0db8ae434454b4422", | ||
"type": "AWS_IAM", | ||
"principal": "arn:aws:sts::12346789012:assumed-role/IAM_ROLE/SESSION_NAME", | ||
"sessionName": "SESSION_NAME" | ||
}, | ||
"region": "us-east-1", | ||
"timeEpoch": "1695799509392227" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package events | ||
|
||
// VPCLatticeRequestV1 contains data coming from AWS VPC Lattice | ||
type VPCLatticeRequestV1 struct { | ||
RawPath string `json:"raw_path"` | ||
Method string `json:"method"` | ||
Headers map[string]string `json:"headers"` | ||
QueryStringParameters map[string]string `json:"query_string_parameters"` | ||
Body string `json:"body"` | ||
IsBase64Encoded bool `json:"is_base64_encoded,omitempty"` | ||
} | ||
|
||
// VPCLatticeRequestV2 contains data coming from AWS VPC Lattice | ||
type VPCLatticeRequestV2 struct { | ||
Version string `json:"version"` | ||
Path string `json:"path"` | ||
Method string `json:"method"` | ||
Headers map[string][]string `json:"headers"` | ||
Body string `json:"body"` | ||
RequestContext VpcLatticeRequestContext `json:"requestContext"` | ||
} | ||
|
||
// VpcLatticeRequestContext contains metadata about the incoming request | ||
type VpcLatticeRequestContext struct { | ||
ServiceNetworkArn string `json:"serviceNetworkArn"` | ||
ServiceArn string `json:"serviceArn"` | ||
TargetGroupArn string `json:"targetGroupArn"` | ||
Identity *VpcLatticeRequestIdentity `json:"identity,omitempty"` | ||
Region string `json:"region"` | ||
TimeEpoch string `json:"timeEpoch"` | ||
} | ||
|
||
// VpcLatticeRequestIdentity contains information about the caller | ||
type VpcLatticeRequestIdentity struct { | ||
SourceVpcArn string `json:"sourceVpcArn"` | ||
Type string `json:"type"` | ||
Principal string `json:"principal"` | ||
SessionName string `json:"sessionName"` | ||
} | ||
|
||
// VPCLatticeResponse contains the response to be returned to VPC Lattice | ||
type VPCLatticeResponse struct { | ||
IsBase64Encoded bool `json:"isBase64Encoded,omitempty"` | ||
StatusCode int `json:"statusCode"` | ||
StatusDescription string `json:"statusDescription,omitempty"` | ||
Headers map[string]string `json:"headers"` | ||
Body string `json:"body"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
package events | ||
|
||
import ( | ||
"encoding/json" | ||
"io/ioutil" | ||
"testing" | ||
|
||
"github.com/aws/aws-lambda-go/events/test" | ||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestVPCLatticeRequestV1Marshalling(t *testing.T) { | ||
|
||
// read json from file | ||
inputJSON, err := ioutil.ReadFile("./testdata/vpclattice-v1-request.json") | ||
if err != nil { | ||
t.Errorf("could not open test file. details: %v", err) | ||
} | ||
|
||
// de-serialize into Go object | ||
var inputEvent VPCLatticeRequestV1 | ||
if err := json.Unmarshal(inputJSON, &inputEvent); err != nil { | ||
t.Errorf("could not unmarshal event. details: %v", err) | ||
} | ||
|
||
// serialize to json | ||
outputJSON, err := json.Marshal(inputEvent) | ||
if err != nil { | ||
t.Errorf("could not marshal event. details: %v", err) | ||
} | ||
|
||
assert.JSONEq(t, string(inputJSON), string(outputJSON)) | ||
} | ||
|
||
func TestVPCLatticeRequestV1MalformedJson(t *testing.T) { | ||
test.TestMalformedJson(t, VPCLatticeRequestV1{}) | ||
} | ||
|
||
func TestVPCLatticeRequestV2Marshalling(t *testing.T) { | ||
|
||
// read json from file | ||
inputJSON, err := ioutil.ReadFile("./testdata/vpclattice-v2-request.json") | ||
if err != nil { | ||
t.Errorf("could not open test file. details: %v", err) | ||
} | ||
|
||
// de-serialize into Go object | ||
var inputEvent VPCLatticeRequestV2 | ||
if err := json.Unmarshal(inputJSON, &inputEvent); err != nil { | ||
t.Errorf("could not unmarshal event. details: %v", err) | ||
} | ||
|
||
// serialize to json | ||
outputJSON, err := json.Marshal(inputEvent) | ||
if err != nil { | ||
t.Errorf("could not marshal event. details: %v", err) | ||
} | ||
|
||
assert.JSONEq(t, string(inputJSON), string(outputJSON)) | ||
} | ||
|
||
func TestVPCLatticeRequestV2MalformedJson(t *testing.T) { | ||
test.TestMalformedJson(t, VPCLatticeRequestV2{}) | ||
} | ||
|
||
func TestVPCLatticeResponse(t *testing.T) { | ||
// read json from file | ||
inputJSON, err := ioutil.ReadFile("./testdata/vpclattice-response.json") | ||
if err != nil { | ||
t.Errorf("could not open test file. details: %v", err) | ||
} | ||
|
||
// de-serialize into Go object | ||
var inputEvent VPCLatticeResponse | ||
if err := json.Unmarshal(inputJSON, &inputEvent); err != nil { | ||
t.Errorf("could not unmarshal event. details: %v", err) | ||
} | ||
|
||
// serialize to json | ||
outputJSON, err := json.Marshal(inputEvent) | ||
if err != nil { | ||
t.Errorf("could not marshal event. details: %v", err) | ||
} | ||
|
||
assert.JSONEq(t, string(inputJSON), string(outputJSON)) | ||
} |