forked from aws/aws-lambda-runtime-interface-emulator
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathexample_test.go
More file actions
121 lines (99 loc) · 3.12 KB
/
example_test.go
File metadata and controls
121 lines (99 loc) · 3.12 KB
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
112
113
114
115
116
117
118
119
120
121
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
package lmds_test
import (
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
"os"
"strconv"
"strings"
"time"
"github.com/aws/aws-lambda-runtime-interface-emulator/internal/lmds"
)
func Example() {
type extendedMetadata struct {
lmds.Metadata
CapacityProviderArn string `json:"CapacityProviderArn"`
}
service := lmds.NewService("test-token")
metadata := &extendedMetadata{
Metadata: lmds.Metadata{
AvailabilityZoneID: "use1-az1",
},
CapacityProviderArn: "arn:aws:ecs:us-east-1:123456789012:capacity-provider/my-capacity-provider",
}
metadataBytes, _ := json.Marshal(metadata)
service.UpdateMetadata(lmds.MetadataConfig{
Data: metadataBytes,
MaxAge: 1 * time.Second,
})
server := httptest.NewServer(service)
defer server.Close()
updatedMetadata := &extendedMetadata{
Metadata: lmds.Metadata{
AvailabilityZoneID: "use1-az3",
},
CapacityProviderArn: "arn:aws:ecs:us-east-1:123456789012:capacity-provider/another-provider",
}
updatedMetadataBytes, _ := json.Marshal(updatedMetadata)
service.UpdateMetadata(lmds.MetadataConfig{
Data: updatedMetadataBytes,
MaxAge: 12 * time.Hour,
})
metrics := service.Metrics.Take()
fmt.Printf("Metrics: clientErrs=%d serverErrs=%d successfulCalls=%d\n",
metrics.ClientErrors, metrics.ServerErrors, metrics.SuccessfulCalls)
}
func Example_client() {
metadata := lmds.Metadata{
AvailabilityZoneID: "use1-az1",
}
metadataBytes, _ := json.Marshal(metadata)
const TOKEN = "test-secret-token"
service := lmds.NewService(TOKEN)
service.UpdateMetadata(lmds.MetadataConfig{
Data: metadataBytes,
MaxAge: 12 * time.Hour,
})
server := httptest.NewServer(service)
defer server.Close()
_ = os.Setenv("AWS_LAMBDA_METADATA_API", server.Listener.Addr().String())
_ = os.Setenv("AWS_LAMBDA_METADATA_TOKEN", TOKEN)
client := &http.Client{}
endpoint := fmt.Sprintf("http://%s/2026-01-15/metadata/execution-environment", os.Getenv("AWS_LAMBDA_METADATA_API"))
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
fmt.Printf("Error creating request: %v\n", err)
return
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AWS_LAMBDA_METADATA_TOKEN"))
resp, err := client.Do(req)
if err != nil {
fmt.Printf("Error making request: %v\n", err)
return
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
fmt.Printf("Unexpected status code: %d\n", resp.StatusCode)
return
}
cacheControl := resp.Header.Get("Cache-Control")
var maxAge time.Duration
for _, directive := range strings.Split(cacheControl, ",") {
directive = strings.TrimSpace(directive)
if strings.HasPrefix(directive, "max-age=") {
if seconds, err := strconv.Atoi(strings.TrimPrefix(directive, "max-age=")); err == nil {
maxAge = time.Duration(seconds) * time.Second
}
}
}
fmt.Printf("MaxAge: %v\n", maxAge)
var result map[string]string
if err := json.NewDecoder(resp.Body).Decode(&result); err != nil {
fmt.Printf("Error decoding response: %v\n", err)
return
}
fmt.Printf("AvailabilityZoneID: %s\n", result["AvailabilityZoneID"])
}