From 58d76d9eb326b64f6880f233ec064677de099d8d Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 21:11:31 +0900 Subject: [PATCH 01/12] added RegisterAWSConfig/DeregisterAWSConfig --- driver.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ example_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ go.mod | 9 ++++++++- go.sum | 18 ++++++++++++++++-- 4 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 example_test.go diff --git a/driver.go b/driver.go index 1178f03..62bbd7e 100644 --- a/driver.go +++ b/driver.go @@ -7,6 +7,7 @@ import ( "os" "reflect" "strings" + "sync" "time" "github.com/aws/aws-sdk-go-v2/aws/transport/http" @@ -92,6 +93,49 @@ func (d *Driver) Open(connStr string) (driver.Conn, error) { opts.EndpointOptions.DisableHTTPS = true } } + awsConfigLock.RLock() + defer awsConfigLock.Unlock() + conf := awsConfig + if conf != nil { + client := dynamodb.NewFromConfig(*conf, mergeDynamoDBOptions(opts)) + return &Conn{client: client, timeout: time.Duration(timeoutMs) * time.Millisecond}, nil + } client := dynamodb.New(opts) return &Conn{client: client, timeout: time.Duration(timeoutMs) * time.Millisecond}, nil } + +// awsConfig is the AWS configuration to be used by the dynamodb client. +var ( + awsConfigLock = &sync.RWMutex{} + awsConfig *aws.Config +) + +// RegisterAWSConfig registers aws.Config to be used by the dynamodb client. +// +// The following configurations do not apply even if they are set in aws.Config. +// - HTTPClient +func RegisterAWSConfig(conf aws.Config) { + awsConfigLock.Lock() + defer awsConfigLock.Unlock() + awsConfig = &conf +} + +// DeregisterAWSConfig removes the registered aws.Config. +func DeregisterAWSConfig() { + awsConfigLock.Lock() + defer awsConfigLock.Unlock() + awsConfig = nil +} + +// mergeDynamoDBOptions merges the provided dynamodb.Options into the default dynamodb.Options. +func mergeDynamoDBOptions(opts dynamodb.Options) func(options *dynamodb.Options) { + return func(defaultOpts *dynamodb.Options) { + if defaultOpts.Credentials == nil { + defaultOpts.Credentials = opts.Credentials + } + if defaultOpts.Region == "" { + defaultOpts.Region = opts.Region + } + defaultOpts.HTTPClient = opts.HTTPClient + } +} diff --git a/example_test.go b/example_test.go new file mode 100644 index 0000000..6be3c7f --- /dev/null +++ b/example_test.go @@ -0,0 +1,43 @@ +package godynamo_test + +import ( + "context" + "database/sql" + "github.com/aws/aws-sdk-go-v2/config" + "github.com/btnguyen2k/godynamo" + "log" +) + +func ExampleRegisterAWSConfig() { + awsConfig, err := config.LoadDefaultConfig(context.Background()) + if err != nil { + log.Fatal(err) + } + godynamo.RegisterAWSConfig(awsConfig) + db, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") + if err != nil { + log.Fatal(err) + } + defer db.Close() +} + +func ExampleDeregisterAWSConfig() { + awsConfig, err := config.LoadDefaultConfig(context.Background()) + if err != nil { + log.Fatal(err) + } + godynamo.RegisterAWSConfig(awsConfig) + db, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") + if err != nil { + log.Fatal(err) + } + defer db.Close() + + // works the same as it did before registration. + godynamo.DeregisterAWSConfig() + db2, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") + if err != nil { + log.Fatal(err) + } + defer db2.Close() +} diff --git a/go.mod b/go.mod index c6cea08..81cca3d 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,8 @@ go 1.18 require ( github.com/aws/aws-sdk-go-v2 v1.26.1 - github.com/aws/aws-sdk-go-v2/credentials v1.17.8 + github.com/aws/aws-sdk-go-v2/config v1.27.11 + github.com/aws/aws-sdk-go-v2/credentials v1.17.11 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 github.com/aws/smithy-go v1.20.2 @@ -13,10 +14,16 @@ require ( ) require ( + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect ) diff --git a/go.sum b/go.sum index 14b4d17..9450ea0 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,19 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8 h1:WUdNLXbyNbU07V/WFrSOBXqZTDgmmMNMgUFzpYOKJhw= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8/go.mod h1:iPZzLpaBIfhyvVS/XGD3JvR1GP3YdHTqpySKDlqkfs8= +github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= +github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -16,6 +22,14 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= From 5cd7836d85d48073799dbea76c67622133c81628 Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 21:19:47 +0900 Subject: [PATCH 02/12] added module test --- module_test/go.mod | 2 +- module_test/go.sum | 11 +++++++++-- module_test/godynamo_test.go | 16 ++++++++++++++++ module_test_real/go.mod | 2 +- module_test_real/go.sum | 11 +++++++++-- 5 files changed, 36 insertions(+), 6 deletions(-) diff --git a/module_test/go.mod b/module_test/go.mod index 3dbad6c..4ef7ef5 100644 --- a/module_test/go.mod +++ b/module_test/go.mod @@ -14,7 +14,7 @@ require ( ) require ( - github.com/aws/aws-sdk-go-v2/credentials v1.17.8 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect diff --git a/module_test/go.sum b/module_test/go.sum index ef76eb4..d97a39b 100644 --- a/module_test/go.sum +++ b/module_test/go.sum @@ -1,13 +1,16 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8 h1:WUdNLXbyNbU07V/WFrSOBXqZTDgmmMNMgUFzpYOKJhw= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8/go.mod h1:iPZzLpaBIfhyvVS/XGD3JvR1GP3YdHTqpySKDlqkfs8= +github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -16,6 +19,10 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index 0d7675c..d2d2e60 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "database/sql/driver" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/btnguyen2k/consu/reddo" "github.com/btnguyen2k/godynamo" "os" @@ -35,6 +36,21 @@ func Test_OpenDatabase(t *testing.T) { } } +func Test_OpenDatabase_With_AWSConfig(t *testing.T) { + testName := "Test_OpenDatabase_With_AWSConfig" + dbdriver := "godynamo" + dsn := "dummy" + godynamo.RegisterAWSConfig(aws.Config{}) + defer godynamo.DeregisterAWSConfig() + db, err := sql.Open(dbdriver, dsn) + if err != nil { + t.Fatalf("%s failed: %s", testName, err) + } + if db == nil { + t.Fatalf("%s failed: nil", testName) + } +} + func TestConn_ValuesToNamedValues(t *testing.T) { testName := "TestConn_ValuesToNamedValues" values := []driver.Value{1, "2", true} diff --git a/module_test_real/go.mod b/module_test_real/go.mod index d787eea..3e6e0b9 100644 --- a/module_test_real/go.mod +++ b/module_test_real/go.mod @@ -13,7 +13,7 @@ require ( require ( github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.8 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect diff --git a/module_test_real/go.sum b/module_test_real/go.sum index ef76eb4..d97a39b 100644 --- a/module_test_real/go.sum +++ b/module_test_real/go.sum @@ -1,13 +1,16 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8 h1:WUdNLXbyNbU07V/WFrSOBXqZTDgmmMNMgUFzpYOKJhw= -github.com/aws/aws-sdk-go-v2/credentials v1.17.8/go.mod h1:iPZzLpaBIfhyvVS/XGD3JvR1GP3YdHTqpySKDlqkfs8= +github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -16,6 +19,10 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= +github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= +github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= From d37bad79aeb25bb6da78ebb3bc6e0d96fb74a6f7 Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 21:22:37 +0900 Subject: [PATCH 03/12] fixed Mutex Lock --- driver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver.go b/driver.go index 62bbd7e..a6dc5ca 100644 --- a/driver.go +++ b/driver.go @@ -94,7 +94,7 @@ func (d *Driver) Open(connStr string) (driver.Conn, error) { } } awsConfigLock.RLock() - defer awsConfigLock.Unlock() + defer awsConfigLock.RUnlock() conf := awsConfig if conf != nil { client := dynamodb.NewFromConfig(*conf, mergeDynamoDBOptions(opts)) From ff1078c1e6960289a2cf8a444acec8dcc1f91a87 Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 21:32:15 +0900 Subject: [PATCH 04/12] few mod module test --- module_test/godynamo_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index d2d2e60..0bdca25 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -5,6 +5,7 @@ import ( "database/sql" "database/sql/driver" "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/credentials" "github.com/btnguyen2k/consu/reddo" "github.com/btnguyen2k/godynamo" "os" @@ -40,7 +41,10 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { testName := "Test_OpenDatabase_With_AWSConfig" dbdriver := "godynamo" dsn := "dummy" - godynamo.RegisterAWSConfig(aws.Config{}) + godynamo.RegisterAWSConfig(aws.Config{ + Region: "us-west-2", + Credentials: credentials.NewStaticCredentialsProvider("abcdefg123456789", "abcdefg123456789", ""), + }) defer godynamo.DeregisterAWSConfig() db, err := sql.Open(dbdriver, dsn) if err != nil { From e1d822d66c98eb57991d7ab49708485a0951244c Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 21:38:32 +0900 Subject: [PATCH 05/12] added driver module test --- module_test/godynamo_test.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index 0bdca25..1528b1f 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -42,8 +42,9 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { dbdriver := "godynamo" dsn := "dummy" godynamo.RegisterAWSConfig(aws.Config{ - Region: "us-west-2", - Credentials: credentials.NewStaticCredentialsProvider("abcdefg123456789", "abcdefg123456789", ""), + Region: "us-west-2", + Credentials: credentials.NewStaticCredentialsProvider( + "abcdefg123456789", "abcdefg123456789", ""), }) defer godynamo.DeregisterAWSConfig() db, err := sql.Open(dbdriver, dsn) @@ -131,3 +132,18 @@ func TestDriver_Close(t *testing.T) { t.Fatalf("%s failed: %s", testName, err) } } + +func TestDriver_Open_With_AWSConfig(t *testing.T) { + testName := "TestDriver_Open" + godynamo.RegisterAWSConfig(aws.Config{ + Region: "us-west-2", + Credentials: credentials.NewStaticCredentialsProvider( + "abcdefg123456789", "abcdefg123456789", ""), + }) + defer godynamo.DeregisterAWSConfig() + db := _openDb(t, testName) + defer func() { _ = db.Close() }() + if err := db.Ping(); err != nil { + t.Fatalf("%s failed: %s", testName, err) + } +} From f88cff495d66096bb7f1031b518362adfe53e155 Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Mon, 15 Apr 2024 22:23:15 +0900 Subject: [PATCH 06/12] added test and eliminated codecov annotations --- module_test/godynamo_test.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index 1528b1f..bece9e9 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -46,7 +46,6 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { Credentials: credentials.NewStaticCredentialsProvider( "abcdefg123456789", "abcdefg123456789", ""), }) - defer godynamo.DeregisterAWSConfig() db, err := sql.Open(dbdriver, dsn) if err != nil { t.Fatalf("%s failed: %s", testName, err) @@ -54,6 +53,18 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { if db == nil { t.Fatalf("%s failed: nil", testName) } + godynamo.DeregisterAWSConfig() + + // with empty aws.Config + godynamo.RegisterAWSConfig(aws.Config{}) + defer godynamo.DeregisterAWSConfig() + dbWithEmptyAWSConfig, err := sql.Open(dbdriver, dsn) + if err != nil { + t.Fatalf("%s failed: %s", testName, err) + } + if dbWithEmptyAWSConfig == nil { + t.Fatalf("%s failed: nil", testName) + } } func TestConn_ValuesToNamedValues(t *testing.T) { From 2ee0f0236c002917075b7add6ceb125f92cf3612 Mon Sep 17 00:00:00 2001 From: miyamo2 Date: Tue, 16 Apr 2024 05:51:51 +0900 Subject: [PATCH 07/12] few test fixes --- module_test/godynamo_test.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index bece9e9..9e6e723 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -46,6 +46,7 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { Credentials: credentials.NewStaticCredentialsProvider( "abcdefg123456789", "abcdefg123456789", ""), }) + defer godynamo.DeregisterAWSConfig() db, err := sql.Open(dbdriver, dsn) if err != nil { t.Fatalf("%s failed: %s", testName, err) @@ -53,11 +54,9 @@ func Test_OpenDatabase_With_AWSConfig(t *testing.T) { if db == nil { t.Fatalf("%s failed: nil", testName) } - godynamo.DeregisterAWSConfig() // with empty aws.Config godynamo.RegisterAWSConfig(aws.Config{}) - defer godynamo.DeregisterAWSConfig() dbWithEmptyAWSConfig, err := sql.Open(dbdriver, dsn) if err != nil { t.Fatalf("%s failed: %s", testName, err) @@ -145,7 +144,7 @@ func TestDriver_Close(t *testing.T) { } func TestDriver_Open_With_AWSConfig(t *testing.T) { - testName := "TestDriver_Open" + testName := "TestDriver_Open_With_AWSConfig" godynamo.RegisterAWSConfig(aws.Config{ Region: "us-west-2", Credentials: credentials.NewStaticCredentialsProvider( @@ -157,4 +156,12 @@ func TestDriver_Open_With_AWSConfig(t *testing.T) { if err := db.Ping(); err != nil { t.Fatalf("%s failed: %s", testName, err) } + + // with empty aws.Config + godynamo.RegisterAWSConfig(aws.Config{}) + dbWithEmptyAWSConfig := _openDb(t, testName) + defer func() { _ = dbWithEmptyAWSConfig.Close() }() + if err := dbWithEmptyAWSConfig.Ping(); err != nil { + t.Fatalf("%s failed: %s", testName, err) + } } From 8d852fcd76974e5365cf6252614f8a4225e1eb56 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Mon, 22 Apr 2024 11:55:28 +1000 Subject: [PATCH 08/12] chore(CI): run go mod tidy before tests --- .github/workflows/ci.yaml | 3 ++- .github/workflows/release.yaml | 4 +++- .semrelease/this_release | 4 +++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index e766c84..75f0735 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -95,7 +95,7 @@ jobs: - name: Run tests run: | go version - go test -v -timeout 9999s -count 1 -p 1 -cover -coverprofile coverage.txt ./ + go mod tidy && go test -v -timeout 9999s -count 1 -p 1 -cover -coverprofile coverage.txt ./ - name: Codecov uses: codecov/codecov-action@v4 env: @@ -123,6 +123,7 @@ jobs: run: | go version cd module_test \ + && go mod tidy \ && go test -v -timeout 9999s -count 1 -p 1 -cover -coverpkg="${COVER_PKG}" -coverprofile coverage_local.txt ./ \ && cd .. - name: Codecov diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 36d84a3..8408537 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -127,7 +127,9 @@ jobs: if [ "${RESULT}" == "SUCCESS" ]; then VERSION='${{ needs.ReleaseDryRun.outputs.VERSION }}' echo "🕘 Cleaning up file .semrelease/this_release..." - echo > .semrelease/this_release + echo "# This file has been cleaned up post-releasing version ${VERSION}." > .semrelease/this_release + echo "# Generate its content quickly using the following command:" >> .semrelease/this_release + echo "# git log origin..HEAD | grep \"^\s\" > .semrelease/this_release" >> .semrelease/this_release git config --global user.email "<>" git config --global user.name "CI Build" git commit -am "Cleanup file .semrelease/this_release post-releasing version ${VERSION}" diff --git a/.semrelease/this_release b/.semrelease/this_release index 8b13789..ca941b4 100644 --- a/.semrelease/this_release +++ b/.semrelease/this_release @@ -1 +1,3 @@ - +# This file has been cleaned up post-releasing version 1.2.1. +# Generate its content quickly using the following command: +# git log origin..HEAD | grep "^\s" > .semrelease/this_release From f65538b3fd2e6ad6e9cc24009fed13c356d81041 Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Thu, 2 May 2024 14:09:35 +1000 Subject: [PATCH 09/12] chore: review and merge PR 'sql.Open with aws.Config' --- README.md | 36 ++++++++++++++++++ driver.go | 26 +++++++++---- example_test.go | 43 --------------------- go.mod | 7 ---- go.sum | 14 ------- module_test/go.mod | 2 +- module_test/go.sum | 7 ---- module_test/godynamo_test.go | 72 ++++++++++++++++++++++++++---------- module_test_real/go.sum | 7 ---- 9 files changed, 107 insertions(+), 107 deletions(-) delete mode 100644 example_test.go diff --git a/README.md b/README.md index 2b2c62d..695b93b 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,42 @@ Region= - `Endpoint`: (optional) AWS DynamoDB endpoint, for example `http://localhost:8000`; useful when AWS DynamoDB is running on local machine. - `TimeoutMs`: (optional) timeout in milliseconds. If not specified, default value is `10000`. +## Using `aws.Config`: + +Since <>, `godynamo` supports using `aws.Config` to create the connection to DynamoDB: + +```go +package main + +import ( + "database/sql" + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/btnguyen2k/godynamo" +) + +func main() { + driver := "godynamo" + awscfg := aws.Config{ + Region: "", + Credentials: aws.StaticCredentialsProvider{ + Value: aws.Credentials{ + AccessKeyID: "", + SecretAccessKey: "", + }, + }, + } + godynamo.RegisterAWSConfig(awscfg) + + db, err := sql.Open(driver, "dummy") + if err != nil { + panic(err) + } + defer db.Close() + + // db instance is ready to use +} +``` + ## Supported statements: - [Table](SQL_TABLE.md): diff --git a/driver.go b/driver.go index a6dc5ca..7509ab1 100644 --- a/driver.go +++ b/driver.go @@ -93,14 +93,15 @@ func (d *Driver) Open(connStr string) (driver.Conn, error) { opts.EndpointOptions.DisableHTTPS = true } } + client := dynamodb.New(opts) + awsConfigLock.RLock() defer awsConfigLock.RUnlock() conf := awsConfig if conf != nil { - client := dynamodb.NewFromConfig(*conf, mergeDynamoDBOptions(opts)) - return &Conn{client: client, timeout: time.Duration(timeoutMs) * time.Millisecond}, nil + client = dynamodb.NewFromConfig(*conf, mergeDynamoDBOptions(opts)) } - client := dynamodb.New(opts) + return &Conn{client: client, timeout: time.Duration(timeoutMs) * time.Millisecond}, nil } @@ -114,6 +115,8 @@ var ( // // The following configurations do not apply even if they are set in aws.Config. // - HTTPClient +// +// @Available since <> func RegisterAWSConfig(conf aws.Config) { awsConfigLock.Lock() defer awsConfigLock.Unlock() @@ -121,6 +124,8 @@ func RegisterAWSConfig(conf aws.Config) { } // DeregisterAWSConfig removes the registered aws.Config. +// +// @Available since <> func DeregisterAWSConfig() { awsConfigLock.Lock() defer awsConfigLock.Unlock() @@ -128,14 +133,19 @@ func DeregisterAWSConfig() { } // mergeDynamoDBOptions merges the provided dynamodb.Options into the default dynamodb.Options. -func mergeDynamoDBOptions(opts dynamodb.Options) func(options *dynamodb.Options) { +func mergeDynamoDBOptions(providedOpts dynamodb.Options) func(*dynamodb.Options) { return func(defaultOpts *dynamodb.Options) { + if defaultOpts.Region == "" { + defaultOpts.Region = providedOpts.Region + } if defaultOpts.Credentials == nil { - defaultOpts.Credentials = opts.Credentials + defaultOpts.Credentials = providedOpts.Credentials } - if defaultOpts.Region == "" { - defaultOpts.Region = opts.Region + defaultOpts.HTTPClient = providedOpts.HTTPClient + + if defaultOpts.BaseEndpoint == nil { + defaultOpts.BaseEndpoint = providedOpts.BaseEndpoint + defaultOpts.EndpointOptions = providedOpts.EndpointOptions } - defaultOpts.HTTPClient = opts.HTTPClient } } diff --git a/example_test.go b/example_test.go deleted file mode 100644 index 6be3c7f..0000000 --- a/example_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package godynamo_test - -import ( - "context" - "database/sql" - "github.com/aws/aws-sdk-go-v2/config" - "github.com/btnguyen2k/godynamo" - "log" -) - -func ExampleRegisterAWSConfig() { - awsConfig, err := config.LoadDefaultConfig(context.Background()) - if err != nil { - log.Fatal(err) - } - godynamo.RegisterAWSConfig(awsConfig) - db, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") - if err != nil { - log.Fatal(err) - } - defer db.Close() -} - -func ExampleDeregisterAWSConfig() { - awsConfig, err := config.LoadDefaultConfig(context.Background()) - if err != nil { - log.Fatal(err) - } - godynamo.RegisterAWSConfig(awsConfig) - db, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") - if err != nil { - log.Fatal(err) - } - defer db.Close() - - // works the same as it did before registration. - godynamo.DeregisterAWSConfig() - db2, err := sql.Open("godynamo", "Region=;AkId=;Secret_Key=") - if err != nil { - log.Fatal(err) - } - defer db2.Close() -} diff --git a/go.mod b/go.mod index 81cca3d..a6ee32e 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.18 require ( github.com/aws/aws-sdk-go-v2 v1.26.1 - github.com/aws/aws-sdk-go-v2/config v1.27.11 github.com/aws/aws-sdk-go-v2/credentials v1.17.11 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 @@ -14,16 +13,10 @@ require ( ) require ( - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect ) diff --git a/go.sum b/go.sum index 9450ea0..eabc637 100644 --- a/go.sum +++ b/go.sum @@ -1,19 +1,13 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= -github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE= github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -22,14 +16,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= diff --git a/module_test/go.mod b/module_test/go.mod index 4ef7ef5..668032b 100644 --- a/module_test/go.mod +++ b/module_test/go.mod @@ -6,6 +6,7 @@ replace github.com/btnguyen2k/godynamo => ../ require ( github.com/aws/aws-sdk-go-v2 v1.26.1 + github.com/aws/aws-sdk-go-v2/credentials v1.17.11 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 github.com/aws/smithy-go v1.20.2 github.com/btnguyen2k/consu/reddo v0.1.9 @@ -14,7 +15,6 @@ require ( ) require ( - github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect diff --git a/module_test/go.sum b/module_test/go.sum index d97a39b..3c5fc0b 100644 --- a/module_test/go.sum +++ b/module_test/go.sum @@ -1,16 +1,13 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -19,10 +16,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= diff --git a/module_test/godynamo_test.go b/module_test/godynamo_test.go index 9e6e723..f2c115c 100644 --- a/module_test/godynamo_test.go +++ b/module_test/godynamo_test.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "database/sql/driver" + "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/credentials" "github.com/btnguyen2k/consu/reddo" @@ -37,32 +38,63 @@ func Test_OpenDatabase(t *testing.T) { } } -func Test_OpenDatabase_With_AWSConfig(t *testing.T) { - testName := "Test_OpenDatabase_With_AWSConfig" +func Test_OpenDatabase_With_AWSConfig_Endpoint(t *testing.T) { + testName := "Test_OpenDatabase_With_AWSConfig_Endpoint" dbdriver := "godynamo" - dsn := "dummy" + + dsnEndpoint := "http://1.2.3.4:1234/" + dsn := fmt.Sprintf("Region=dummy-region;AkId=dummy-key-id;SecretKey=dummy-key;Endpoint=%s", dsnEndpoint) + + { + // without AWSConfig + db, err := sql.Open(dbdriver, dsn) + if err != nil { + t.Fatalf("%s failed: %s", testName+"/open", err) + } + _, err = db.QueryContext(context.Background(), "LIST TABLES") + if err == nil { + t.Fatalf("%s failed: expected error", testName+"/query") + } + if strings.Index(err.Error(), fmt.Sprintf(`"%s"`, dsnEndpoint)) < 0 { + t.Fatalf("%s failed: expected error message to contain [%s], but received [%s]", testName, dsnEndpoint, err) + } + } + + defer godynamo.DeregisterAWSConfig() + + // with AWSConfig + cfgEndpoint := "http://5.6.7.8:5678/" godynamo.RegisterAWSConfig(aws.Config{ - Region: "us-west-2", - Credentials: credentials.NewStaticCredentialsProvider( - "abcdefg123456789", "abcdefg123456789", ""), + BaseEndpoint: aws.String(cfgEndpoint), }) - defer godynamo.DeregisterAWSConfig() - db, err := sql.Open(dbdriver, dsn) - if err != nil { - t.Fatalf("%s failed: %s", testName, err) - } - if db == nil { - t.Fatalf("%s failed: nil", testName) + { + db, err := sql.Open(dbdriver, dsn) + if err != nil { + t.Fatalf("%s failed: %s", testName+"/open", err) + } + _, err = db.QueryContext(context.Background(), "LIST TABLES") + if err == nil { + t.Fatalf("%s failed: expected error", testName+"/query") + } + if strings.Index(err.Error(), fmt.Sprintf(`"%s"`, cfgEndpoint)) < 0 { + t.Fatalf("%s failed: expected error message to contain [%s], but received [%s]", testName, cfgEndpoint, err) + } } - // with empty aws.Config + // with empty AWSConfig godynamo.RegisterAWSConfig(aws.Config{}) - dbWithEmptyAWSConfig, err := sql.Open(dbdriver, dsn) - if err != nil { - t.Fatalf("%s failed: %s", testName, err) - } - if dbWithEmptyAWSConfig == nil { - t.Fatalf("%s failed: nil", testName) + { + db, err := sql.Open(dbdriver, dsn) + if err != nil { + t.Fatalf("%s failed: %s", testName+"/open", err) + } + _, err = db.QueryContext(context.Background(), "LIST TABLES") + if err == nil { + t.Fatalf("%s failed: expected error", testName+"/query") + } + if strings.Index(err.Error(), fmt.Sprintf(`"%s"`, dsnEndpoint)) < 0 { + t.Fatalf("%s failed: expected error message to contain [%s], but received [%s]", testName, dsnEndpoint, err) + } } } diff --git a/module_test_real/go.sum b/module_test_real/go.sum index d97a39b..3c5fc0b 100644 --- a/module_test_real/go.sum +++ b/module_test_real/go.sum @@ -1,16 +1,13 @@ github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA= github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM= -github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA= github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs= github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11 h1:nyWawIVs7Y75DuNhh6vao/qmKKWS56zUuWt/+dOE5iI= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.13.11/go.mod h1:5WPGXfp9+ss7gYsZ5QjJeY16qTpCLaIcQItE7Yw7ld4= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1 h1:dZXY07Dm59TxAjJcUfNMJHLDI/gLMxTRZefn2jFAVsw= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.31.1/go.mod h1:lVLqEtX+ezgtfalyJs7Peb0uv9dEpAQP5yuq2O26R44= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.20.3 h1:KOjg2W7v3tAU8ASDWw26os1OywstODoZdIh9b/Wwlm4= @@ -19,10 +16,6 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1x github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6 h1:6tayEze2Y+hiL3kdnEUxSPsP+pJsUfwLSFspFl1ru9Q= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.6/go.mod h1:qVNb/9IOVsLCZh0x2lnagrBwQ9fxajUpXS7OZfIsKn0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo= -github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE= -github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/btnguyen2k/consu/g18 v0.1.0 h1:IoS5w5QlOfkcrNOHJyICD6PgqLh+J5fIDqy3vRBVcVM= From b07fbc2b6721b3cb9989d6a1745d592a4078330f Mon Sep 17 00:00:00 2001 From: Thanh Nguyen Date: Thu, 2 May 2024 14:11:03 +1000 Subject: [PATCH 10/12] Prepare for new releast --- .semrelease/this_release | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.semrelease/this_release b/.semrelease/this_release index ca941b4..ad04333 100644 --- a/.semrelease/this_release +++ b/.semrelease/this_release @@ -1,3 +1 @@ -# This file has been cleaned up post-releasing version 1.2.1. -# Generate its content quickly using the following command: -# git log origin..HEAD | grep "^\s" > .semrelease/this_release +New feature: sql.Open with aws.Config From f055b3d049c118bcc0b1024061c903bea3ff5fa9 Mon Sep 17 00:00:00 2001 From: CI Build <> Date: Thu, 2 May 2024 04:35:01 +0000 Subject: [PATCH 11/12] Update RELEASE-NOTES.md, module.go and *.go files for new version 1.3.0 --- README.md | 2 +- RELEASE-NOTES.md | 6 ++++++ driver.go | 4 ++-- module.go | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 695b93b..adef8f4 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Region= ## Using `aws.Config`: -Since <>, `godynamo` supports using `aws.Config` to create the connection to DynamoDB: +Since v1.3.0, `godynamo` supports using `aws.Config` to create the connection to DynamoDB: ```go package main diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 0dc762d..dccb380 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,5 +1,11 @@ # godynamo release notes +## 2024-05-02 - v1.3.0 + +### Added/Refactoring + +- New feature: sql.Open with aws.Config + ## 2024-03-21 - v1.2.1 ### Fixed/Improvement diff --git a/driver.go b/driver.go index 7509ab1..5afcc2e 100644 --- a/driver.go +++ b/driver.go @@ -116,7 +116,7 @@ var ( // The following configurations do not apply even if they are set in aws.Config. // - HTTPClient // -// @Available since <> +// @Available since v1.3.0 func RegisterAWSConfig(conf aws.Config) { awsConfigLock.Lock() defer awsConfigLock.Unlock() @@ -125,7 +125,7 @@ func RegisterAWSConfig(conf aws.Config) { // DeregisterAWSConfig removes the registered aws.Config. // -// @Available since <> +// @Available since v1.3.0 func DeregisterAWSConfig() { awsConfigLock.Lock() defer awsConfigLock.Unlock() diff --git a/module.go b/module.go index 6823386..8220636 100644 --- a/module.go +++ b/module.go @@ -3,7 +3,7 @@ package godynamo const ( // Version holds the semantic version number of this module. - Version = "1.2.1" + Version = "1.3.0" ) // This file contains module's metadata only, which is package level documentation and module Version string. From 755d1e8a785cf71f75b04c02ad163e5657793acb Mon Sep 17 00:00:00 2001 From: CI Build <> Date: Thu, 2 May 2024 04:35:03 +0000 Subject: [PATCH 12/12] Cleanup file .semrelease/this_release post-releasing version 1.3.0 --- .semrelease/this_release | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.semrelease/this_release b/.semrelease/this_release index ad04333..869c93d 100644 --- a/.semrelease/this_release +++ b/.semrelease/this_release @@ -1 +1,3 @@ -New feature: sql.Open with aws.Config +# This file has been cleaned up post-releasing version 1.3.0. +# Generate its content quickly using the following command: +# git log origin..HEAD | grep "^\s" > .semrelease/this_release