From d48263e43fce36de1b10face0f532196e2000665 Mon Sep 17 00:00:00 2001
From: Leon Mika <lmika@lmika.org>
Date: Fri, 15 Apr 2022 06:03:55 +1000
Subject: [PATCH] Added command to load test SSM parameters

---
 cmd/dynamo-browse/main.go        |  2 +-
 cmd/ssm-browse/main.go           | 13 ++++++++++++-
 docker-compose.yml               | 12 +++++++++---
 test/cmd/load-test-ssm/main.go   | 30 ++++++++++++++++++++++++++++++
 test/cmd/load-test-table/main.go |  2 +-
 5 files changed, 53 insertions(+), 6 deletions(-)
 create mode 100644 test/cmd/load-test-ssm/main.go

diff --git a/cmd/dynamo-browse/main.go b/cmd/dynamo-browse/main.go
index 3427e2d..a1ad78b 100644
--- a/cmd/dynamo-browse/main.go
+++ b/cmd/dynamo-browse/main.go
@@ -34,7 +34,7 @@ func main() {
 	var dynamoClient *dynamodb.Client
 	if *flagLocal {
 		dynamoClient = dynamodb.NewFromConfig(cfg,
-			dynamodb.WithEndpointResolver(dynamodb.EndpointResolverFromURL("http://localhost:8000")))
+			dynamodb.WithEndpointResolver(dynamodb.EndpointResolverFromURL("http://localhost:4566")))
 	} else {
 		dynamoClient = dynamodb.NewFromConfig(cfg)
 	}
diff --git a/cmd/ssm-browse/main.go b/cmd/ssm-browse/main.go
index 6b215e9..5124e05 100644
--- a/cmd/ssm-browse/main.go
+++ b/cmd/ssm-browse/main.go
@@ -2,6 +2,7 @@ package main
 
 import (
 	"context"
+	"flag"
 	"fmt"
 	"github.com/aws/aws-sdk-go-v2/config"
 	"github.com/aws/aws-sdk-go-v2/service/ssm"
@@ -18,6 +19,9 @@ import (
 )
 
 func main() {
+	var flagLocal = flag.Bool("local", false, "local endpoint")
+	flag.Parse()
+
 	// Pre-determine if layout has dark background.  This prevents calls for creating a list to hang.
 	lipgloss.HasDarkBackground()
 
@@ -28,7 +32,14 @@ func main() {
 	if err != nil {
 		cli.Fatalf("cannot load AWS config: %v", err)
 	}
-	ssmClient := ssm.NewFromConfig(cfg)
+
+	var ssmClient *ssm.Client
+	if *flagLocal {
+		ssmClient = ssm.NewFromConfig(cfg,
+			ssm.WithEndpointResolver(ssm.EndpointResolverFromURL("http://localhost:4566")))
+	} else {
+		ssmClient = ssm.NewFromConfig(cfg)
+	}
 
 	provider := awsssm.NewProvider(ssmClient)
 	service := ssmparameters.NewService(provider)
diff --git a/docker-compose.yml b/docker-compose.yml
index ff5b618..0edc443 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,6 +1,12 @@
 version: '3'
 services:
-  dynamo:
-    image: amazon/dynamodb-local:latest
+  localstack:
+    image: localstack/localstack
     ports:
-      - 8000:8000
\ No newline at end of file
+      - "4566:4566"
+    environment:
+      - SERVICES=ssm,dynamodb
+#  dynamo:
+#    image: amazon/dynamodb-local:latest
+#    ports:
+#      - 8000:8000
\ No newline at end of file
diff --git a/test/cmd/load-test-ssm/main.go b/test/cmd/load-test-ssm/main.go
new file mode 100644
index 0000000..cf9df9f
--- /dev/null
+++ b/test/cmd/load-test-ssm/main.go
@@ -0,0 +1,30 @@
+package main
+
+import (
+	"context"
+	"github.com/aws/aws-sdk-go-v2/aws"
+	"github.com/aws/aws-sdk-go-v2/config"
+	"github.com/aws/aws-sdk-go-v2/service/ssm"
+	"github.com/aws/aws-sdk-go-v2/service/ssm/types"
+	"github.com/lmika/gopkgs/cli"
+)
+
+func main() {
+	ctx := context.Background()
+
+	cfg, err := config.LoadDefaultConfig(ctx)
+	if err != nil {
+		cli.Fatalf("cannot load AWS config: %v", err)
+	}
+
+	ssmClient := ssm.NewFromConfig(cfg,
+		ssm.WithEndpointResolver(ssm.EndpointResolverFromURL("http://localhost:4566")))
+
+	if _, err := ssmClient.PutParameter(ctx, &ssm.PutParameterInput{
+		Name:  aws.String("/alpha/bravo"),
+		Type:  types.ParameterTypeString,
+		Value: aws.String("This is a parameter value"),
+	}); err != nil {
+		cli.Fatal(err)
+	}
+}
diff --git a/test/cmd/load-test-table/main.go b/test/cmd/load-test-table/main.go
index 1db13d7..847db77 100644
--- a/test/cmd/load-test-table/main.go
+++ b/test/cmd/load-test-table/main.go
@@ -27,7 +27,7 @@ func main() {
 	}
 
 	dynamoClient := dynamodb.NewFromConfig(cfg,
-		dynamodb.WithEndpointResolver(dynamodb.EndpointResolverFromURL("http://localhost:8000")))
+		dynamodb.WithEndpointResolver(dynamodb.EndpointResolverFromURL("http://localhost:4566")))
 
 	if _, err = dynamoClient.DeleteTable(ctx, &dynamodb.DeleteTableInput{
 		TableName: aws.String(tableName),