Skip to content

Instantly share code, notes, and snippets.

@akarasz

akarasz/main.go Secret

Created May 20, 2021 07:35
Show Gist options
  • Save akarasz/90800b25481cdbb3a7feb8ad69814aeb to your computer and use it in GitHub Desktop.
Save akarasz/90800b25481cdbb3a7feb8ad69814aeb to your computer and use it in GitHub Desktop.
Simple End-to-end Testing with Lambda Functions
package main
import (
"context"
"fmt"
"net/http"
"os"
"sync"
"github.com/PagerDuty/go-pagerduty"
"github.com/aws/aws-lambda-go/lambda"
)
var pdApiKey = os.Getenv("PD_KEY")
type E2E struct {
sync.WaitGroup
client *pagerduty.Client
}
func NewE2E() *E2E {
return &E2E{
client: pagerduty.NewClient(pdApiKey),
}
}
func (e2e *E2E) success(ctx context.Context, testcase string) {
e := &pagerduty.V2Event{
RoutingKey: pdApiKey,
DedupKey: testcase,
Action: "resolve",
}
if _, err := e2e.client.ManageEventWithContext(ctx, e); err != nil {
panic(err)
}
}
func (e2e *E2E) fail(ctx context.Context, testcase string, err error) {
e := &pagerduty.V2Event{
RoutingKey: pdApiKey,
DedupKey: testcase,
Action: "trigger",
Payload: &pagerduty.V2Payload{
Summary: fmt.Sprintf("%s: %v", testcase, err),
Severity: "critical",
Source: "e2e",
},
}
if _, err = e2e.client.ManageEventWithContext(ctx, e); err != nil {
panic(err)
}
}
func (e2e *E2E) TestScenario(ctx context.Context, summary string, callback func(ctx context.Context) error) {
e2e.Add(1)
go func() {
switch err := callback(ctx); err {
case nil:
e2e.success(ctx, summary)
default:
e2e.fail(ctx, summary, err)
}
e2e.Done()
}()
}
func tests(ctx context.Context) {
e2e := NewE2E()
e2e.TestScenario(ctx, "page load", func(ctx context.Context) error {
client := &http.Client{}
req, err := http.NewRequestWithContext(ctx, "GET", "https://akarasz.me", nil)
if err != nil {
return err
}
res, err := client.Do(req)
if err != nil {
return err
}
if res.StatusCode != 200 {
return fmt.Errorf("unexpected status code %d", res.StatusCode)
}
return nil
})
e2e.Wait()
}
func main() {
lambda.Start(tests)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment