Skip to content

Commit 39b80b2

Browse files
committed
added user agent to wrapped client
1 parent 7f7e0d4 commit 39b80b2

File tree

4 files changed

+74
-16
lines changed

4 files changed

+74
-16
lines changed

feature/dynamodb/entitymanager/table.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"reflect"
66

7+
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
78
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
89
)
910

@@ -52,6 +53,12 @@ func NewTable[T any](client Client, fns ...func(options *TableOptions[T])) (*Tab
5253

5354
opts := TableOptions[T]{}
5455

56+
if c, ok := client.(*dynamodb.Client); ok {
57+
client = dynamodb.New(c.Options(), func(o *dynamodb.Options) {
58+
o.APIOptions = append(o.APIOptions, awsmiddleware.AddUserAgentKeyValue(UserAgentPart, EntityManagerVersion))
59+
})
60+
}
61+
5562
for _, fn := range fns {
5663
fn(&opts)
5764
}

feature/dynamodb/entitymanager/table_item_operations_test.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func TestTableCreate(t *testing.T) {
134134
t.Errorf("unexpcted table error: %v", err)
135135
}
136136

137-
_, err = table.Create(context.TODO())
137+
_, err = table.Create(context.Background())
138138
if c.expectedError && err == nil {
139139
t.Fatalf("expected error but got none")
140140
}
@@ -195,9 +195,9 @@ func TestTableDescribe(t *testing.T) {
195195
t.Errorf("unexpcted table error: %v", err)
196196
}
197197

198-
_, _ = table.Create(context.TODO())
198+
_, _ = table.Create(context.Background())
199199

200-
_, err = table.Describe(context.TODO())
200+
_, err = table.Describe(context.Background())
201201
if c.expectedError && err == nil {
202202
t.Fatalf("expected error but got none")
203203
}
@@ -257,9 +257,9 @@ func TestTableDelete(t *testing.T) {
257257
t.Errorf("unexpcted table error: %v", err)
258258
}
259259

260-
_, _ = table.Create(context.TODO())
260+
_, _ = table.Create(context.Background())
261261

262-
_, err = table.Delete(context.TODO())
262+
_, err = table.Delete(context.Background())
263263
if c.expectedError && err == nil {
264264
t.Fatalf("expected error but got none")
265265
}
@@ -300,7 +300,7 @@ func TestTableGetItem(t *testing.T) {
300300
t.Errorf("unexpcted table error: %v", err)
301301
}
302302

303-
_, err = table.GetItem(context.TODO(), Map{})
303+
_, err = table.GetItem(context.Background(), Map{})
304304
if c.expectedError && err == nil {
305305
t.Fatalf("expected error but got none")
306306
}
@@ -341,7 +341,7 @@ func TestTablePutItem(t *testing.T) {
341341
t.Errorf("unexpcted table error: %v", err)
342342
}
343343

344-
_, err = table.PutItem(context.TODO(), &order{})
344+
_, err = table.PutItem(context.Background(), &order{})
345345
if c.expectedError && err == nil {
346346
t.Fatalf("expected error but got none")
347347
}
@@ -382,7 +382,7 @@ func TestTableUpdateItem(t *testing.T) {
382382
t.Errorf("unexpcted table error: %v", err)
383383
}
384384

385-
_, err = table.UpdateItem(context.TODO(), &order{})
385+
_, err = table.UpdateItem(context.Background(), &order{})
386386
if c.expectedError && err == nil {
387387
t.Fatalf("expected error but got none")
388388
}
@@ -425,7 +425,7 @@ func TestTableDeleteItem(t *testing.T) {
425425
t.Errorf("unexpcted table error: %v", err)
426426
}
427427

428-
err = table.DeleteItem(context.TODO(), &order{})
428+
err = table.DeleteItem(context.Background(), &order{})
429429
if c.expectedError && err == nil {
430430
t.Fatalf("expected error but got none")
431431
}
@@ -471,7 +471,7 @@ func TestTableQuery(t *testing.T) {
471471
t.Errorf("unexpcted table error: %v", err)
472472
}
473473

474-
for res := range table.Query(context.TODO(), expression.Expression{}) {
474+
for res := range table.Query(context.Background(), expression.Expression{}) {
475475
if c.expectedError && res.Error() == nil {
476476
t.Fatalf("expected error but got none")
477477
}
@@ -518,7 +518,7 @@ func TestTableScan(t *testing.T) {
518518
t.Errorf("unexpcted table error: %v", err)
519519
}
520520

521-
for res := range table.Scan(context.TODO(), expression.Expression{}) {
521+
for res := range table.Scan(context.Background(), expression.Expression{}) {
522522
if c.expectedError && res.Error() == nil {
523523
t.Fatalf("expected error but got none")
524524
}
@@ -573,7 +573,7 @@ func TestTableBatchGetItem(t *testing.T) {
573573
bgio.AddReadItemByMap(item)
574574
}
575575

576-
for res := range bgio.Execute(context.TODO()) {
576+
for res := range bgio.Execute(context.Background()) {
577577
if c.expectedError && res.Error() == nil {
578578
t.Fatalf("expected error but got none")
579579
}
@@ -644,7 +644,7 @@ func TestTableBatchWriteItem(t *testing.T) {
644644
}
645645
}
646646

647-
err = bgwo.Execute(context.TODO())
647+
err = bgwo.Execute(context.Background())
648648
if c.expectedError && err == nil {
649649
t.Fatalf("expected error but got none")
650650
}

feature/dynamodb/entitymanager/table_test.go

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import (
44
"context"
55
"fmt"
66
"log"
7+
"net/http"
8+
"strings"
79
"testing"
810
"time"
911

@@ -319,7 +321,7 @@ func TestTableE2E(t *testing.T) {
319321
}
320322
}
321323

322-
if err := bwo.Execute(context.TODO()); err != nil {
324+
if err := bwo.Execute(context.Background()); err != nil {
323325
t.Error(err.Error())
324326
} else {
325327
t.Log("BatchWritePut done")
@@ -336,7 +338,7 @@ func TestTableE2E(t *testing.T) {
336338
}
337339
}
338340

339-
for item := range bgo.Execute(context.TODO()) {
341+
for item := range bgo.Execute(context.Background()) {
340342
if item.Error() != nil {
341343
t.Errorf("error during BatchGetOperation iteration: %v", item.Error())
342344
continue
@@ -367,8 +369,53 @@ func TestTableE2E(t *testing.T) {
367369
}
368370
}
369371

370-
if err := bwod.Execute(context.TODO()); err != nil {
372+
if err := bwod.Execute(context.Background()); err != nil {
371373
t.Error(err.Error())
372374
}
373375
}
374376
}
377+
378+
type captureHTTPClient struct {
379+
req *http.Request
380+
}
381+
382+
func (c *captureHTTPClient) Do(req *http.Request) (*http.Response, error) {
383+
c.req = req
384+
return nil, nil
385+
}
386+
387+
func TestTableAddsHeaderToClient(t *testing.T) {
388+
ctx := context.Background()
389+
httpClient := &captureHTTPClient{}
390+
391+
cfg, err := config.LoadDefaultConfig(ctx, config.WithHTTPClient(httpClient))
392+
if err != nil {
393+
t.Fatalf("LoadDefaultConfig() error: %v", err)
394+
}
395+
396+
client := dynamodb.NewFromConfig(cfg)
397+
398+
tbl, err := NewTable[order](client)
399+
if err != nil {
400+
t.Fatalf("NewTable() error: %v", err)
401+
}
402+
403+
_, _ = tbl.GetItem(ctx, Map{})
404+
405+
if httpClient.req == nil {
406+
t.Fatal("expected HTTP request to be captured, got nil")
407+
}
408+
409+
ua := httpClient.req.Header.Get("User-Agent")
410+
t.Logf(`Found user agent: "%s"`, ua)
411+
if ua == "" {
412+
t.Fatal("expected User-Agent header to be set, got empty string")
413+
}
414+
415+
if !strings.Contains(ua, UserAgentPart) {
416+
t.Fatalf("expected User-Agent header to contain %q, got %q", UserAgentPart, ua)
417+
}
418+
if !strings.Contains(ua, EntityManagerVersion) {
419+
t.Fatalf("expected User-Agent header to contain %q, got %q", EntityManagerVersion, ua)
420+
}
421+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package entitymanager
2+
3+
const UserAgentPart = "entity-manager"
4+
const EntityManagerVersion = "0.1.0"

0 commit comments

Comments
 (0)