Compare commits

...

99 Commits

Author SHA1 Message Date
RW
e0807d0fb3 Merge pull request #1028 from gofiber/dependabot/go_modules/coherence/github.com/oracle/coherence-go-client-1.0.2
Bump github.com/oracle/coherence-go-client from 1.0.1 to 1.0.2 in /coherence
2023-10-12 09:53:55 +02:00
dependabot[bot]
25c0384af3 Bump github.com/oracle/coherence-go-client in /coherence
Bumps [github.com/oracle/coherence-go-client](https://github.com/oracle/coherence-go-client) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/oracle/coherence-go-client/releases)
- [Commits](https://github.com/oracle/coherence-go-client/compare/v1.0.1...v1.0.2)

---
updated-dependencies:
- dependency-name: github.com/oracle/coherence-go-client
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 07:51:36 +00:00
RW
a10c5eb812 Merge pull request #1027 from gofiber/dependabot/go_modules/azureblob/github.com/Azure/azure-sdk-for-go/sdk/storage/azblob-1.2.0
Bump github.com/Azure/azure-sdk-for-go/sdk/storage/azblob from 1.1.0 to 1.2.0 in /azureblob
2023-10-12 09:36:05 +02:00
dependabot[bot]
5cb28ee173 Bump github.com/Azure/azure-sdk-for-go/sdk/storage/azblob in /azureblob
Bumps [github.com/Azure/azure-sdk-for-go/sdk/storage/azblob](https://github.com/Azure/azure-sdk-for-go) from 1.1.0 to 1.2.0.
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/v1.1...v1.2)

---
updated-dependencies:
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 07:35:01 +00:00
RW
b486d160a8 Merge pull request #1019 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue-1.10.41
Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue from 1.10.40 to 1.10.41 in /dynamodb
2023-10-11 23:22:32 +02:00
dependabot[bot]
afd4517c53 Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
Bumps [github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue](https://github.com/aws/aws-sdk-go-v2) from 1.10.40 to 1.10.41.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/dynamodb/attributevalue/v1.10.40...feature/dynamodb/attributevalue/v1.10.41)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:20:47 +00:00
RW
dc9461d2cc Merge pull request #1024 from gofiber/dependabot/go_modules/minio/golang.org/x/net-0.17.0
Bump golang.org/x/net from 0.14.0 to 0.17.0 in /minio
2023-10-11 23:20:08 +02:00
dependabot[bot]
433533050c Bump golang.org/x/net from 0.14.0 to 0.17.0 in /minio
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:15:51 +00:00
RW
f9e45829b1 Merge pull request #1020 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/service/dynamodb-1.22.1
Bump github.com/aws/aws-sdk-go-v2/service/dynamodb from 1.22.0 to 1.22.1 in /dynamodb
2023-10-11 23:15:28 +02:00
RW
d4e50f8263 Merge pull request #1025 from gofiber/dependabot/go_modules/azureblob/golang.org/x/net-0.17.0
Bump golang.org/x/net from 0.14.0 to 0.17.0 in /azureblob
2023-10-11 23:14:52 +02:00
RW
6b04025154 Merge pull request #1022 from gofiber/dependabot/go_modules/etcd/golang.org/x/net-0.17.0
Bump golang.org/x/net from 0.14.0 to 0.17.0 in /etcd
2023-10-11 23:14:42 +02:00
dependabot[bot]
17f8641ece Bump github.com/aws/aws-sdk-go-v2/service/dynamodb in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/service/dynamodb](https://github.com/aws/aws-sdk-go-v2) from 1.22.0 to 1.22.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/eks/v1.22.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.22.0...service/eks/v1.22.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/dynamodb
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:11:24 +00:00
dependabot[bot]
3780da9230 Bump golang.org/x/net from 0.14.0 to 0.17.0 in /azureblob
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:11:12 +00:00
dependabot[bot]
5f6130f3d0 Bump golang.org/x/net from 0.14.0 to 0.17.0 in /etcd
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:10:48 +00:00
RW
a5acb4cc84 Merge pull request #1021 from gofiber/dependabot/go_modules/badger/golang.org/x/net-0.17.0
Bump golang.org/x/net from 0.14.0 to 0.17.0 in /badger
2023-10-11 23:09:54 +02:00
dependabot[bot]
27086258a6 Bump golang.org/x/net from 0.14.0 to 0.17.0 in /badger
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 21:08:32 +00:00
RW
83194711c3 Merge pull request #1012 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.89
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.87 to 1.11.89 in /s3
2023-10-09 09:27:26 +02:00
dependabot[bot]
d809bc6240 Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /s3
Bumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.11.87 to 1.11.89.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.11.87...feature/s3/manager/v1.11.89)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 07:26:04 +00:00
RW
51a3d39536 Merge pull request #1016 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.18.44
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.42 to 1.18.44 in /dynamodb
2023-10-09 09:25:37 +02:00
dependabot[bot]
c2a09a1e85 Bump github.com/aws/aws-sdk-go-v2/config in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.42 to 1.18.44.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.42...config/v1.18.44)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 07:24:07 +00:00
RW
11ea30d1ed Merge pull request #1011 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/service/s3-1.40.1
Bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.40.0 to 1.40.1 in /s3
2023-10-09 09:06:20 +02:00
dependabot[bot]
8f916fde3c Bump github.com/aws/aws-sdk-go-v2/service/s3 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) from 1.40.0 to 1.40.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.40.0...service/s3/v1.40.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-09 07:05:09 +00:00
RW
26aac40a50 Merge pull request #1008 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.87
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.86 to 1.11.87 in /s3
2023-10-02 09:43:33 +02:00
dependabot[bot]
9f2fbc07fa Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /s3
Bumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.11.86 to 1.11.87.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.11.86...feature/s3/manager/v1.11.87)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 07:42:18 +00:00
RW
502cb1dd74 Merge pull request #1009 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue-1.10.40
Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue from 1.10.39 to 1.10.40 in /dynamodb
2023-10-02 09:41:35 +02:00
dependabot[bot]
c92df2a45b Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
Bumps [github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue](https://github.com/aws/aws-sdk-go-v2) from 1.10.39 to 1.10.40.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/dynamodb/attributevalue/v1.10.39...feature/dynamodb/attributevalue/v1.10.40)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 07:40:18 +00:00
RW
f0b304a0c6 Merge pull request #1007 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/service/s3-1.40.0
Bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.39.0 to 1.40.0 in /s3
2023-10-02 09:34:08 +02:00
dependabot[bot]
9ad80e96c2 Bump github.com/aws/aws-sdk-go-v2/service/s3 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) from 1.39.0 to 1.40.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.39.0...service/s3/v1.40.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 07:32:51 +00:00
RW
3e53b6f96f Merge pull request #1005 from gofiber/dependabot/go_modules/redis/github.com/redis/go-redis/v9-9.2.1
Bump github.com/redis/go-redis/v9 from 9.2.0 to 9.2.1 in /redis
2023-09-28 09:23:57 +02:00
dependabot[bot]
d18325dea7 Bump github.com/redis/go-redis/v9 from 9.2.0 to 9.2.1 in /redis
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.2.0 to 9.2.1.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/go-redis/compare/v9.2.0...v9.2.1)

---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-28 07:21:09 +00:00
RW
46c9ec665a Merge pull request #1004 from gofiber/dependabot/go_modules/rueidis/github.com/redis/rueidis-1.0.19
Bump github.com/redis/rueidis from 1.0.18 to 1.0.19 in /rueidis
2023-09-27 09:26:49 +02:00
dependabot[bot]
d77dda57c2 Bump github.com/redis/rueidis from 1.0.18 to 1.0.19 in /rueidis
Bumps [github.com/redis/rueidis](https://github.com/redis/rueidis) from 1.0.18 to 1.0.19.
- [Release notes](https://github.com/redis/rueidis/releases)
- [Commits](https://github.com/redis/rueidis/compare/v1.0.18...v1.0.19)

---
updated-dependencies:
- dependency-name: github.com/redis/rueidis
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-27 07:25:00 +00:00
RW
133e1b134b Merge pull request #1003 from gofiber/dependabot/go_modules/couchbase/github.com/couchbase/gocb/v2-2.6.4
Bump github.com/couchbase/gocb/v2 from 2.6.3 to 2.6.4 in /couchbase
2023-09-27 09:23:52 +02:00
dependabot[bot]
bdf3fafbac Bump github.com/couchbase/gocb/v2 from 2.6.3 to 2.6.4 in /couchbase
Bumps [github.com/couchbase/gocb/v2](https://github.com/couchbase/gocb) from 2.6.3 to 2.6.4.
- [Commits](https://github.com/couchbase/gocb/compare/v2.6.3...v2.6.4)

---
updated-dependencies:
- dependency-name: github.com/couchbase/gocb/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-27 07:21:52 +00:00
RW
a8098ce577 Update README.md 2023-09-26 15:14:55 +02:00
RW
807d903176 Merge pull request #1002 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.18.42
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.39 to 1.18.42 in /dynamodb
2023-09-25 10:00:24 +02:00
dependabot[bot]
0c546d9a05 Bump github.com/aws/aws-sdk-go-v2/config in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.39 to 1.18.42.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.39...config/v1.18.42)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 08:00:11 +00:00
RW
6939eda25d Merge pull request #1001 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/credentials-1.13.40
Bump github.com/aws/aws-sdk-go-v2/credentials from 1.13.37 to 1.13.40 in /dynamodb
2023-09-25 09:59:34 +02:00
dependabot[bot]
be00cc356c Bump github.com/aws/aws-sdk-go-v2/credentials in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/credentials](https://github.com/aws/aws-sdk-go-v2) from 1.13.37 to 1.13.40.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.13.37...credentials/v1.13.40)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/credentials
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 07:58:09 +00:00
RW
5fd61e7460 Merge pull request #1000 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.86
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.83 to 1.11.86 in /s3
2023-09-25 09:31:02 +02:00
dependabot[bot]
a82ac381aa Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /s3
Bumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.11.83 to 1.11.86.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.11.83...feature/s3/manager/v1.11.86)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 07:29:21 +00:00
RW
a0500b170a Merge pull request #999 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/config-1.18.42
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.39 to 1.18.42 in /s3
2023-09-25 09:28:25 +02:00
dependabot[bot]
0bc7d51380 Bump github.com/aws/aws-sdk-go-v2/config from 1.18.39 to 1.18.42 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.39 to 1.18.42.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.39...config/v1.18.42)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 07:27:56 +00:00
RW
eb86e00a79 Merge pull request #998 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/credentials-1.13.40
Bump github.com/aws/aws-sdk-go-v2/credentials from 1.13.37 to 1.13.40 in /s3
2023-09-25 09:27:07 +02:00
dependabot[bot]
d33d3cae34 Bump github.com/aws/aws-sdk-go-v2/credentials in /s3
Bumps [github.com/aws/aws-sdk-go-v2/credentials](https://github.com/aws/aws-sdk-go-v2) from 1.13.37 to 1.13.40.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.13.37...credentials/v1.13.40)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/credentials
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 07:27:00 +00:00
RW
e410768f7f Merge pull request #997 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/service/s3-1.39.0
Bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.38.5 to 1.39.0 in /s3
2023-09-25 09:26:26 +02:00
dependabot[bot]
421b7f81fd Bump github.com/aws/aws-sdk-go-v2/service/s3 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) from 1.38.5 to 1.39.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.5...service/s3/v1.39.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 07:24:54 +00:00
RW
747f025819 Merge pull request #996 from gofiber/dependabot/go_modules/redis/github.com/redis/go-redis/v9-9.2.0
Bump github.com/redis/go-redis/v9 from 9.1.0 to 9.2.0 in /redis
2023-09-21 09:44:24 +02:00
dependabot[bot]
66e0f69437 Bump github.com/redis/go-redis/v9 from 9.1.0 to 9.2.0 in /redis
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.1.0 to 9.2.0.
- [Release notes](https://github.com/redis/go-redis/releases)
- [Changelog](https://github.com/redis/go-redis/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/go-redis/compare/v9.1.0...v9.2.0)

---
updated-dependencies:
- dependency-name: github.com/redis/go-redis/v9
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 07:42:45 +00:00
RW
4b59c5aa07 Merge pull request #994 from gofiber/dependabot/go_modules/rueidis/github.com/redis/rueidis-1.0.18
Bump github.com/redis/rueidis from 1.0.17 to 1.0.18 in /rueidis
2023-09-18 09:19:01 +02:00
dependabot[bot]
f7dbcd1fca Bump github.com/redis/rueidis from 1.0.17 to 1.0.18 in /rueidis
Bumps [github.com/redis/rueidis](https://github.com/redis/rueidis) from 1.0.17 to 1.0.18.
- [Release notes](https://github.com/redis/rueidis/releases)
- [Commits](https://github.com/redis/rueidis/compare/v1.0.17...v1.0.18)

---
updated-dependencies:
- dependency-name: github.com/redis/rueidis
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 07:17:15 +00:00
RW
499d8aa343 Merge pull request #992 from gofiber/add-benchmarks
Add benchmarks for storage drivers
2023-09-18 07:50:00 +02:00
RW
aeb7a24789 Merge pull request #993 from gofiber/rueidis-cachettl
Increase default CacheTTL for Rueidis Driver
2023-09-18 07:48:40 +02:00
Juan Calderon-Perez
946562e2a5 Update config.go 2023-09-16 12:51:55 -04:00
Juan Calderon-Perez
558ec79281 Update README.md 2023-09-16 12:51:17 -04:00
Muhammed Efe Cetin
f113998db1 fix redis tests 2023-09-16 19:49:48 +03:00
Muhammed Efe Cetin
f39724354c fix benchmark workflow 2023-09-15 19:23:25 +03:00
Muhammed Efe Cetin
db1dd2bf6a update delete benchmarks 2023-09-15 18:23:02 +03:00
Muhammed Efe Cetin
36dd674d93 add TestMain for a few storages and update benchmark workflow 2023-09-15 16:54:25 +03:00
Muhammed Efe Cetin
55eca1c7b2 use testify on coherence storage 2023-09-15 00:19:11 +03:00
Muhammed Efe Cetin
d17795a9a9 add benchmark workflow 2023-09-15 00:05:56 +03:00
Muhammed Efe Cetin
68d59280d8 add benchmarks for all storages 2023-09-15 00:02:13 +03:00
RW
f8afad537f Merge pull request #991 from tmiddlet2666/coherence-update
Clean up and fix minor issues with default handling
2023-09-13 08:31:26 +02:00
RW
468d82d9f7 Merge pull request #983 from gofiber/rueidis-parseurl
Add support for ParseURL to rueidis driver
2023-09-13 08:29:23 +02:00
RW
54245b2520 Merge pull request #982 from gofiber/issue-981
Support for using options.TLSConfig if returned by redis.ParseURL()
2023-09-13 08:28:13 +02:00
RW
1af49ff41d Merge branch 'main' into issue-981 2023-09-13 08:23:51 +02:00
RW
a21d4daae0 Merge pull request #980 from mstgnz/main
Minio README
2023-09-13 08:22:53 +02:00
Tim Middleton
7825d579b4 Clean up and fix minor issues with default handling 2023-09-13 13:17:13 +08:00
Juan Calderon-Perez
2e4b0128fa Merge branch 'main' into main 2023-09-11 21:35:09 -04:00
Juan Calderon-Perez
a19da2b7c9 Merge branch 'main' into rueidis-parseurl 2023-09-11 09:14:48 -04:00
Juan Calderon-Perez
57e79dffb1 Merge branch 'main' into issue-981 2023-09-11 09:14:34 -04:00
RW
8c18ced1a7 Merge pull request #988 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.83
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.82 to 1.11.83 in /s3
2023-09-11 09:48:48 +02:00
dependabot[bot]
8dd8253afb Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /s3
Bumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.11.82 to 1.11.83.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.11.82...feature/s3/manager/v1.11.83)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 07:47:20 +00:00
RW
29370b8740 Merge pull request #986 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/config-1.18.39
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.38 to 1.18.39 in /s3
2023-09-11 09:46:39 +02:00
dependabot[bot]
4501c4f5cd Bump github.com/aws/aws-sdk-go-v2/config from 1.18.38 to 1.18.39 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.38 to 1.18.39.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.38...config/v1.18.39)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 07:45:13 +00:00
RW
192b1a1bd1 Merge pull request #985 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.18.39
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.38 to 1.18.39 in /dynamodb
2023-09-11 09:41:27 +02:00
dependabot[bot]
abc64d7e19 Bump github.com/aws/aws-sdk-go-v2/config in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.38 to 1.18.39.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.38...config/v1.18.39)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 07:40:29 +00:00
RW
6c47c82c78 Merge pull request #984 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/credentials-1.13.37
Bump github.com/aws/aws-sdk-go-v2/credentials from 1.13.36 to 1.13.37 in /dynamodb
2023-09-11 09:39:53 +02:00
dependabot[bot]
edb86a96cc Bump github.com/aws/aws-sdk-go-v2/credentials in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2/credentials](https://github.com/aws/aws-sdk-go-v2) from 1.13.36 to 1.13.37.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.13.36...credentials/v1.13.37)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/credentials
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 07:38:00 +00:00
Juan Calderon-Perez
0f229274e6 Add support for ParseURL to rueidis driver 2023-09-09 23:27:16 -04:00
Juan Calderon-Perez
78cfcf3206 Add instance of Redis without MTLS to workflow 2023-09-09 22:44:46 -04:00
Juan Calderon-Perez
e41f3e4131 Test against secure rediss URL 2023-09-09 22:33:25 -04:00
Juan Calderon-Perez
0170bdc737 Update TLS script 2023-09-09 22:29:00 -04:00
Juan Calderon-Perez
d38f0f35f9 Try both CN and SAN 2023-09-09 22:19:02 -04:00
Juan Calderon-Perez
c1055478ef Golang requires the hostname to be in the CN 2023-09-09 22:11:54 -04:00
Juan Calderon-Perez
88ce7d5d82 Add openssl options to cnf file 2023-09-09 22:08:30 -04:00
Juan Calderon-Perez
7eec5856a3 Fix SSL command 2023-09-09 22:03:51 -04:00
Juan Calderon-Perez
e357a9c813 Add subjectAltName to openssl command 2023-09-09 21:59:40 -04:00
Juan Calderon-Perez
967b2258b9 Add sudo to step 2023-09-09 21:54:55 -04:00
Juan Calderon-Perez
f5c4a78fb1 Add support for using Custom CA, add test that forces SSL verification 2023-09-09 21:53:57 -04:00
Juan Calderon-Perez
7e2c6a3e62 Update tests to use new SSL script 2023-09-09 21:44:24 -04:00
Juan Calderon-Perez
89c473aac7 Use Redis Options TLSConfig if returned 2023-09-09 21:32:28 -04:00
mstgnz
c9efab145d Update README 2023-09-09 10:14:25 +03:00
Mesut GENEZ
89be8f9d56 Merge branch 'gofiber:main' into main 2023-09-09 09:28:40 +03:00
mstgnz
a5b0a78828 Update README 2023-09-09 09:27:10 +03:00
mstgnz
6be213707b Update README 2023-09-09 09:25:07 +03:00
RW
0e55883f05 Merge pull request #979 from tmiddlet2666/coherence-storage
Fix incorrect default timeout value for Coherence storage driver
2023-09-07 10:11:33 +02:00
RW
033c8f432d Merge branch 'main' into coherence-storage 2023-09-07 09:25:19 +02:00
Tim Middleton
dc9bb23ade Fix incorrect default timeout value for Coherence storage driver 2023-09-07 15:22:55 +08:00
67 changed files with 1678 additions and 809 deletions

View File

@@ -7,6 +7,8 @@
# ./tls/client.{crt,key} A certificate restricted for SSL client usage. # ./tls/client.{crt,key} A certificate restricted for SSL client usage.
# ./tls/server.{crt,key} A certificate restricted for SSL server usage. # ./tls/server.{crt,key} A certificate restricted for SSL server usage.
set -e
generate_cert() { generate_cert() {
local name=$1 local name=$1
local cn="$2" local cn="$2"
@@ -44,6 +46,8 @@ cat > ./tls/openssl.cnf <<_END_
[ server_cert ] [ server_cert ]
keyUsage = digitalSignature, keyEncipherment keyUsage = digitalSignature, keyEncipherment
nsCertType = server nsCertType = server
subjectAltName = DNS:localhost"
[ client_cert ] [ client_cert ]
keyUsage = digitalSignature, keyEncipherment keyUsage = digitalSignature, keyEncipherment
nsCertType = client nsCertType = client
@@ -51,7 +55,7 @@ _END_
generate_cert server "Server-only" "-extfile ./tls/openssl.cnf -extensions server_cert" generate_cert server "Server-only" "-extfile ./tls/openssl.cnf -extensions server_cert"
generate_cert client "Client-only" "-extfile ./tls/openssl.cnf -extensions client_cert" generate_cert client "Client-only" "-extfile ./tls/openssl.cnf -extensions client_cert"
generate_cert redis "Generic-cert" generate_cert redis "localhost" "-extfile ./tls/openssl.cnf -extensions server_cert"
# List generated certs # List generated certs
ls -la ./tls ls -la ./tls

170
.github/workflows/benchmark.yml vendored Normal file
View File

@@ -0,0 +1,170 @@
on:
push:
branches:
- master
- main
paths:
- "**"
- "!**.md"
pull_request:
paths:
- "**"
- "!**.md"
permissions:
deployments: write
contents: write
name: Benchmark
jobs:
Compare:
runs-on: ubuntu-latest
services:
arangodb:
image: 'arangodb:latest'
env:
ARANGO_NO_AUTH: 1
ports:
- '8529:8529'
dynamodb:
image: 'amazon/dynamodb-local:latest'
ports:
- '8000:8000'
memcached:
image: 'memcached:latest'
ports:
- '11211:11211'
mongo:
image: 'mongo:latest'
ports:
- '27017:27017'
mssql:
image: 'mcmoe/mssqldocker:latest'
ports:
- '1433:1433'
env:
ACCEPT_EULA: Y
SA_PASSWORD: MsSql!1234
MSSQL_DB: master
MSSQL_USER: sa
MSSQL_PASSWORD: MsSql!1234
options: >-
--health-cmd "/opt/mssql-tools/bin/sqlcmd -U sa -P $SA_PASSWORD -Q 'select 1' -b -o /dev/null"
--health-interval 1s
--health-timeout 30s
--health-start-period 10s
--health-retries 20
mysql:
image: 'mysql:latest'
env:
MYSQL_DATABASE: fiber
MYSQL_USER: username
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
options: >-
--health-cmd "mysqladmin ping" --health-interval 10s --health-timeout
5s --health-retries 5
postgres:
image: 'postgres:latest'
ports:
- '5432:5432'
env:
POSTGRES_DB: fiber
POSTGRES_USER: username
POSTGRES_PASSWORD: "pass#w%rd"
options: >-
--health-cmd pg_isready --health-interval 10s --health-timeout 5s
--health-retries 5
steps:
- name: Fetch Repository
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v4
with:
# NOTE: Keep this in sync with the version from go.mod
go-version: "1.20.x"
- name: Install Azurite
run: |
docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 --blobPort 10000
- name: Install Coherence
run: |
docker run -d -p 1408:1408 -p 30000:30000 ghcr.io/oracle/coherence-ce:22.06.5
sleep 30
- name: Install couchbase
run: |
docker run --name couchbase -d -p 8091-8097:8091-8097 -p 9123:9123 -p 11207:11207 -p 11210:11210 -p 11280:11280 -p 18091-18097:18091-18097 couchbase:enterprise-7.1.1
sleep 10
docker exec --tty couchbase couchbase-cli cluster-init -c localhost:8091 --cluster-username admin --cluster-password 123456 --cluster-ramsize 256 --services data
sleep 10
docker exec --tty couchbase couchbase-cli bucket-create -c localhost:8091 --username admin --password 123456 --bucket fiber_storage --bucket-type couchbase --bucket-ramsize 100 --enable-flush 1
- name: Install etcd
run: |
docker run -d --name Etcd-server \
--publish 2379:2379 \
--publish 2380:2380 \
--env ALLOW_NONE_AUTHENTICATION=yes \
--env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \
bitnami/etcd:latest
- name: Install MinIO
run: |
docker run -d --restart always -p 9000:9000 --name storage-minio -e MINIO_ROOT_USER='minio-user' -e MINIO_ROOT_PASSWORD='minio-password' minio/minio server /data
- name: Setup Redis
uses: shogo82148/actions-setup-redis@v1
with:
redis-version: '7.x'
auto-start: 'false'
- name: Run Redis
run: |
redis-server --port 6379 &
- name: Run Benchmarks
run: |
set -o pipefail
for d in */ ; do
[[ $d == "tls/" ]] && continue
cd "$d"
go test ./... -benchmem -run=^$ -bench . | tee -a ../output.txt
cd ..
done
shell: bash
env:
MSSQL_DATABASE: master
MSSQL_USERNAME: sa
MSSQL_PASSWORD: MsSql!1234
MYSQL_USERNAME: username
MYSQL_PASSWORD: password
MYSQL_DATABASE: fiber
POSTGRES_DATABASE: fiber
POSTGRES_USERNAME: username
POSTGRES_PASSWORD: "pass#w%rd"
- name: Get Previous Benchmark Results
uses: actions/cache@v3
with:
path: ./cache
key: ${{ runner.os }}-benchmark
- name: Save Benchmark Results
uses: benchmark-action/github-action-benchmark@v1.18.0
with:
tool: "go"
output-file-path: output.txt
github-token: ${{ secrets.GITHUB_TOKEN }}
benchmark-data-dir-path: "benchmarks"
alert-threshold: "300%"
fail-on-alert: true
comment-on-alert: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
#summary-always: ${{ github.event_name != 'push' && github.event_name != 'workflow_dispatch' }}
auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}
save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }}

View File

@@ -25,23 +25,38 @@ jobs:
- name: Fetch Repository - name: Fetch Repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Generate TLS certs
run: ./.github/scripts/gen-test-certs.sh
- name: Add Custom CA cert
run: sudo cp /home/runner/work/storage/storage/tls/ca.crt /usr/local/share/ca-certificates/custom.crt
- name: Trust Custom CA Cert
run: sudo update-ca-certificates
- name: Setup Redis - name: Setup Redis
uses: shogo82148/actions-setup-redis@v1 uses: shogo82148/actions-setup-redis@v1
with: with:
redis-version: ${{ matrix.redis }} redis-version: ${{ matrix.redis }}
auto-start: 'false' auto-start: 'false'
redis-port: '6379'
redis-tls-port: '6380'
- name: Run Redis - name: Run Redis
run: | run: |
redis-server --tls-port 6380 --port 6379 \ redis-server --tls-port 6380 --port 6379 \
--tls-cert-file ./redis/tests/tls/redis.crt \ --tls-cert-file /home/runner/work/storage/storage/tls/redis.crt \
--tls-key-file ./redis/tests/tls/redis.key \ --tls-key-file /home/runner/work/storage/storage/tls/redis.key \
--tls-ca-cert-file ./redis/tests/tls/ca.crt& --tls-ca-cert-file /home/runner/work/storage/storage/tls/ca.crt &
- name: Run Redis instance with MTLS disabled
run: |
redis-server --tls-port 16380 --port 16379 \
--tls-cert-file /home/runner/work/storage/storage/tls/redis.crt \
--tls-key-file /home/runner/work/storage/storage/tls/redis.key \
--tls-ca-cert-file /home/runner/work/storage/storage/tls/ca.crt \
--tls-auth-clients no &
- name: Setup Redis Cluster - name: Setup Redis Cluster
uses: vishnudxb/redis-cluster@1.0.8 uses: vishnudxb/redis-cluster@1.0.9
with: with:
master1-port: 7000 master1-port: 7000
master2-port: 7001 master2-port: 7001
@@ -49,6 +64,7 @@ jobs:
slave1-port: 7003 slave1-port: 7003
slave2-port: 7004 slave2-port: 7004
slave3-port: 7005 slave3-port: 7005
sleep-duration: 10
- name: Install Go - name: Install Go
uses: actions/setup-go@v4 uses: actions/setup-go@v4

View File

@@ -43,7 +43,7 @@ jobs:
--tls-ca-cert-file /home/runner/work/storage/storage/tls/ca.crt & --tls-ca-cert-file /home/runner/work/storage/storage/tls/ca.crt &
- name: Setup Redis Cluster - name: Setup Redis Cluster
uses: vishnudxb/redis-cluster@1.0.8 uses: vishnudxb/redis-cluster@1.0.9
with: with:
master1-port: 7000 master1-port: 7000
master2-port: 7001 master2-port: 7001
@@ -51,6 +51,7 @@ jobs:
slave1-port: 7003 slave1-port: 7003
slave2-port: 7004 slave2-port: 7004
slave3-port: 7005 slave3-port: 7005
sleep-duration: 10
- name: Install Go - name: Install Go
uses: actions/setup-go@v4 uses: actions/setup-go@v4

View File

@@ -20,7 +20,7 @@ jobs:
- 1.21.x - 1.21.x
steps: steps:
- name: Install MinIO - name: Install MinIO
run: docker run -d -p 9000:9000 --name minio minio/minio server /data run: docker run -d --restart always -p 9000:9000 --name storage-minio -e MINIO_ROOT_USER='minio-user' -e MINIO_ROOT_PASSWORD='minio-password' minio/minio server /data
- name: Fetch Repository - name: Fetch Repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install Go - name: Install Go

View File

@@ -11,7 +11,7 @@ var testStore = New(Config{
Reset: true, Reset: true,
}) })
func Test_ARANGODB_Set(t *testing.T) { func Test_ArangoDB_Set(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
@@ -21,7 +21,7 @@ func Test_ARANGODB_Set(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
func Test_ARANGODB_Upsert(t *testing.T) { func Test_ArangoDB_Upsert(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
@@ -34,7 +34,7 @@ func Test_ARANGODB_Upsert(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
func Test_ARANGODB_Get(t *testing.T) { func Test_ArangoDB_Get(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
@@ -48,7 +48,7 @@ func Test_ARANGODB_Get(t *testing.T) {
require.Equal(t, val, result) require.Equal(t, val, result)
} }
func Test_ARANGODB_Set_Expiration(t *testing.T) { func Test_ArangoDB_Set_Expiration(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
@@ -61,7 +61,7 @@ func Test_ARANGODB_Set_Expiration(t *testing.T) {
time.Sleep(1100 * time.Millisecond) time.Sleep(1100 * time.Millisecond)
} }
func Test_ARANGODB_Get_Expired(t *testing.T) { func Test_ArangoDB_Get_Expired(t *testing.T) {
key := "john" key := "john"
result, err := testStore.Get(key) result, err := testStore.Get(key)
@@ -69,13 +69,13 @@ func Test_ARANGODB_Get_Expired(t *testing.T) {
require.Zero(t, len(result)) require.Zero(t, len(result))
} }
func Test_ARANGODB_Get_NotExist(t *testing.T) { func Test_ArangoDB_Get_NotExist(t *testing.T) {
result, err := testStore.Get("notexist") result, err := testStore.Get("notexist")
require.NoError(t, err) require.NoError(t, err)
require.Zero(t, len(result)) require.Zero(t, len(result))
} }
func Test_ARANGODB_Delete(t *testing.T) { func Test_ArangoDB_Delete(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
@@ -92,7 +92,7 @@ func Test_ARANGODB_Delete(t *testing.T) {
require.Zero(t, len(result)) require.Zero(t, len(result))
} }
func Test_ARANGODB_Reset(t *testing.T) { func Test_ArangoDB_Reset(t *testing.T) {
val := []byte("doe") val := []byte("doe")
err := testStore.Set("john1", val, 0) err := testStore.Set("john1", val, 0)
@@ -113,7 +113,7 @@ func Test_ARANGODB_Reset(t *testing.T) {
require.Zero(t, len(result)) require.Zero(t, len(result))
} }
func Test_ARANGODB_Non_UTF8(t *testing.T) { func Test_ArangoDB_Non_UTF8(t *testing.T) {
val := []byte("0xF5") val := []byte("0xF5")
err := testStore.Set("0xF6", val, 0) err := testStore.Set("0xF6", val, 0)
@@ -124,10 +124,49 @@ func Test_ARANGODB_Non_UTF8(t *testing.T) {
require.Equal(t, val, result) require.Equal(t, val, result)
} }
func Test_ARANGODB_Close(t *testing.T) { func Test_ArangoDB_Close(t *testing.T) {
require.Nil(t, testStore.Close()) require.Nil(t, testStore.Close())
} }
func Test_ARANGODB_Conn(t *testing.T) { func Test_ArangoDB_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_ArangoDB_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_ArangoDB_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_ArangoDB_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -1,14 +1,17 @@
package azureblob package azureblob
import ( import (
"os"
"testing" "testing"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func newStore() *Storage { var testStore *Storage
return New(Config{
func TestMain(m *testing.M) {
testStore = New(Config{
Account: "devstoreaccount1", Account: "devstoreaccount1",
Container: "test", Container: "test",
Endpoint: "http://127.0.0.1:10000/devstoreaccount1", Endpoint: "http://127.0.0.1:10000/devstoreaccount1",
@@ -16,7 +19,13 @@ func newStore() *Storage {
Account: "devstoreaccount1", Account: "devstoreaccount1",
Key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==", Key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
}, },
Reset: true,
}) })
code := m.Run()
_ = testStore.Close()
os.Exit(code)
} }
func Test_AzureBlob_Get(t *testing.T) { func Test_AzureBlob_Get(t *testing.T) {
@@ -24,7 +33,6 @@ func Test_AzureBlob_Get(t *testing.T) {
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
) )
testStore := newStore()
err := testStore.Set(key, val, 0) err := testStore.Set(key, val, 0)
require.NoError(t, err) require.NoError(t, err)
@@ -40,7 +48,6 @@ func Test_AzureBlob_Set(t *testing.T) {
val = []byte("doe") val = []byte("doe")
) )
testStore := newStore()
err := testStore.Set(key, val, 0) err := testStore.Set(key, val, 0)
require.NoError(t, err) require.NoError(t, err)
} }
@@ -50,7 +57,6 @@ func Test_AzureBlob_Delete(t *testing.T) {
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
) )
testStore := newStore()
err := testStore.Set(key, val, 0) err := testStore.Set(key, val, 0)
require.NoError(t, err) require.NoError(t, err)
@@ -73,7 +79,6 @@ func Test_AzureBlob_Override(t *testing.T) {
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
) )
testStore := newStore()
err := testStore.Set(key, val, 0) err := testStore.Set(key, val, 0)
require.NoError(t, err) require.NoError(t, err)
@@ -83,7 +88,6 @@ func Test_AzureBlob_Override(t *testing.T) {
} }
func Test_AzureBlob_Get_NotExist(t *testing.T) { func Test_AzureBlob_Get_NotExist(t *testing.T) {
testStore := newStore()
result, err := testStore.Get("notexist") result, err := testStore.Get("notexist")
if err != nil { if err != nil {
if bloberror.HasCode(err, bloberror.BlobNotFound) { if bloberror.HasCode(err, bloberror.BlobNotFound) {
@@ -96,7 +100,6 @@ func Test_AzureBlob_Get_NotExist(t *testing.T) {
func Test_AzureBlob_Reset(t *testing.T) { func Test_AzureBlob_Reset(t *testing.T) {
val := []byte("doe") val := []byte("doe")
testStore := newStore()
err := testStore.Set("john1", val, 0) err := testStore.Set("john1", val, 0)
require.NoError(t, err) require.NoError(t, err)
@@ -127,11 +130,48 @@ func Test_AzureBlob_Reset(t *testing.T) {
} }
func Test_S3_Conn(t *testing.T) { func Test_S3_Conn(t *testing.T) {
testStore := newStore()
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Test_AzureBlob_Close(t *testing.T) { func Test_AzureBlob_Close(t *testing.T) {
testStore := newStore()
require.Nil(t, testStore.Close()) require.Nil(t, testStore.Close())
} }
func Benchmark_AzureBlob_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_AzureBlob_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_AzureBlob_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -3,7 +3,7 @@ module github.com/gofiber/storage/azureblob/v2
go 1.19 go 1.19
require ( require (
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )
@@ -12,7 +12,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect
golang.org/x/text v0.12.0 // indirect golang.org/x/text v0.13.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

View File

@@ -4,8 +4,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybI
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.1.0/go.mod h1:7QJP7dr2wznCMeqIrhMgWGf7XpAQnVrJqDm9nvV3Cu4= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4=
github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -18,12 +18,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=

View File

@@ -7,7 +7,9 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New() var testStore = New(Config{
Reset: true,
})
func Test_Badger_Set(t *testing.T) { func Test_Badger_Set(t *testing.T) {
var ( var (
@@ -118,3 +120,42 @@ func Test_Badger_Close(t *testing.T) {
func Test_Badger_Conn(t *testing.T) { func Test_Badger_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_Badger_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Badger_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Badger_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -25,8 +25,8 @@ require (
github.com/pkg/errors v0.9.1 // indirect github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
go.opencensus.io v0.24.0 // indirect go.opencensus.io v0.24.0 // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.11.0 // indirect golang.org/x/sys v0.13.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

View File

@@ -142,8 +142,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -158,8 +158,8 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

View File

@@ -1,12 +1,25 @@
package bbolt package bbolt
import ( import (
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New() var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(Config{
Bucket: "fiber-bucket",
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_Bbolt_Set(t *testing.T) { func Test_Bbolt_Set(t *testing.T) {
var ( var (
@@ -96,3 +109,42 @@ func Test_Bbolt_Close(t *testing.T) {
func Test_Bbolt_Conn(t *testing.T) { func Test_Bbolt_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_Bbolt_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Bbolt_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Bbolt_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -1,6 +1,7 @@
package bbolt package bbolt
import ( import (
"errors"
"github.com/gofiber/utils/v2" "github.com/gofiber/utils/v2"
"go.etcd.io/bbolt" "go.etcd.io/bbolt"
) )
@@ -15,6 +16,11 @@ func createBucket(cfg Config, conn *bbolt.DB) error {
func removeBucket(cfg Config, conn *bbolt.DB) error { func removeBucket(cfg Config, conn *bbolt.DB) error {
return conn.Update(func(tx *bbolt.Tx) error { return conn.Update(func(tx *bbolt.Tx) error {
return tx.DeleteBucket(utils.UnsafeBytes(cfg.Bucket)) err := tx.DeleteBucket(utils.UnsafeBytes(cfg.Bucket))
if errors.Is(err, bbolt.ErrBucketNotFound) {
return nil
}
return err
}) })
} }

View File

@@ -12,7 +12,8 @@ import (
const ( const (
defaultScopeName = "default-store" defaultScopeName = "default-store"
defaultTimeout = time.Duration(30) * time.Millisecond defaultTimeout = time.Duration(30) * time.Second
defaultAddress = "localhost:1408"
) )
// Storage represents an implementation of Coherence storage provider. // Storage represents an implementation of Coherence storage provider.
@@ -42,30 +43,20 @@ type Config struct {
// DefaultConfig defines default options. // DefaultConfig defines default options.
var DefaultConfig = Config{ var DefaultConfig = Config{
Address: "localhost:1408", Address: defaultAddress,
Timeout: time.Duration(30) * time.Millisecond, Timeout: defaultTimeout,
ScopeName: defaultScopeName, ScopeName: defaultScopeName,
Reset: false, Reset: false,
} }
// New returns a new [Storage] given a [coherence.Session]. // New returns a new [Storage] given a [Config].
func New(config ...Config) (*Storage, error) { func New(config ...Config) (*Storage, error) {
var ( cfg := setupConfig(config...)
scopeName = defaultScopeName
cfg = DefaultConfig
)
if len(config) == 1 {
cfg = config[0]
}
options := make([]func(session *coh.SessionOptions), 0) options := make([]func(session *coh.SessionOptions), 0)
// apply any config values // apply any config values as Coherence options
if cfg.Address != "" { options = append(options, coh.WithAddress(cfg.Address))
options = append(options, coh.WithAddress(cfg.Address))
} else {
cfg.Address = DefaultConfig.Address
}
if cfg.TLSConfig != nil { if cfg.TLSConfig != nil {
options = append(options, coh.WithTLSConfig(cfg.TLSConfig)) options = append(options, coh.WithTLSConfig(cfg.TLSConfig))
@@ -73,13 +64,7 @@ func New(config ...Config) (*Storage, error) {
options = append(options, coh.WithPlainText()) options = append(options, coh.WithPlainText())
} }
if cfg.Timeout != defaultTimeout { options = append(options, coh.WithRequestTimeout(cfg.Timeout))
options = append(options, coh.WithReadyTimeout(cfg.Timeout))
}
if cfg.ScopeName != defaultScopeName {
scopeName = cfg.ScopeName
}
// create the Coherence session // create the Coherence session
session, err := coh.NewSession(context.Background(), options...) session, err := coh.NewSession(context.Background(), options...)
@@ -87,7 +72,7 @@ func New(config ...Config) (*Storage, error) {
return nil, err return nil, err
} }
store, err := newCoherenceStorage(session, scopeName) store, err := newCoherenceStorage(session, cfg.ScopeName)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -100,6 +85,29 @@ func New(config ...Config) (*Storage, error) {
return store, nil return store, nil
} }
// setupConfig sets the default config.
func setupConfig(config ...Config) Config {
// if nothing provided then use the default config values
if len(config) == 0 {
return DefaultConfig
}
cfg := config[0]
// Check for any invalid default values and overwrite them
if cfg.Address == "" {
cfg.Address = DefaultConfig.Address
}
if cfg.ScopeName == "" {
cfg.ScopeName = DefaultConfig.ScopeName
}
if cfg.Timeout == 0 {
cfg.Timeout = DefaultConfig.Timeout
}
return cfg
}
// newCoherenceStorage returns a new Coherence [Storage]. // newCoherenceStorage returns a new Coherence [Storage].
func newCoherenceStorage(session *coh.Session, cacheName string) (*Storage, error) { func newCoherenceStorage(session *coh.Session, cacheName string) (*Storage, error) {
nc, err := coh.GetNamedCache[string, []byte](session, "fiber$"+cacheName) nc, err := coh.GetNamedCache[string, []byte](session, "fiber$"+cacheName)

View File

@@ -4,7 +4,8 @@ package coherence
* Copyright © 2023, Oracle and/or its affiliates. * Copyright © 2023, Oracle and/or its affiliates.
*/ */
import ( import (
"github.com/gofiber/utils" "github.com/stretchr/testify/require"
"os"
"testing" "testing"
"time" "time"
) )
@@ -17,152 +18,145 @@ var (
value2 = []byte("value2") value2 = []byte("value2")
) )
var testStore *Storage
func TestMain(m *testing.M) {
testStore, _ = New(Config{
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
// newTestStore returns a new Coherence Store and ensures it is reset.
func newTestStore(t testing.TB, config ...Config) (*Storage, error) {
t.Helper()
testStore, err := New(config...)
require.NoError(t, err)
err = testStore.Reset()
return testStore, err
}
func Test_Coherence_Set_And_Get(t *testing.T) { func Test_Coherence_Set_And_Get(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) err := testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value1, val) require.Equal(t, value1, val)
utils.AssertEqual(t, true, testStore.Conn() != nil) require.NotNil(t, testStore.Conn())
utils.AssertEqual(t, testStore.Close(), nil)
} }
func Test_Coherence_Set_Override(t *testing.T) { func Test_Coherence_Set_Override(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) err := testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value2, 0) err = testStore.Set(key1, value2, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value2, val) require.Equal(t, value2, val)
utils.AssertEqual(t, testStore.Close(), nil)
} }
func Test_Coherence_Set_With_Reset(t *testing.T) { func Test_Coherence_Set_With_Reset(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) err := testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value1, val) require.Equal(t, value1, val)
// get a new store but reset it, so the subsequent Get will return nil // get a new store but reset it, so the subsequent Get will return nil
testStore, err = newTestStore(t, Config{Reset: true}) testStore2, err := newTestStore(t, Config{Reset: true})
utils.AssertEqual(t, err, nil) require.NoError(t, err)
val, err = testStore.Get(key1) val, err = testStore2.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, true, len(val) == 0) require.True(t, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil) require.Equal(t, nil, testStore2.Close())
} }
func Test_Coherence_Set_With_Expiry(t *testing.T) { func Test_Coherence_Set_With_Expiry(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
// set with an expiry of 5 seconds // set with an expiry of 5 seconds
err = testStore.Set(key1, value1, time.Duration(5)*time.Second) err := testStore.Set(key1, value1, time.Duration(5)*time.Second)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
time.Sleep(time.Duration(6) * time.Second) time.Sleep(time.Duration(6) * time.Second)
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, true, len(val) == 0) require.True(t, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
} }
func Test_Coherence_Get_Missing(t *testing.T) { func Test_Coherence_Get_Missing(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) val, err := testStore.Get(missingKey)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
require.True(t, len(val) == 0)
val, err = testStore.Get(missingKey)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
} }
func Test_Coherence_Reset(t *testing.T) { func Test_Coherence_Reset(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) err := testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key2, value2, 0) err = testStore.Set(key2, value2, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
// check the keys exist // check the keys exist
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value1, val) require.Equal(t, value1, val)
val, err = testStore.Get(key2) val, err = testStore.Get(key2)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value2, val) require.Equal(t, value2, val)
// reset the store, this should remove both entries // reset the store, this should remove both entries
err = testStore.Reset() err = testStore.Reset()
// check the keys have expired // check the keys have expired
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, true, len(val) == 0) require.True(t, len(val) == 0)
val, err = testStore.Get(key2) val, err = testStore.Get(key2)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, true, len(val) == 0) require.True(t, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
} }
func Test_Coherence_Set_And_Delete(t *testing.T) { func Test_Coherence_Set_And_Delete(t *testing.T) {
var val []byte var val []byte
testStore, err := newTestStore(t) err := testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err = testStore.Delete(key1) err = testStore.Delete(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
// ensure the key has gone // ensure the key has gone
val, err = testStore.Get(key1) val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, true, len(val) == 0) require.True(t, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
} }
// TestCoherenceWithScope ensures we can create multiple session stores with multiple scopes. // TestCoherenceWithScope ensures we can create multiple session stores with multiple scopes.
@@ -171,37 +165,66 @@ func Test_Coherence_With_Scope(t *testing.T) {
// create two session stores with different scopes // create two session stores with different scopes
testStore1, err := newTestStore(t, Config{ScopeName: "scope1"}) testStore1, err := newTestStore(t, Config{ScopeName: "scope1"})
utils.AssertEqual(t, err, nil) require.NoError(t, err)
testStore2, err := newTestStore(t, Config{ScopeName: "scope2"}) testStore2, err := newTestStore(t, Config{ScopeName: "scope2"})
utils.AssertEqual(t, err, nil) require.NoError(t, err)
// ensure we can put the same key with different values in each scope // ensure we can put the same key with different values in each scope
err = testStore1.Set(key1, value1, 0) err = testStore1.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
err = testStore2.Set(key1, value2, 0) err = testStore2.Set(key1, value2, 0)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
// ensure the value of "key1" is different for each store // ensure the value of "key1" is different for each store
val, err = testStore1.Get(key1) val, err = testStore1.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value1, val) require.Equal(t, value1, val)
val, err = testStore2.Get(key1) val, err = testStore2.Get(key1)
utils.AssertEqual(t, err, nil) require.NoError(t, err)
utils.AssertEqual(t, value2, val) require.Equal(t, value2, val)
utils.AssertEqual(t, testStore1.Close(), nil) require.NoError(t, testStore1.Close())
utils.AssertEqual(t, testStore2.Close(), nil) require.NoError(t, testStore2.Close())
} }
// newTestStore returns a new Coherence Store and ensures it is reset. func Benchmark_Coherence_Set(b *testing.B) {
func newTestStore(t *testing.T, config ...Config) (*Storage, error) { b.ReportAllocs()
testStore, err := New(config...) b.ResetTimer()
utils.AssertEqual(t, err, nil)
err = testStore.Reset() var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
return testStore, err require.NoError(b, err)
}
func Benchmark_Coherence_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Coherence_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
} }

View File

@@ -2,17 +2,25 @@ module github.com/gofiber/storage/coherence
go 1.19 go 1.19
require github.com/oracle/coherence-go-client v1.0.1 require (
github.com/oracle/coherence-go-client v1.0.2
require google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect github.com/stretchr/testify v1.8.4
)
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require ( require (
github.com/gofiber/utils v1.1.0
github.com/golang/protobuf v1.5.3 // indirect github.com/golang/protobuf v1.5.3 // indirect
github.com/google/uuid v1.3.1 // indirect github.com/google/uuid v1.3.1 // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.11.0 // indirect golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.12.0 // indirect golang.org/x/text v0.13.0 // indirect
google.golang.org/grpc v1.57.0 // indirect google.golang.org/grpc v1.57.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect google.golang.org/protobuf v1.31.0 // indirect
) )

View File

@@ -1,5 +1,6 @@
github.com/gofiber/utils v1.1.0 h1:vdEBpn7AzIUJRhe+CiTOJdUcTg4Q9RK+pEa0KPbLdrM= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -7,15 +8,22 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE=
github.com/oracle/coherence-go-client v1.0.1 h1:MJ9S46+G8DHg/b3c/XB+mGA58wmTE0HdBCH1t+WrIBs= github.com/oracle/coherence-go-client v1.0.2 h1:sMIkBoYDJYP3lq6Th1WAJSVKRkqERY8W7auFsoVJGJs=
github.com/oracle/coherence-go-client v1.0.1/go.mod h1:tdIKuX6brsdTCARlbxeRYiOF0TA4tA8ujHO4BCS1mjk= github.com/oracle/coherence-go-client v1.0.2/go.mod h1:CK8c0CpzZpYXthR6U3t1UpJRkllBpabooaxewJ1oT3c=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM= google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 h1:0nDDozoAU19Qb2HwhXadU8OcsiO/09cnTqhUtq2MEOM=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
@@ -25,4 +33,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -7,123 +7,139 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestSetCouchbase_ShouldReturnNoError(t *testing.T) { func newTestStore(t testing.TB) *Storage {
testStorage := New(Config{ t.Helper()
return New(Config{
Username: "admin", Username: "admin",
Password: "123456", Password: "123456",
Host: "127.0.0.1:8091", Host: "127.0.0.1:8091",
Bucket: "fiber_storage", Bucket: "fiber_storage",
}) })
}
err := testStorage.Set("test", []byte("test"), 0) func TestSetCouchbase_ShouldReturnNoError(t *testing.T) {
testStore := newTestStore(t)
err := testStore.Set("test", []byte("test"), 0)
require.NoError(t, err) require.NoError(t, err)
} }
func TestGetCouchbase_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) { func TestGetCouchbase_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
val, err := testStorage.Get("not_found_key") val, err := testStore.Get("not_found_key")
require.NoError(t, err) require.NoError(t, err)
require.Zero(t, len(val)) require.Zero(t, len(val))
} }
func TestSetAndGet_GetShouldReturn_SettedValueWithoutError(t *testing.T) { func TestSetAndGet_GetShouldReturn_SetValueWithoutError(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0) err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
val, err := testStorage.Get("test") val, err := testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, val, []byte("fiber_test_value")) require.Equal(t, val, []byte("fiber_test_value"))
} }
func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) { func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
err := testStorage.Set("test", []byte("fiber_test_value"), 3*time.Second) err := testStore.Set("test", []byte("fiber_test_value"), 3*time.Second)
require.NoError(t, err) require.NoError(t, err)
time.Sleep(6 * time.Second) time.Sleep(6 * time.Second)
val, err := testStorage.Get("test") val, err := testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
require.Zero(t, len(val)) require.Zero(t, len(val))
} }
func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) { func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0) err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
err = testStorage.Delete("test") err = testStore.Delete("test")
require.NoError(t, err) require.NoError(t, err)
_, err = testStorage.Get("test") _, err = testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
} }
func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) { func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0) err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
err = testStorage.Reset() err = testStore.Reset()
require.NoError(t, err) require.NoError(t, err)
_, err = testStorage.Get("test") _, err = testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
} }
func TestClose_CloseShouldReturn_NoError(t *testing.T) { func TestClose_CloseShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
err := testStorage.Close() err := testStore.Close()
require.NoError(t, err) require.NoError(t, err)
} }
func TestGetConn_ReturnsNotNill(t *testing.T) { func TestGetConn_ReturnsNotNil(t *testing.T) {
testStorage := New(Config{ testStore := newTestStore(t)
Username: "admin",
Password: "123456", require.True(t, testStore.Conn() != nil)
Host: "127.0.0.1:8091", }
Bucket: "fiber_storage",
}) func Benchmark_Couchbase_Set(b *testing.B) {
require.True(t, testStorage.Conn() != nil) testStore := newTestStore(b)
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Couchbase_Get(b *testing.B) {
testStore := newTestStore(b)
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Couchbase_SetAndDelete(b *testing.B) {
testStore := newTestStore(b)
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
} }

View File

@@ -3,15 +3,15 @@ module github.com/gofiber/storage/couchbase/v2
go 1.19 go 1.19
require ( require (
github.com/couchbase/gocb/v2 v2.6.3 github.com/couchbase/gocb/v2 v2.6.4
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )
require ( require (
github.com/couchbase/gocbcore/v10 v10.2.3 // indirect github.com/couchbase/gocbcore/v10 v10.2.8 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/golang/snappy v0.0.4 // indirect github.com/golang/snappy v0.0.4 // indirect
github.com/google/uuid v1.3.0 // indirect github.com/google/uuid v1.3.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

View File

@@ -1,7 +1,7 @@
github.com/couchbase/gocb/v2 v2.6.3 h1:5RsMo+RRfK0mVxHLAfpBz3/tHlgXZb1WBNItLk9Ab+c= github.com/couchbase/gocb/v2 v2.6.4 h1:o5k5JnxYkgamVL9svx+vbXc7vKF5X72tNt/qORs+L30=
github.com/couchbase/gocb/v2 v2.6.3/go.mod h1:yF5F6BHTZ/ZowhEuZbySbXrlI4rHd1TIhm5azOaMbJU= github.com/couchbase/gocb/v2 v2.6.4/go.mod h1:W/cHlBGfendPh53WzRaF1KIXTovI9DaI7EPeeqIsnmc=
github.com/couchbase/gocbcore/v10 v10.2.3 h1:PEkRSNSkKjUBXx82Ucr094+anoiCG5GleOOQZOHo6D4= github.com/couchbase/gocbcore/v10 v10.2.8 h1:Enjxyxd6XYIP0SSlKxt+GHL0J+A/GaLxGJZ13XCfOW4=
github.com/couchbase/gocbcore/v10 v10.2.3/go.mod h1:lYQIIk+tzoMcwtwU5GzPbDdqEkwkH3isI2rkSpfL0oM= github.com/couchbase/gocbcore/v10 v10.2.8/go.mod h1:lYQIIk+tzoMcwtwU5GzPbDdqEkwkH3isI2rkSpfL0oM=
github.com/couchbaselabs/gocaves/client v0.0.0-20230307083111-cc3960c624b1/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY= github.com/couchbaselabs/gocaves/client v0.0.0-20230307083111-cc3960c624b1/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY=
github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259 h1:2TXy68EGEzIMHOx9UvczR5ApVecwCfQZ0LjkmwMI6g4= github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259 h1:2TXy68EGEzIMHOx9UvczR5ApVecwCfQZ0LjkmwMI6g4=
github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY= github.com/couchbaselabs/gocaves/client v0.0.0-20230404095311-05e3ba4f0259/go.mod h1:AVekAZwIY2stsJOMWLAS/0uA/+qdp7pjO8EHnl61QkY=
@@ -10,8 +10,9 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

View File

@@ -1,13 +1,16 @@
package dynamodb package dynamodb
import ( import (
"os"
"testing" "testing"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New( var testStore *Storage
Config{
func TestMain(m *testing.M) {
testStore = New(Config{
Table: "fiber_storage", Table: "fiber_storage",
Endpoint: "http://localhost:8000/", Endpoint: "http://localhost:8000/",
Region: "us-east-1", Region: "us-east-1",
@@ -15,8 +18,14 @@ var testStore = New(
AccessKey: "dummy", AccessKey: "dummy",
SecretAccessKey: "dummy", SecretAccessKey: "dummy",
}, },
}, Reset: true,
) })
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_DynamoDB_Set(t *testing.T) { func Test_DynamoDB_Set(t *testing.T) {
var ( var (
@@ -106,3 +115,42 @@ func Test_DynamoDB_Close(t *testing.T) {
func Test_DynamoDB_Conn(t *testing.T) { func Test_DynamoDB_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_DynamoDB_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_DynamoDB_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_DynamoDB_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -3,27 +3,27 @@ module github.com/gofiber/storage/dynamodb/v2
go 1.19 go 1.19
require ( require (
github.com/aws/aws-sdk-go-v2 v1.21.0 github.com/aws/aws-sdk-go-v2 v1.21.1
github.com/aws/aws-sdk-go-v2/config v1.18.38 github.com/aws/aws-sdk-go-v2/config v1.18.44
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 github.com/aws/aws-sdk-go-v2/credentials v1.13.42
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39 github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.41
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.5 github.com/aws/aws-sdk-go-v2/service/dynamodb v1.22.1
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )
require ( require (
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44 // indirect
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5 // indirect github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.6 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.35 // indirect github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.36 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.15.1 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.23.1 // indirect
github.com/aws/smithy-go v1.14.2 // indirect github.com/aws/smithy-go v1.15.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect

View File

@@ -1,37 +1,37 @@
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= github.com/aws/aws-sdk-go-v2 v1.21.1 h1:wjHYshtPpYOZm+/mu3NhVgRRc0baM6LJZOmxPZ5Cwzs=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= github.com/aws/aws-sdk-go-v2 v1.21.1/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM=
github.com/aws/aws-sdk-go-v2/config v1.18.38 h1:CByQCELMgm2tM1lAehx3XNg0R/pfeXsYzqn0Aq2chJQ= github.com/aws/aws-sdk-go-v2/config v1.18.44 h1:U10NQ3OxiY0dGGozmVIENIDnCT0W432PWxk2VO8wGnY=
github.com/aws/aws-sdk-go-v2/config v1.18.38/go.mod h1:vNm9Hf5VgG2fSUWhT3zFrqN/RosGcabFMYgiSoxKFU8= github.com/aws/aws-sdk-go-v2/config v1.18.44/go.mod h1:pHxnQBldd0heEdJmolLBk78D1Bf69YnKLY3LOpFImlU=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 h1:ps0cPswZjpsOk6sLwG6fdXTzrYjCplgPEyG3OUbbdqE= github.com/aws/aws-sdk-go-v2/credentials v1.13.42 h1:KMkjpZqcMOwtRHChVlHdNxTUUAC6NC/b58mRZDIdcRg=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36/go.mod h1:sY2phUzxbygoyDtTXhqi7GjGjCQ1S5a5Rj8u3ksBxCg= github.com/aws/aws-sdk-go-v2/credentials v1.13.42/go.mod h1:7ltKclhvEB8305sBhrpls24HGxORl6qgnQqSJ314Uw8=
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39 h1:DX/r3aNL7pIVn0K5a+ESL0Fw9ti7Rj05pblEiIJtPmQ= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.41 h1:VAf4nqNK8rll9tWH4srq3nq+e0oSx15zoNel+o5/qE4=
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39/go.mod h1:oTk09orqXlwSKnKf+UQhy+4Ci7aCo9x8hn0ZvPCLrns= github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.41/go.mod h1:YXdY5/rM8Anc0Ee9SpA0JgvWV9tmBw24qTFRPUT1mhI=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12 h1:3j5lrl9kVQrJ1BU4O0z7MQ8sa+UXdiLuo4j0V+odNI8=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12/go.mod h1:JbFpcHDBdsex1zpIKuVRorZSQiZEyc3MykNCcjgz174=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42 h1:817VqVe6wvwE46xXy6YF5RywvjOX6U2zRQQ6IbQFK0s=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42/go.mod h1:oDfgXoBBmj+kXnqxDDnIDnC56QBosglKp8ftRCTxR+0=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36 h1:7ZApaXzWbo8slc+W5TynuUlB4z66g44h7uqa3/d/BsY=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36/go.mod h1:rwr4WnmFi3RJO0M4dxbJtgi9BPLMpVBMX1nUte5ha9U=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 h1:GPUcE/Yq7Ur8YSUk6lVkoIMWnJNO0HT18GUzCWCgCI0= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44 h1:quOJOqlbSfeJTboXLjYXM1M9T52LBXqLoTPlmsKLpBo=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44/go.mod h1:LNy+P1+1LiRcCsVYr/4zG5n8zWFL0xsvZkOybjbftm8=
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.5 h1:EeNQ3bDA6hlx3vifHf7LT/l9dh9w7D2XgCdaD11TRU4= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.22.1 h1:TYq4EU2vEEluoaBG0RCPnbibSndTQSzlpbZdmT/YRcs=
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.5/go.mod h1:X3ThW5RPV19hi7bnQ0RMAiBjZbzxj4rZlj+qdctbMWY= github.com/aws/aws-sdk-go-v2/service/dynamodb v1.22.1/go.mod h1:1EJb9/tJwI7iqiStZBcmHijQxcgp7dlPuD2YgoZIrJQ=
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5 h1:xoalM/e1YsT6jkLKl6KA9HUiJANwn2ypJsM9lhW2WP0= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.6 h1:19fUnoM1ZfBQvavOVisIVRskTEVqqriSDydHi+BlVhg=
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.5/go.mod h1:7QtKdGj66zM4g5hPgxHRQgFGLGal4EgwggTw5OZH56c= github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.6/go.mod h1:QxkzvI+DXGAgVB4/s8fjbB3BpcNq+Yt0+3mKWG2PrRU=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8=
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.35 h1:UKjpIDLVF90RfV88XurdduMoTxPqtGHZMIDYZQM7RO4= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.36 h1:0ZzowXTZABVqnJnwDMlTDP3eeEkuP1r6RYnhSBmgK2o=
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.35/go.mod h1:B3dUg0V6eJesUTi+m27NUkj7n8hdDKYUpxj8f4+TqaQ= github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.36/go.mod h1:zAE5h/4VanzBpqyWoCZX/nJImdsqjjsGt2r3MtbKSFA=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36 h1:YXlm7LxwNlauqb2OrinWlcvtsflTzP8GaMvYfQBhoT4=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36/go.mod h1:ou9ffqJ9hKOVZmjlC6kQ6oROAyG1M4yBKzR+9BKbDwk=
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 h1:2PylFCfKCEDv6PeSN09pC/VUiRd10wi1VfHG5FrW0/g= github.com/aws/aws-sdk-go-v2/service/sso v1.15.1 h1:ZN3bxw9OYC5D6umLw6f57rNJfGfhg1DIAAcKpzyUTOE=
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= github.com/aws/aws-sdk-go-v2/service/sso v1.15.1/go.mod h1:PieckvBoT5HtyB9AsJRrYZFY2Z+EyfVM/9zG6gbV8DQ=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2 h1:fSCCJuT5i6ht8TqGdZc5Q5K9pz/atrf7qH4iK5C9XzU=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2/go.mod h1:5eNtr+vNc5vVd92q7SJ+U/HszsIdhZBEyi9dkMRKsp8=
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ= github.com/aws/aws-sdk-go-v2/service/sts v1.23.1 h1:ASNYk1ypWAxRhJjKS0jBnTUeDl7HROOpeSMu1xDA/I8=
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= github.com/aws/aws-sdk-go-v2/service/sts v1.23.1/go.mod h1:2cnsAhVT3mqusovc2stUSUrSBGTcX9nh8Tu6xh//2eI=
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -1,110 +1,132 @@
package etcd package etcd
import ( import (
"os"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestSetEtcd_ShouldReturnNoError(t *testing.T) { var testStore *Storage
testStorage := New(Config{
func TestMain(m *testing.M) {
testStore = New(Config{
Endpoints: []string{"localhost:2379"}, Endpoints: []string{"localhost:2379"},
}) })
code := m.Run()
_ = testStore.Reset()
_ = testStore.Close()
os.Exit(code)
}
func TestSetEtcd_ShouldReturnNoError(t *testing.T) {
var ( var (
key = "john" key = "john"
val = []byte("doe") val = []byte("doe")
) )
err := testStorage.Set(key, val, 0) err := testStore.Set(key, val, 0)
require.NoError(t, err) require.NoError(t, err)
} }
func TestGetEtcd_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) { func TestGetEtcd_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) {
testStorage := New(Config{ val, err := testStore.Get("not_found_key")
Endpoints: []string{"localhost:2379"},
})
val, err := testStorage.Get("not_found_key")
require.NoError(t, err) require.NoError(t, err)
require.Zero(t, len(val)) require.Zero(t, len(val))
} }
func TestSetAndGet_GetShouldReturn_SettedValueWithoutError(t *testing.T) { func TestSetAndGet_GetShouldReturn_SettedValueWithoutError(t *testing.T) {
testStorage := New(Config{ err := testStore.Set("test", []byte("fiber_test_value"), 0)
Endpoints: []string{"localhost:2379"},
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
val, err := testStorage.Get("test") val, err := testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, val, []byte("fiber_test_value")) require.Equal(t, val, []byte("fiber_test_value"))
} }
func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) { func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) {
testStorage := New(Config{ err := testStore.Set("test", []byte("fiber_test_value"), 3*time.Second)
Endpoints: []string{"localhost:2379"},
})
err := testStorage.Set("test", []byte("fiber_test_value"), 3*time.Second)
require.NoError(t, err) require.NoError(t, err)
time.Sleep(6 * time.Second) time.Sleep(6 * time.Second)
val, err := testStorage.Get("test") val, err := testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
require.Zero(t, len(val)) require.Zero(t, len(val))
} }
func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) { func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ err := testStore.Set("test", []byte("fiber_test_value"), 0)
Endpoints: []string{"localhost:2379"},
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
err = testStorage.Delete("test") err = testStore.Delete("test")
require.NoError(t, err) require.NoError(t, err)
_, err = testStorage.Get("test") _, err = testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
} }
func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) { func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ err := testStore.Set("test", []byte("fiber_test_value"), 0)
Endpoints: []string{"localhost:2379"},
})
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err) require.NoError(t, err)
err = testStorage.Reset() err = testStore.Reset()
require.NoError(t, err) require.NoError(t, err)
_, err = testStorage.Get("test") _, err = testStore.Get("test")
require.NoError(t, err) require.NoError(t, err)
} }
func TestClose_CloseShouldReturn_NoError(t *testing.T) { func TestClose_CloseShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{ err := testStore.Close()
Endpoints: []string{"localhost:2379"},
})
err := testStorage.Close()
require.NoError(t, err) require.NoError(t, err)
} }
func TestGetConn_ReturnsNotNill(t *testing.T) { func TestGetConn_ReturnsNotNill(t *testing.T) {
testStorage := New(Config{ require.True(t, testStore.Conn() != nil)
Endpoints: []string{"localhost:2379"}, }
})
func Benchmark_Etcd_Set(b *testing.B) {
require.True(t, testStorage.Conn() != nil) b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Etcd_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Etcd_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
} }

View File

@@ -18,9 +18,9 @@ require (
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
go.uber.org/multierr v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.25.0 // indirect go.uber.org/zap v1.25.0 // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.11.0 // indirect golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.12.0 // indirect golang.org/x/text v0.13.0 // indirect
google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect

View File

@@ -41,20 +41,20 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=

View File

@@ -1,13 +1,25 @@
package memcache package memcache
import ( import (
"os"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New() var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(Config{
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_Memcache_Set(t *testing.T) { func Test_Memcache_Set(t *testing.T) {
var ( var (
@@ -118,3 +130,42 @@ func Test_Memcache_Close(t *testing.T) {
func Test_Memcache_Conn(t *testing.T) { func Test_Memcache_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_Memcache_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Memcache_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Memcache_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -4,7 +4,6 @@ import (
"testing" "testing"
"time" "time"
"github.com/gofiber/utils/v2"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
@@ -120,30 +119,41 @@ func Test_Storage_Memory_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
// go test -v -run=^$ -bench=Benchmark_Storage_Memory -benchmem -count=4 func Benchmark_Memory_Set(b *testing.B) {
func Benchmark_Storage_Memory(b *testing.B) { b.ReportAllocs()
keyLength := 1000 b.ResetTimer()
keys := make([]string, keyLength)
for i := 0; i < keyLength; i++ {
keys[i] = utils.UUID()
}
value := []byte("joe")
ttl := 2 * time.Second var err error
b.Run("fiber_memory", func(b *testing.B) { for i := 0; i < b.N; i++ {
d := New() err = testStore.Set("john", []byte("doe"), 0)
b.ReportAllocs() }
b.ResetTimer()
for n := 0; n < b.N; n++ { require.NoError(b, err)
for _, key := range keys { }
d.Set(key, value, ttl)
} func Benchmark_Memory_Get(b *testing.B) {
for _, key := range keys { err := testStore.Set("john", []byte("doe"), 0)
_, _ = d.Get(key) require.NoError(b, err)
}
for _, key := range keys { b.ReportAllocs()
d.Delete(key) b.ResetTimer()
}
} for i := 0; i < b.N; i++ {
}) _, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Memory_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
} }

View File

@@ -1,4 +1,15 @@
# Minio ---
id: minio
title: Minio
---
![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=minio*)
[![Discord](https://img.shields.io/discord/704680098577514527?style=flat&label=%F0%9F%92%AC%20discord&color=00ACD7)](https://gofiber.io/discord)
![Test](https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-minio.yml?label=Tests)
![Security](https://img.shields.io/github/actions/workflow/status/gofiber/storage/gosec.yml?label=Security)
![Linter](https://img.shields.io/github/actions/workflow/status/gofiber/storage/linter.yml?label=Linter)
## Minio
A Minio storage driver using [minio/minio-go](https://github.com/minio/minio-go). A Minio storage driver using [minio/minio-go](https://github.com/minio/minio-go).
@@ -50,8 +61,8 @@ store := minio.New(minio.Config{
Bucket: "fiber-bucket", Bucket: "fiber-bucket",
Endpoint: "localhost:9000", Endpoint: "localhost:9000",
Credentials: Credentials{ Credentials: Credentials{
accessKeyID: "minio-user", AccessKeyID: "minio-user",
secretAccessKey: "minio-password", SecretAccessKey: "minio-password",
}, },
}) })
``` ```

View File

@@ -22,10 +22,10 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/xid v1.5.0 // indirect github.com/rs/xid v1.5.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect
golang.org/x/crypto v0.12.0 // indirect golang.org/x/crypto v0.14.0 // indirect
golang.org/x/net v0.14.0 // indirect golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.11.0 // indirect golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.12.0 // indirect golang.org/x/text v0.13.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect
) )

View File

@@ -37,16 +37,16 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=

View File

@@ -1,6 +1,7 @@
package minio package minio
import ( import (
"os"
"strconv" "strconv"
"testing" "testing"
"time" "time"
@@ -8,16 +9,26 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New( var testStore *Storage
Config{
Bucket: "fiber-bucket", func TestMain(m *testing.M) {
Endpoint: "localhost:9000", testStore = New(
Credentials: Credentials{ Config{
AccessKeyID: "minio-user", Bucket: "fiber-bucket",
SecretAccessKey: "minio-password", Endpoint: "localhost:9000",
Credentials: Credentials{
AccessKeyID: "minio-user",
SecretAccessKey: "minio-password",
},
Reset: true,
}, },
}, )
)
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_Get(t *testing.T) { func Test_Get(t *testing.T) {
var ( var (
@@ -182,3 +193,42 @@ func Test_Reset(t *testing.T) {
func Test_Close(t *testing.T) { func Test_Close(t *testing.T) {
require.NoError(t, testStore.Close()) require.NoError(t, testStore.Close())
} }
func Benchmark_Minio_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Minio_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Minio_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -1,15 +1,25 @@
package mongodb package mongodb
import ( import (
"os"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New(Config{ var testStore *Storage
Reset: true,
}) func TestMain(m *testing.M) {
testStore = New(Config{
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_MongoDB_Set(t *testing.T) { func Test_MongoDB_Set(t *testing.T) {
var ( var (
@@ -120,3 +130,42 @@ func Test_MongoDB_Close(t *testing.T) {
func Test_MongoDB_Conn(t *testing.T) { func Test_MongoDB_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_MongoDB_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_MongoDB_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_MongoDB_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -173,3 +173,42 @@ func Test_MSSQL_Close(t *testing.T) {
func Test_MSSQL_Conn(t *testing.T) { func Test_MSSQL_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_MSSQL_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_MSSQL_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_MSSQL_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -26,7 +26,7 @@ func Test_MYSQL_New(t *testing.T) {
}) })
require.True(t, newConfigStore.db != nil) require.True(t, newConfigStore.db != nil)
newConfigStore.Close() require.NoError(t, newConfigStore.Close())
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", os.Getenv("MYSQL_USERNAME"), os.Getenv("MYSQL_PASSWORD"), "127.0.0.1", 3306, os.Getenv("MYSQL_DATABASE")) dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", os.Getenv("MYSQL_USERNAME"), os.Getenv("MYSQL_PASSWORD"), "127.0.0.1", 3306, os.Getenv("MYSQL_DATABASE"))
newConfigStore = New(Config{ newConfigStore = New(Config{
@@ -189,3 +189,42 @@ func Test_MYSQL_Close(t *testing.T) {
func Test_MYSQL_Conn(t *testing.T) { func Test_MYSQL_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_MYSQL_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_MYSQL_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_MYSQL_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -8,8 +8,8 @@ import (
) )
var testStore = New(Config{ var testStore = New(Config{
"test.db", Path: "test.db",
nil, WriteOptions: nil,
}) })
func Test_Pebble_Set(t *testing.T) { func Test_Pebble_Set(t *testing.T) {
@@ -105,3 +105,42 @@ func Test_Pebble_Close(t *testing.T) {
func Test_Pebble_Conn(t *testing.T) { func Test_Pebble_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_Pebble_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Pebble_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Pebble_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -170,3 +170,42 @@ func Test_Postgres_Conn(t *testing.T) {
func Test_Postgres_Close(t *testing.T) { func Test_Postgres_Close(t *testing.T) {
require.Nil(t, testStore.Close()) require.Nil(t, testStore.Close())
} }
func Benchmark_Postgres_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Postgres_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Postgres_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -86,15 +86,15 @@ tlsCfg := &tls.Config{
Certificates: []tls.Certificate{cer}, Certificates: []tls.Certificate{cer},
} }
store = redis.New(redis.Config{ store = redis.New(redis.Config{
URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>", URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>",
TLSConfig: tlsCfg, TLSConfig: tlsCfg,
Reset: false, Reset: false,
}) })
// Create a client with a Redis URL with all information. // Create a client with a Redis URL with all information.
store = redis.New(redis.Config{ store = redis.New(redis.Config{
URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>", URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>",
Reset: false, Reset: false,
}) })
``` ```

View File

@@ -3,7 +3,7 @@ module github.com/gofiber/storage/redis/v3
go 1.19 go 1.19
require ( require (
github.com/redis/go-redis/v9 v9.1.0 github.com/redis/go-redis/v9 v9.2.1
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )

View File

@@ -1,5 +1,5 @@
github.com/bsm/ginkgo/v2 v2.9.5 h1:rtVBYPs3+TC5iLUVOis1B9tjLTup7Cj5IfzosKtvTJ0= github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -8,8 +8,8 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= github.com/redis/go-redis/v9 v9.2.1 h1:WlYJg71ODF0dVspZZCpYmoF1+U1Jjk9Rwd7pq6QmlCg=
github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= github.com/redis/go-redis/v9 v9.2.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

View File

@@ -33,6 +33,11 @@ func New(config ...Config) *Storage {
cfg.Password = options.Password cfg.Password = options.Password
cfg.Database = options.DB cfg.Database = options.DB
cfg.Addrs = []string{options.Addr} cfg.Addrs = []string{options.Addr}
// If cfg.TLSConfig is not provided, and options returns one, use it.
if cfg.TLSConfig == nil && options.TLSConfig != nil {
cfg.TLSConfig = options.TLSConfig
}
} else if len(cfg.Addrs) == 0 { } else if len(cfg.Addrs) == 0 {
// Fallback to Host and Port values if Addrs is empty // Fallback to Host and Port values if Addrs is empty
cfg.Addrs = []string{fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)} cfg.Addrs = []string{fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)}

View File

@@ -146,17 +146,16 @@ func Test_Redis_Initalize_WithURL(t *testing.T) {
} }
func Test_Redis_Initalize_WithURL_TLS(t *testing.T) { func Test_Redis_Initalize_WithURL_TLS(t *testing.T) {
cer, err := tls.LoadX509KeyPair("./tests/tls/client.crt", "./tests/tls/client.key") cer, err := tls.LoadX509KeyPair("/home/runner/work/storage/storage/tls/client.crt", "/home/runner/work/storage/storage/tls/client.key")
if err != nil { if err != nil {
log.Println(err) log.Println(err)
return return
} }
tlsCfg := &tls.Config{ tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256}, CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
PreferServerCipherSuites: true, InsecureSkipVerify: true,
InsecureSkipVerify: true, Certificates: []tls.Certificate{cer},
Certificates: []tls.Certificate{cer},
CipherSuites: []uint16{ CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
@@ -188,6 +187,71 @@ func Test_Redis_Initalize_WithURL_TLS(t *testing.T) {
require.Nil(t, testStoreUrl.Close()) require.Nil(t, testStoreUrl.Close())
} }
func Test_Redis_Initalize_WithURL_TLS_Verify(t *testing.T) {
cer, err := tls.LoadX509KeyPair("/home/runner/work/storage/storage/tls/client.crt", "/home/runner/work/storage/storage/tls/client.key")
if err != nil {
log.Println(err)
return
}
tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
InsecureSkipVerify: false,
Certificates: []tls.Certificate{cer},
CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
tls.TLS_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_RSA_WITH_AES_256_CBC_SHA,
},
}
testStoreUrl := New(Config{
URL: "redis://localhost:6380",
TLSConfig: tlsCfg,
})
var (
key = "clark"
val = []byte("kent")
)
err = testStoreUrl.Set(key, val, 0)
require.NoError(t, err)
result, err := testStoreUrl.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
err = testStoreUrl.Delete(key)
require.NoError(t, err)
require.Nil(t, testStoreUrl.Close())
}
func Test_Redis_Initalize_With_Secure_URL(t *testing.T) {
testStoreUrl := New(Config{
URL: "rediss://localhost:16380",
})
var (
key = "clark"
val = []byte("kent")
)
err := testStoreUrl.Set(key, val, 0)
require.NoError(t, err)
result, err := testStoreUrl.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
err = testStoreUrl.Delete(key)
require.NoError(t, err)
require.Nil(t, testStoreUrl.Close())
}
func Test_Redis_Universal_Addrs(t *testing.T) { func Test_Redis_Universal_Addrs(t *testing.T) {
// This should failover and create a Single Node connection. // This should failover and create a Single Node connection.
testStoreUniversal := New(Config{ testStoreUniversal := New(Config{
@@ -348,3 +412,42 @@ func Test_Redis_Cluster(t *testing.T) {
require.Nil(t, testStoreUniversal.Close()) require.Nil(t, testStoreUniversal.Close())
} }
func Benchmark_Redis_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Redis_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Redis_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -1,57 +0,0 @@
#!/bin/bash
# Generate some test certificates which are used by the regression test suite:
#
# ./tls/ca.{crt,key} Self signed CA certificate.
# ./tls/redis.{crt,key} A certificate with no key usage/policy restrictions.
# ./tls/client.{crt,key} A certificate restricted for SSL client usage.
# ./tls/server.{crt,key} A certificate restricted for SSL server usage.
# ./tls/redis.dh DH Params file.
generate_cert() {
local name=$1
local cn="$2"
local opts="$3"
local keyfile=./tls/${name}.key
local certfile=./tls/${name}.crt
[ -f $keyfile ] || openssl genrsa -out $keyfile 2048
openssl req \
-new -sha256 \
-subj "/O=Redis Test/CN=$cn" \
-key $keyfile | \
openssl x509 \
-req -sha256 \
-CA ./tls/ca.crt \
-CAkey ./tls/ca.key \
-CAserial ./tls/ca.txt \
-CAcreateserial \
-days 365 \
$opts \
-out $certfile
}
mkdir -p ./tls
[ -f ./tls/ca.key ] || openssl genrsa -out ./tls/ca.key 4096
openssl req \
-x509 -new -nodes -sha256 \
-key ./tls/ca.key \
-days 3650 \
-subj '/O=Redis Test/CN=Certificate Authority' \
-out ./tls/ca.crt
cat > ./tls/openssl.cnf <<_END_
[ server_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = server
[ client_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = client
_END_
generate_cert server "Server-only" "-extfile ./tls/openssl.cnf -extensions server_cert"
generate_cert client "Client-only" "-extfile ./tls/openssl.cnf -extensions client_cert"
generate_cert redis "Generic-cert"
[ -f ./tls/redis.dh ] || openssl dhparam -out ./tls/redis.dh 2048

View File

@@ -1,29 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIE5jCCAs4CCQCw1ymcsil7MTANBgkqhkiG9w0BAQsFADA1MRMwEQYDVQQKDApS
ZWRpcyBUZXN0MR4wHAYDVQQDDBVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjIx
MTE0MDgyNTE0WhcNMzIxMTExMDgyNTE0WjA1MRMwEQYDVQQKDApSZWRpcyBUZXN0
MR4wHAYDVQQDDBVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQDnZXRXrYURmTc/559vMe7CZnwtKul2ZMOtS7UDPCcw
G3I1KHCxFkAxLNDhLtIENWId90Lc1mAIKtULy+RX2ORfOhYZ+JDK3sY25+53dgFq
vdPdtSpiiLklSh5XXdLcNq5sg8Zs1W514otDrfooYWqUp7BU4vZ0Cb/MWP/WEynD
ne3Aj1lpsEqV4+ydYhoki91tY9VS9y48VOZ+VC/+aCcbkm4G8FSczLZrglmnDq0v
d/ZrQ6dtALvPzKXdPA0HuqacT7VZ09d9tVOBj8xRkq5YEgUNHStkzZiRHzFXtRx5
+mH/WkkzbA1C7eUeRFxIxp+C1KZB08cg9CgdrJYs/osFttesSncOIdDieauaqkTU
wlcEY//sv/eiOv4XCIvuG+39r0ITQ4m8Amb28v0uaz2s1e8UVpk1mLuUVcpspmAf
q0UUyb3aKjkluBn5rZuHxZLP14FueojFTLIXW6sNKYGqHqh4TicogmqCQAGhd9wo
Wis21+xeOI9FgojASxugN+tY/64nwYQfCWsv8AuZegjyQ+AodGrtIHEbrAdgeYOj
heEYDePaKMau/0vc14vlOs5EssXf49QYhciRqESc+0O85rHemgqhb4Qz31V3AGf1
NP0wvqA97AmBYRLZSNc4ExvmQponOIVJY+idWiqJuRZSOeScEx0sx22MF1Nhwaw+
3QIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQDGSfsv4PsVkApOy0IYgO/ejJMqcbRF
Qv+PWcNG43qRuF0Fyg+6Gc+Ph8W3qNoh3lGm16WOdhMrMnnV3GKpIbl1z1Dr6Jtl
BRAOW+rPN8QueB7Fb2hT7QIkTDNAhoj+ks26KvzBOkQa9IrXUQZRigystOl3k1OB
BIL7c6pF9gMaskBlM5g70i+R7bb+MF1ivhB/G1QGYx97QJFdmDIr1NkcMFo/PsSN
pcm/f8i0Vh+DfM9jnywLESptyKJCO5RnMW67ep7t/IzfnNfHLZ0avf91nEP6PRtd
3ZDXcHX1rT+T9RQNcxws92x8gOvIxrJN4asLZj8A5T6tTGlhbaR77j98NH/e8m+1
MIET49DsIpIWWMW7M0CATUejHtddpFV/fXfhMXjU2/nWfzhCAXpi6BN2iE7Qihvc
RmjFrrSdqkPEuTDVFN/rdlWwz6m1/cqYBGlPEFEHkN+gEyhBf5Qa1dc1QUYDBYzW
rSR/NdH4wo21MWvJDLMb8tzp4LJJ3deW1o84UeiymjHStzJARVEX8w1/qjTohVbm
PWKPe98137BQWYQ4QUhRDeZc1h6OcWdVsNg0wwNtZ9hqNGo7n7+YzyoKFLSYm6So
D+93y5AoOZlCgtUfzUPlumMXCYcvWP0yifvnNksK7eknlen9tRuhP5vUYC+DTfrP
YpIOMlHgRIe0YA==
-----END CERTIFICATE-----

View File

@@ -1,51 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEA52V0V62FEZk3P+efbzHuwmZ8LSrpdmTDrUu1AzwnMBtyNShw
sRZAMSzQ4S7SBDViHfdC3NZgCCrVC8vkV9jkXzoWGfiQyt7GNufud3YBar3T3bUq
Yoi5JUoeV13S3DaubIPGbNVudeKLQ636KGFqlKewVOL2dAm/zFj/1hMpw53twI9Z
abBKlePsnWIaJIvdbWPVUvcuPFTmflQv/mgnG5JuBvBUnMy2a4JZpw6tL3f2a0On
bQC7z8yl3TwNB7qmnE+1WdPXfbVTgY/MUZKuWBIFDR0rZM2YkR8xV7Ucefph/1pJ
M2wNQu3lHkRcSMafgtSmQdPHIPQoHayWLP6LBbbXrEp3DiHQ4nmrmqpE1MJXBGP/
7L/3ojr+FwiL7hvt/a9CE0OJvAJm9vL9Lms9rNXvFFaZNZi7lFXKbKZgH6tFFMm9
2io5JbgZ+a2bh8WSz9eBbnqIxUyyF1urDSmBqh6oeE4nKIJqgkABoXfcKForNtfs
XjiPRYKIwEsboDfrWP+uJ8GEHwlrL/ALmXoI8kPgKHRq7SBxG6wHYHmDo4XhGA3j
2ijGrv9L3NeL5TrORLLF3+PUGIXIkahEnPtDvOax3poKoW+EM99VdwBn9TT9ML6g
PewJgWES2UjXOBMb5kKaJziFSWPonVoqibkWUjnknBMdLMdtjBdTYcGsPt0CAwEA
AQKCAgARw2kN/gUUF8X1AuvrVlL023c25G9tpkibOg+YQvrjJ4g56nPUNFgTLlSO
pNB8gDibAktAtrhCiD84m5tY3w6Q/N2LethqqnVe66kTxJxRPGdSQsERNVu5MBpq
LIquWwhCzk7iNfQ32n9EX8uvY+MRrFnN+mpe+AygPEjPf0MagDorKRX9FgpzvT6B
ynElUxNZfWt35f/Ho+DZ286fYhF2fWQy5iooq1JpqGUHfQnwde4Vx+jHZmIEjrpA
5IY/jKWTpE7QqYGGZfAWJxrRPEhj/GYk3pNhNqM6qMFZ8U5RUtZJCv5Jk0blV2va
Sfcnow/FtFta/E3yCqw1svUIWTYEwekaJIB5n3K2vbYwFdrsfrLJ0dOu3qMW4H4A
XSzuSleswPQf3wE3HKfPL4H2RsQsl7M/1tEFZWzegT5b9jAjDPQOagKi9OoQf39f
iJlPxzt91ukcYiYLcPbV6vr3WP+8TJshV3u2gd85zdQ6N+Jm7fcbtjT8UjJYa2RQ
UM6OiNrOPEqwZcRlXbBDyIQYIBN8VMVS610NekHDgSmWNpdofmquMUoWSukL4Vl7
FA+kPgAyvoHU4nUc13rFOis71ZUYP+JzFEWdE16q72ehemFnEgRNcyTUQAlz5Wl+
SApH9ibqjXfD/jYFpHlIg+Aw6LQqo+g9m7MyNHb7MNEyVfOjhQKCAQEA9MePx+uZ
vSIDcmxNsi0lIELbpwOSwgYH8v2WWWHARVZF9i9ZQ94R+PHmVFouzOZ6AB89EqDw
c7qSX5rveJH8FurXOWu9LPIwSR0SATB67yPh2GR55vTQP9F3gHRA1nB4Wto6Uhk/
2W1WBNnO3xOcOzitvBuPHCRMK193pa6HDmKXzZHeDA3NPhaM13eGI37rpM3tqm7I
lyeZrCo2Tps+8j9qkBOQ1VaPUtc36bMZpnTlnTP3fFp7oaQKgtHnpqpQsVZuzt90
Y8UeVRe0LOWi6VOWjiasVvQl14338CNyKoi9KCu3NL4B+4OQBoxNrpEsd0/OKEXX
grCIRg12tajluwKCAQEA8gDX4wqOzmdrcqsIlACREhyubnIDEJ7WmceR+dklrs1/
aaYL0H8IVSBmszzIUiTA9kjEFCU9vls6vjguBpF49YlXQc2pmyu26zQc83X4m9n8
roO6Jdlic5lkYbUtuB6c3AE7J5vTg2Yc9oLAOMibkjLrwfgQpBfMHhUY9hWpTBFF
8tBiUFB0ZDTcdDpIWd3P20j/RSB7e28sq34k6t0KkiWkIVecEHTq4uI6TGePzvIW
vdDVAKM4nllPYUPK6jQRvJ+fsKxnqmra0MoOPIpwpvsyg888992KaKC6zL2/EWP0
axExlKVYruyo7GNsSPOZq9eJ40Txc0nHbYUO3LEYRwKCAQBUM5GyI8lu1hR5d+gC
MqViw5zrhr8lHw38+F6PwKBzOYo3dXIvdmSYTh39RkhzE5VEFXrcvZ/5L2TKnnFh
+FXPTFlc10LsAyO5Atb+sb6YJK+70FRerjg0u8lv1o23NlkwZ4FIXIcqNAIzCPmw
ov5LIOQioRhJhfLtuJlf1PmAaUnu3Q6U9upzQS6Rr/vkmfRVbMEkr5cw595k6uBj
iePNUSNHDHP17yC+Tmpdac6ZA/04ZnfrvvRoVhWHis0098FqP2E+qH9REq2sd8ry
5stzl91iaMs/3hxmWd/AK3FKUF9BQkhzTClCa69PkVPniOjS4hD4qY3I1xEJh/gd
5UuhAoIBAQCBO/4OGvdENmpk4/1CvEK8f2CPTodgetJzcOX9nP7IqKkgDDJG92/F
tfXiRdVcOJBrdVRwxaqBW0q1hl7d1xXXWa6lT2UBnoiidkP3p8pJwFF2CJaB2+L9
hK7cltqBdqehvW6PqmF7zC4vXoe0Szz5CARqo0SPvL2eWvnngI3WN2s5ThsSdMST
Nr97uhwlEZUMr6DSk5QdyLL8KfMhEUWx4jQSMiz/hNBitRkY8D0V8KZAW6NEIeX8
egkwEfnstD28kym+OXNqyIFt+lk771pVcdP6G9OdMkvVr+/RoorEiLJf8uCdVudT
EsLq6fVLx/sKj6HtIkYmoQHE9MeJB3HFAoIBAQCrl5LBfNKjqx9ijX/ghAvvHm52
T9cSJxHZ2VaIghAIwXDAA7vUpeLlXcR8zHp+TozFWpfEcZh4ztmfmEozN8Ljcutr
94VX7urIdC/JYzfJ2rzNmJdk0sgXZ+yv4LJ9RvoehIuhwQc95JLdnlEP3kNBiqUM
N7i66BLdWq015b6WCIYS8DeBfETkXRLMH2hawpB1ZmhiWQ3G49cGJU/CXt8471dC
urEwlHtCLDvZ4peTCoVtV0OgNTcE05RPO15gFIMWrHF/UoZiV+PZCHTJNzjupjNw
8xgu+EhDo62M8t+SILwNRPvusAbOLXsnTbq7xbmWR/9zPtJscBCxMCxiHkKc
-----END RSA PRIVATE KEY-----

View File

@@ -1 +0,0 @@
F93DEACFF8ACD907

View File

@@ -1,24 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEBTCCAe2gAwIBAgIJAPk96s/4rNkGMA0GCSqGSIb3DQEBCwUAMDUxEzARBgNV
BAoMClJlZGlzIFRlc3QxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAe
Fw0yMjExMTQwODI1MTRaFw0yMzExMTQwODI1MTRaMCsxEzARBgNVBAoMClJlZGlz
IFRlc3QxFDASBgNVBAMMC0NsaWVudC1vbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAtKcK6sWYkbgmWKV03WzmLbicEr9gMZVsoyxgNV52ciFnPQ72
2B0PEafTO4CFdzTj3titqqOtcQVVqo6uCZroBfwCYzEgozBEPvECcY/ldw1uiN9c
EyCKTAEGFqnSZwJ4UfC/JDnsNRjflLrAZ5xsQV56+yreYurY8WzCmdjpxkHQ0i0s
BBG0wdd/d4G8EYSHjOhtoqckUCeHU3Z8+WOn3LeIjK2XaAZTJHC+a9Pjj376degV
bgEQufwrTiyOimwoMVvu2biMEyPo6KXJeofaPjAMeS2uD89czV2qjPPoLrb+x1mZ
wVWK+PIiQE5cgBGhjNTEToj0xI8ZhGiqvoLTdQIDAQABoyIwIDALBgNVHQ8EBAMC
BaAwEQYJYIZIAYb4QgEBBAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQCSTgkiaEou
OS9K4Cq7sIPvZHmZlniti4TeMq1lgVzTjRRjSA2mP0183LrWCRouKor5ce/Zozbp
0/GNaA+Iru5Ig22dtC8M2UiQGvIRCth6oJxmM/T9VeK54pIQ3XDpyl2t3xVqh74u
1g5BvZ51X17WnuVR0Ipax1EPARkXKijvhZ1R71yd8fClXeXE4SsepUXdl80mkCKk
wFqdhArQYrNcG4lI/y4VxGbPFQ28a9L8Ru44pP8+7lHCENN4T8P7CquRpHaEIyKH
v10TLZM3V5e1cZmDmmvWmdyntQR1FIHLUNWbinLkUwhYvFQPlGqXyywUDF0Jn8x8
KyUfvUXyoi+vbKQPVHY90QPyTc6hpHfSLU+jkXFmrWn1f1h7pHRBIcCFX77CTZyY
8Qpse0xsyDb1d07DB+RhTkw9nZeNBjj9/YPWgM/Opl5C6g0w5vMQYvIkgrGZ4Xsy
8D16nIZtoP9omGzK7La7Yov69gq+/5j4IkMda4FukDs9y71/t55mlYtR/J2rQiEo
YIFdXng0CgqMZg3i+qPU9c9ptsm1y8R6RCZHyrrV4P4Z79TbUv0bHU0pc56lXFZw
M4HwFYGvc5cvSbTeqmpOKftlE743+8ZZuL1Ll/tscVehNiduHpogkPfN4Z2UNM8h
3cRF3zsnD1QdBbJuvIgaO7HsOuLiZprlSw==
-----END CERTIFICATE-----

View File

@@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAtKcK6sWYkbgmWKV03WzmLbicEr9gMZVsoyxgNV52ciFnPQ72
2B0PEafTO4CFdzTj3titqqOtcQVVqo6uCZroBfwCYzEgozBEPvECcY/ldw1uiN9c
EyCKTAEGFqnSZwJ4UfC/JDnsNRjflLrAZ5xsQV56+yreYurY8WzCmdjpxkHQ0i0s
BBG0wdd/d4G8EYSHjOhtoqckUCeHU3Z8+WOn3LeIjK2XaAZTJHC+a9Pjj376degV
bgEQufwrTiyOimwoMVvu2biMEyPo6KXJeofaPjAMeS2uD89czV2qjPPoLrb+x1mZ
wVWK+PIiQE5cgBGhjNTEToj0xI8ZhGiqvoLTdQIDAQABAoIBAQCeCzGi2QG0Ik3x
6baG7Pmm8EYipKjMWDR1wKHeruiiypReN5Q+15VSVeeXu8WH146vbBLrIUzgftFG
aJLbtljcu29/RgCOo/BgvErt/Py8HdUhC3+rACHdglvIQgPfuKp4zUz7rWz3uu4H
WSZwvsl6muSujf+GvHzVIdhR7hH/LianictHN6OBvuIk6+88LYxOvPzvOuzTs6o8
D4CdNwaWUtOm4/gV2/UXKBosbdpIoVbYAAOZPnu4gLAJV9ICnLDKMtZ+buZNEBdo
Pt3vtzN9LqmaiC1BfaH3Uqr2nhPW86VwLIr61uFGRG5Y1GS2XXOq+dgxW8BmXWMP
42J2GUlBAoGBAN+mPYJUckGFlToREOefwHsKJqPP+1aK4LjibqXZSnTtRvAur/kD
Bw/b8xGSHx/pisQU9wwtbaaVy0tbW6fMBBweOiZMJdQ3XRaH87GfPDyEmqRnUWAF
/NiyshHDmg6HK6Dm1hT4Ndd35PO1xJDsgGyqCrsMRwfAON0pfSVxdWyFAoGBAM7I
n7tBdWeTWeVVFuZdyTVOWsYO14ZRsHULd30gO+bXaXFAK7X8/5tawZ4PXJq4VD0f
rpOcsnNtuROpbh3MshsplEDuq+JQ9DlhBTiz8wVcKp9z3RCY4GQjuPNIFuVMjN6i
dsL0U+IKwMPpYnlgimW3sNygO3q/nNxrUobBITYxAoGBAKYkC7t+2iXcg1/Qf7th
jI6amtvETFUc9BXEeCgSRGKaRcF1HVqhqiRY47fg0ehWCLTjUicktDk1PAFuC6ea
Qk9VESOUG+ILgsaTFjCUNx5J78tDyUrJB+0+ylOx+Abk2T89XDnVrcG0GkwFctGq
LzkKFNChLT8Px+5bvNEM+Qs1AoGANcSjDBzkO09sU56BetsuI4dBQTjAv/Njz7tw
kX+dM9QVXdZSx1qG2E2MBN53tN9zQAWJ7mYTXMJOGpe2w1bjhP6VxyCIXyuvpW/d
3LWl3mHtz1JgTB2EU2WahN/c3DjAdG+IM/82BJPJNefsrCT3N6XA/k1Hyg4i6omZ
huKXETECgYEAqr6GHzgFy3Y4OIpobwuAKvrY2/s7bo68pF6QTqvxalkJkjkp5HyP
FobWC0GxrPfwjkRbQTRANA0vVwFP/MnCU1ag3UeoYamOmG2GnTiiYWQehovAhOyi
TK7QXf+j5o4nrRt/TRfyeZH9XevX53HIGuFRtFZbm+WMn4bPjQj7ypg=
-----END RSA PRIVATE KEY-----

View File

@@ -1,6 +0,0 @@
[ server_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = server
[ client_cert ]
keyUsage = digitalSignature, keyEncipherment
nsCertType = client

View File

@@ -1,23 +0,0 @@
-----BEGIN CERTIFICATE-----
MIID3TCCAcUCCQD5PerP+KzZBzANBgkqhkiG9w0BAQsFADA1MRMwEQYDVQQKDApS
ZWRpcyBUZXN0MR4wHAYDVQQDDBVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMjIx
MTE0MDgyNTE0WhcNMjMxMTE0MDgyNTE0WjAsMRMwEQYDVQQKDApSZWRpcyBUZXN0
MRUwEwYDVQQDDAxHZW5lcmljLWNlcnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
ggEKAoIBAQC/lqyvZ+JecRTRWFEoyfIYnxz+1HiZwFGL7BhSrPf7Y6CSDwV+A7tB
Pvu7gSQx69cfMIeS78n/pNV4P0dCgiEiOYZlqa8z1H3MVG6ZuM9uIfeubAeOvG5M
Emk9UJ3KU01XFFLCaQ9u+WPJNUQyB+hUDE92k3PQ+sh3getcgYDQm6ktt1lZOgUK
JwXPNg6E1HlLDMrf4kqsCLMHCAuI7pT0RjMrK6mNEvs7hFf487zj857Jd1XJ069l
Fhqt/LOW7jOOCEXiGtfWEJ8pApsIsc1Pdgzxh+WS1HH0qRELMv0RUJXnhw/uiE1A
TwLVUD91YwboSLIYf/E3m7zREaXwf14RAgMBAAEwDQYJKoZIhvcNAQELBQADggIB
ADZgwvnwZf+4FuUrMs7sN1CcMyZ9IIXH16Z4/nn9LjzheqvtzoEEP7fAkYjL2z48
S1iHMYfCGNHI+wijtbt4BrbvR1g0nqmGBfiJ0xHyFpU03goh4l/JiqSK9kf1SPAF
763h564PGaA7sFFKf+VR1GpvEGD6vfjm5vIs2Hn0SRF5/6dwUNZOWaCkfdBB5ddb
1mSI8g5cEEv9+7mlIEXkdRiUJHFnuIUbH9W3ivB+XWGp9/o3y1+eK68+BkcRWBSr
PkCL7V3DVj0ENV2QqovUcyu1Z1kakNubyBxs/0t84DZ2NfYSyAOr2rBn8LW8Fbfc
X2E79C0RiuT6NDjMMFPchYVXeT7Fuh/ExwkE8DYCJWNZCY+pDdas1fqSt8loPZDG
M0LNCrVdI0uR5sJnau8ihKkn4UIkCP1XkXNUL1lKR86msZibIH/SqTWAUWh2SSuG
UqMORqRksC5pobJkQDra9b2ViNCcjp/S5iq5lokxnuGu3SxQObCnei0ceBKppWy5
orkRwuSwMrDUX2bVcR4Zcjdg7kz7CPcqObZTEcadRaxVuWOIi/Jn1zYqOGEOavyT
VvEvo9DT486aLGtF9rA6o/+MydRXd1qBRgfjrV7aaBZkRm3F2ofdpLrzXnDwarei
SnXRnd4rimpcL/s09DEevDkyt2aezgS/ngP4OWM1zJOf
-----END CERTIFICATE-----

View File

@@ -1,8 +0,0 @@
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEA1nYlp0dgMjvcReATfJwuS1lAtpvaTl8/Fu1/CuQ4rCoB9fgqvlTv
jgnHRAW42FD9NwOQibol/mDAmThd8Srq/teu84w9j4CGsd3+qO+/HP16GHLACVkP
LmImh30irqfTC2JkuiRccMYmt4N93Ba8FgC+GLcEjEB0JKW/JBZ71qO8fvwvvI7h
QU4YddezMsPG3L6TDYX0cFCSrcBNKa8mGgGLtppT30UWvAH0QAlsd6jiIR1cto+T
yDAv5WYIkBlsGcH70X1EEglHz48USV0Xu5lADkiazpXvKTl3XkD6gVkrCcxHF1iE
7VEbxKaGx5HsdRw7EV6Fdxp98mGRWjBlKwIBAg==
-----END DH PARAMETERS-----

View File

@@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAv5asr2fiXnEU0VhRKMnyGJ8c/tR4mcBRi+wYUqz3+2Ogkg8F
fgO7QT77u4EkMevXHzCHku/J/6TVeD9HQoIhIjmGZamvM9R9zFRumbjPbiH3rmwH
jrxuTBJpPVCdylNNVxRSwmkPbvljyTVEMgfoVAxPdpNz0PrId4HrXIGA0JupLbdZ
WToFCicFzzYOhNR5SwzK3+JKrAizBwgLiO6U9EYzKyupjRL7O4RX+PO84/OeyXdV
ydOvZRYarfyzlu4zjghF4hrX1hCfKQKbCLHNT3YM8YflktRx9KkRCzL9EVCV54cP
7ohNQE8C1VA/dWMG6EiyGH/xN5u80RGl8H9eEQIDAQABAoIBAQCsjHdaQqWNiSrG
oFP3+Gkh46uplpJHZv4KlsgRLdbpggDLitvXcmTjjmYJqXV/wHgujvaLT4sNwta/
Rb5YF/rfaA+y3+/7LhVeQWya5edruQvo+0KTOwHbYXmGz2RNJFkzZAplLVnJCLLm
NCMHLDgB+lRW5tYYEMUbXNcsqTXqqbSj9YHJ31z4y4GMXvw/ZIqikixgJzvIKe6P
zXBkK+J9otHWO3Z3CMFoRmhI0fp/wIiOlp9Xk2QzhUIIo5mzpRP2FnVBQH6qA1Qx
HcHy/kHCNOtkebaM50tCHwSZi+w6WjKRfbTpQHCaUIjvTfVEup088iI8b+gt48Zz
noX1efhBAoGBAPwCiX71kICymFBMyfE+0KZqg95w5oOygb/UvqmfAAHL8wwAxFRB
zTG6GQE67P/nROxUm3mr3JcTgszGcNBfeB9d3J59AFIoyHCOk8fXUS4I1JOKdIdg
XIwtCcIrCkCcLrzUVZlT8mJRH0F4U/LaB0NHiRZe25AWSVUdpbA/SDlHAoGBAMKf
O9iWdGZT6YC8FnFjS+HV7mJlUmaEgGXLqwVnEXOuGKell6WS5GN9XEcP8BnUqaoi
ARCWfku18x2LgOm1WZf9voPUvGwYAOuvzFtX9d8MYQQnI+fZX7ZpRO0Pako0kQhr
4SUadVQXXJIbB6kHr3JVP7dICEn2LOmlhWLnRlnnAoGBAOzxqbuAQaxvvzwI5vp3
mBBQJ8qWlnYO+WWXLukmwQfvbYbEldOuxrJRij8Y20rEdI5MAp7EkzRMuPe2QM36
ZWQAiXVOjGWzSLpjo9kKvp4s2UobrPK4DGwT0JAKjaov7tXGQvFV95ivM1cIPs4g
ZyG/+cnZyFDSU4K+zFFJPqvzAoGAaaa5fT1H2RjqZJk2cb1evy08aKvqTH7XmOs0
Xw1xmuPCvJeXOCoC08OE6YrMY6lfpV0qSM/5pa4TWVGW3Mg259y2pKhC1Uc+kLNx
c5DPh5MXw4Jf6ofFfqes5Cf/ImNg7DpsEZFIair4dNQ5l1f1tVJz8VIoNcZu4TOa
snMsbLcCgYALyGUUdgCDZErB32O2I6o6vLQh6Lc0YqbjrGGkvuygOEUiLa5Wtjqe
AHyb9aT39jSCFEaTMKPma3T555+Lkk1Io2jYRVenoFS+O1nlRQKuIbIyuejA/SFm
z8rZ8EMT4g485CZJ3VjkoVXNXl/L61F1I9vK31Il88qgvm4y2JlYyg==
-----END RSA PRIVATE KEY-----

View File

@@ -1,24 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIEBTCCAe2gAwIBAgIJAPk96s/4rNkFMA0GCSqGSIb3DQEBCwUAMDUxEzARBgNV
BAoMClJlZGlzIFRlc3QxHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAe
Fw0yMjExMTQwODI1MTRaFw0yMzExMTQwODI1MTRaMCsxEzARBgNVBAoMClJlZGlz
IFRlc3QxFDASBgNVBAMMC1NlcnZlci1vbmx5MIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEApvPQ66+fMPnJMf8BkGMq35EAT3FJIECqd3K/DNS2zox53gSj
P9cPuaW+JBlMUXTpGhgNKSLD8TMwJcA406A/pJScLNrdfoI9RvlKblwWWxcr2QBS
gFvEcnAYByVQb7S9gEOZev5CHGPw9Bav4jYZ+nTc+ERDuMC6HaqrjbLk1UbkuvAV
cWipYygtVFeeWx1TdHmez7n+kXcKNVojp1BbNJj5162zYXD7CnWrepA0r8b3ETEs
jTFRmJd6UgjZ/u+apf+DlIQ5UZOWPUs1okzmCjHAL0hp55Mj6lRW7F+ZEX8uC/pG
jOz/Qi2AIztZp+tYSQmyXlsEODft88D6StWKLwIDAQABoyIwIDALBgNVHQ8EBAMC
BaAwEQYJYIZIAYb4QgEBBAQDAgZAMA0GCSqGSIb3DQEBCwUAA4ICAQCEiTikIbaQ
4reQTD0pYlofKZgczg2BdnkvxVXBp/i/qNQgvIuedKFsAHvNTOtEm4zc5cxspFvW
bEZFMObHYTmRKVJzKawCQOp7uV3+StzqpV46uERn/HVH5PhToapH0ZA/vXp9dB8U
rCX9FQ9Wp/NeH1fzpToGuXgUUCo3jUKpkwJhxc0OH220/l6xmbN23ivY5UTt2z9v
x6S0gtkCD7VH7x5xxGu2T2HsJGbTefV/dknYcAYvZa5hy2wg4PyPlGSYD/UEZzVs
hJQDg3QTXvqFjdc8ZlPBoG1X028T28tiDgUuTwhH2trvY9qjk9VAVax9Wi3mkmYj
XfuSzgE/WexXrCljYAaPndUOwrd47XejlilcFCg5Otq5oPsWvFB+aSPyHHQJLG9B
ZHa1hFP2aV/amfMQxAj9dv7StrpdWHXTk1dvryQqyt3oZl87fUDPsBrmjOgdieFn
aGcx5NzCOQG6X6GwF15pdMaA4h51kZuZqM5hkpJOfYZb19eQ0O3YzdsN92Wue4iW
URiFFWbdZWeO5lykmwBDqNFP/4XIrgczEq62/Uzyt62dfKL7f93BfAiT2qtdtKqk
mHoya5ng+uav2TAGbHQgrNQYBJm9sB5MFwRYUWnrvWlig2whOzT/PGNohbc1JKkC
KSW2kUmwl+vdLoKe59o8TMfu/gn3BN+A/g==
-----END CERTIFICATE-----

View File

@@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEApvPQ66+fMPnJMf8BkGMq35EAT3FJIECqd3K/DNS2zox53gSj
P9cPuaW+JBlMUXTpGhgNKSLD8TMwJcA406A/pJScLNrdfoI9RvlKblwWWxcr2QBS
gFvEcnAYByVQb7S9gEOZev5CHGPw9Bav4jYZ+nTc+ERDuMC6HaqrjbLk1UbkuvAV
cWipYygtVFeeWx1TdHmez7n+kXcKNVojp1BbNJj5162zYXD7CnWrepA0r8b3ETEs
jTFRmJd6UgjZ/u+apf+DlIQ5UZOWPUs1okzmCjHAL0hp55Mj6lRW7F+ZEX8uC/pG
jOz/Qi2AIztZp+tYSQmyXlsEODft88D6StWKLwIDAQABAoIBAG+d3BRmIrDUnp1t
VndYxWYYhDOYkoIcmZsoPPBwGhO3ORak1RuuRZYhaCCsRSjEV7+ZStswof1U8qCa
haN+pG386PjYDnMw0ZTsv8VOjaeysx7uJzonoAu+Q2IroT49gOAK0ca3zC085+/Y
Zxh+gRnAHadhxED1oLiKzQz8CB9JpNIWWIhMEAPUgnnVMRzED62OyMTsX6ztPSx0
EiM1sNU7Jnf9TVMYS1LjJ9SNqbT9tmPaRj4DM2X17Iolg6ntx3rl8xeKQfcrOl/1
EWjiXBSmmqsGpQZPyD8uCE4d1/V+5sNpRkPRBJVoqPKRdmSHCgOPkeWDv1zoJZv5
RnS6MKECgYEA0nRtQt6j3USq/PDdnzRjskks7qsfOtsMR7ebQFwD+bbpAiY+walu
zTFwr1KggAtfjlp1pegnLg2aIvCoVr3wDAf7itAFIY34OKXsgV6AAu8k/Kr2KYgI
ZbPKmhn7bCH3vCzC+SsN0kBHhOmWLiErx50mpVPFgjkOHG/RQZa24NECgYEAyxVH
cGfSMWRe/e25R6F8b5V+oUThCZ6JyL0n03Vp9OFt1FN9OleBjezA47AysnKFnqIa
jsUwjXEZOFHmNSO9tPoNxqPH5vaE/BShSTVdP/zeOXF3BQLajrqwC6+2tzDMmpmT
erc1lPWHIMrvNaVkF/9mVbaDyZcGa4eNwm0Iev8CgYAtcTRSdw587aHaIgxInyBT
09ce5dZFeBzrs2qTeArntaYUb7unR3WEWwOQ589+NnZ4n3G91CX5nLhGiR5gNH0L
rAGVlJs3Bpeta65otMYBXC/pWuTyTMw7YZoCsk+GpsL+X8/ty20dlAGdYm6qIUF5
xaYdlrwUBUvVuhM+DVQJsQKBgALJ9AUzJ8vN2RAbp6O4MAFISEjmrUB4kOPU1Ssu
PZpDTkLQMrQOZ5UPX0bBMLEKqZMYHs0/H/+RQgtn9IVeTEij9nR341Lkp8becaiT
twgd7N9VE5FaDK5RGgHPE+9IGEc3PLM+uNmm1Yg5wTc3YjyCIWGj9ANcs5Xecq/s
12T5AoGAAlLIzXB5KStzhEibmwgmXLDL16hgTXmMHZ59Uy3Wz5g5r66rUqQL1Fg0
RjtRYeCjylVzDGw5ffzQYPUg2DqAncD/K2Pgw1EirwdZfzdWU7oXIiA+FYEEi0Z3
q3VVFmHAJaTQpU2A5UpL5+a8s0oPxxmU8p+FVhVuTLSuX8GcJr0=
-----END RSA PRIVATE KEY-----

View File

@@ -1,13 +1,24 @@
package ristretto package ristretto
import ( import (
"os"
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
var testStore = New() var testStore *Storage
func TestMain(m *testing.M) {
testStore = New()
code := m.Run()
_ = testStore.Reset()
_ = testStore.Close()
os.Exit(code)
}
func Test_Ristretto_Set(t *testing.T) { func Test_Ristretto_Set(t *testing.T) {
var ( var (
@@ -73,7 +84,7 @@ func Test_Ristretto_Set_Expiration(t *testing.T) {
err := testStore.Set(key, val, exp) err := testStore.Set(key, val, exp)
require.NoError(t, err) require.NoError(t, err)
testStore.Reset() require.NoError(t, testStore.Reset())
} }
func Test_Ristretto_Get_Expired(t *testing.T) { func Test_Ristretto_Get_Expired(t *testing.T) {
@@ -152,3 +163,42 @@ func Test_Ristretto_Close(t *testing.T) {
func Test_Ristretto_Conn(t *testing.T) { func Test_Ristretto_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_Ristretto_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Ristretto_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Ristretto_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -61,6 +61,11 @@ store := rueidis.New(rueidis.Config{
TLSConfig: nil, TLSConfig: nil,
}) })
// Initialize using Rueidis URL
store := rueidis.New(rueidis.Config{
URL: "redis://localhost:6379",
})
// Initialize Rueidis Cluster Client // Initialize Rueidis Cluster Client
store := rueidis.New(rueidis.Config{ store := rueidis.New(rueidis.Config{
InitAddress: []string{":6379", ":6380"}, InitAddress: []string{":6379", ":6380"},
@@ -105,6 +110,12 @@ type Config struct {
// Optional. Default is "" // Optional. Default is ""
ClientName string ClientName string
// URL standard format Redis URL. If this is set all other config options, InitAddress, Username, Password, ClientName, and SelectDB have no effect.
//
// Example: redis://<user>:<pass>@localhost:6379/<db>
// Optional. Default is ""
URL string
// SelectDB to be selected after connecting to the server. // SelectDB to be selected after connecting to the server.
// //
// Optional. Default is 0 // Optional. Default is 0
@@ -172,7 +183,7 @@ type Config struct {
// CacheTTL TTL // CacheTTL TTL
// //
// Optional. Default is time.Second // Optional. Default is time.Minute
CacheTTL time.Duration CacheTTL time.Duration
} }
``` ```
@@ -196,6 +207,6 @@ var ConfigDefault = Config{
DisableCache: false, DisableCache: false,
AlwaysPipelining: true, AlwaysPipelining: true,
Reset: false, Reset: false,
CacheTTL: time.Second, CacheTTL: time.Minute,
} }
``` ```

View File

@@ -24,6 +24,12 @@ type Config struct {
// Optional. Default is "" // Optional. Default is ""
ClientName string ClientName string
// URL standard format Redis URL. If this is set all other config options, InitAddress, Username, Password, ClientName, and SelectDB have no effect.
//
// Example: redis://<user>:<pass>@localhost:6379/<db>
// Optional. Default is ""
URL string
// SelectDB to be selected after connecting to the server. // SelectDB to be selected after connecting to the server.
// //
// Optional. Default is 0 // Optional. Default is 0
@@ -91,7 +97,7 @@ type Config struct {
// CacheTTL TTL // CacheTTL TTL
// //
// Optional. Default is time.Second // Optional. Default is time.Minute
CacheTTL time.Duration CacheTTL time.Duration
} }
@@ -100,6 +106,7 @@ var ConfigDefault = Config{
Username: "", Username: "",
Password: "", Password: "",
ClientName: "", ClientName: "",
URL: "",
SelectDB: 0, SelectDB: 0,
InitAddress: []string{"127.0.0.1:6379"}, InitAddress: []string{"127.0.0.1:6379"},
TLSConfig: nil, TLSConfig: nil,
@@ -113,7 +120,7 @@ var ConfigDefault = Config{
DisableCache: false, DisableCache: false,
AlwaysPipelining: true, AlwaysPipelining: true,
Reset: false, Reset: false,
CacheTTL: time.Second, CacheTTL: time.Minute,
} }
// Helper function to set default values // Helper function to set default values
@@ -138,6 +145,9 @@ func configDefault(config ...Config) Config {
if userConfig.ClientName != "" { if userConfig.ClientName != "" {
cfg.ClientName = userConfig.ClientName cfg.ClientName = userConfig.ClientName
} }
if userConfig.URL != "" {
cfg.URL = userConfig.URL
}
if userConfig.SelectDB != 0 { if userConfig.SelectDB != 0 {
cfg.SelectDB = userConfig.SelectDB cfg.SelectDB = userConfig.SelectDB
} }

View File

@@ -4,7 +4,7 @@ go 1.20
require ( require (
github.com/gofiber/utils/v2 v2.0.0-beta.3 github.com/gofiber/utils/v2 v2.0.0-beta.3
github.com/redis/rueidis v1.0.17 github.com/redis/rueidis v1.0.19
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )

View File

@@ -10,8 +10,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/redis/rueidis v1.0.17 h1:RyjiBVnPcKxjgiUpkyqbRw/OFJV5vX2bMM/oMPdz8JE= github.com/redis/rueidis v1.0.19 h1:s65oWtotzlIFN8eMPhyYwxlwLR1lUdhza2KtWprKYSo=
github.com/redis/rueidis v1.0.17/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo= github.com/redis/rueidis v1.0.19/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=

View File

@@ -24,6 +24,28 @@ func New(config ...Config) *Storage {
var db rueidis.Client var db rueidis.Client
cacheTTL = cfg.CacheTTL cacheTTL = cfg.CacheTTL
// Parse the URL and update config values accordingly
if cfg.URL != "" {
// This will panic if parsing URL fails
options := rueidis.MustParseURL(cfg.URL)
// Update the config values with the parsed URL values
cfg.InitAddress = options.InitAddress
cfg.Username = options.Username
cfg.Password = options.Password
cfg.SelectDB = options.SelectDB
// Update ClientName if returned
if cfg.ClientName == "" && options.ClientName != "" {
cfg.ClientName = options.ClientName
}
// Update TLSConfig if returned
if cfg.TLSConfig == nil && options.TLSConfig != nil {
cfg.TLSConfig = options.TLSConfig
}
}
// Update config values accordingly and start new Client // Update config values accordingly and start new Client
db, err := rueidis.NewClient(rueidis.ClientOption{ db, err := rueidis.NewClient(rueidis.ClientOption{
Username: cfg.Username, Username: cfg.Username,

View File

@@ -130,11 +130,10 @@ func Test_Rueidis_WithTLS(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
tlsCfg := &tls.Config{ tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12, MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256}, CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
PreferServerCipherSuites: true, InsecureSkipVerify: true,
InsecureSkipVerify: true, Certificates: []tls.Certificate{cer},
Certificates: []tls.Certificate{cer},
CipherSuites: []uint16{ CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
@@ -187,6 +186,28 @@ func Test_Rueidis_With_HostPort(t *testing.T) {
require.Nil(t, store.Close()) require.Nil(t, store.Close())
} }
func Test_Rueidis_With_URL(t *testing.T) {
store := New(Config{
URL: "redis://localhost:6379",
})
var (
key = "bruce"
val = []byte("wayne")
)
err := store.Set(key, val, 0)
require.NoError(t, err)
result, err := store.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
err = store.Delete(key)
require.NoError(t, err)
require.Nil(t, store.Close())
}
func Test_Rueidis_Cluster(t *testing.T) { func Test_Rueidis_Cluster(t *testing.T) {
store := New(Config{ store := New(Config{
InitAddress: []string{ InitAddress: []string{
@@ -215,3 +236,42 @@ func Test_Rueidis_Cluster(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.Nil(t, store.Close()) require.Nil(t, store.Close())
} }
func Benchmark_Rueidis_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Rueidis_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_Rueidis_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -3,29 +3,29 @@ module github.com/gofiber/storage/s3/v2
go 1.19 go 1.19
require ( require (
github.com/aws/aws-sdk-go-v2 v1.21.0 github.com/aws/aws-sdk-go-v2 v1.21.1
github.com/aws/aws-sdk-go-v2/config v1.18.38 github.com/aws/aws-sdk-go-v2/config v1.18.44
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 github.com/aws/aws-sdk-go-v2/credentials v1.13.42
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.82 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.89
github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5 github.com/aws/aws-sdk-go-v2/service/s3 v1.40.1
github.com/stretchr/testify v1.8.4 github.com/stretchr/testify v1.8.4
) )
require ( require (
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.5 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.37 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.5 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.15.1 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.23.1 // indirect
github.com/aws/smithy-go v1.14.2 // indirect github.com/aws/smithy-go v1.15.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect

View File

@@ -1,41 +1,41 @@
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= github.com/aws/aws-sdk-go-v2 v1.21.1 h1:wjHYshtPpYOZm+/mu3NhVgRRc0baM6LJZOmxPZ5Cwzs=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= github.com/aws/aws-sdk-go-v2 v1.21.1/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY=
github.com/aws/aws-sdk-go-v2/config v1.18.38 h1:CByQCELMgm2tM1lAehx3XNg0R/pfeXsYzqn0Aq2chJQ= github.com/aws/aws-sdk-go-v2/config v1.18.44 h1:U10NQ3OxiY0dGGozmVIENIDnCT0W432PWxk2VO8wGnY=
github.com/aws/aws-sdk-go-v2/config v1.18.38/go.mod h1:vNm9Hf5VgG2fSUWhT3zFrqN/RosGcabFMYgiSoxKFU8= github.com/aws/aws-sdk-go-v2/config v1.18.44/go.mod h1:pHxnQBldd0heEdJmolLBk78D1Bf69YnKLY3LOpFImlU=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 h1:ps0cPswZjpsOk6sLwG6fdXTzrYjCplgPEyG3OUbbdqE= github.com/aws/aws-sdk-go-v2/credentials v1.13.42 h1:KMkjpZqcMOwtRHChVlHdNxTUUAC6NC/b58mRZDIdcRg=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36/go.mod h1:sY2phUzxbygoyDtTXhqi7GjGjCQ1S5a5Rj8u3ksBxCg= github.com/aws/aws-sdk-go-v2/credentials v1.13.42/go.mod h1:7ltKclhvEB8305sBhrpls24HGxORl6qgnQqSJ314Uw8=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 h1:uDZJF1hu0EVT/4bogChk8DyjSF6fof6uL/0Y26Ma7Fg= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12 h1:3j5lrl9kVQrJ1BU4O0z7MQ8sa+UXdiLuo4j0V+odNI8=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.12/go.mod h1:JbFpcHDBdsex1zpIKuVRorZSQiZEyc3MykNCcjgz174=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.82 h1:gPh2fLhr1kwH2HXFhs1kCblIgHTabqE1N9gwYPhS/fw= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.89 h1:XPqSyw8SBSLMRrF9Oip6tQpivXWJLMn8sdRoAsUCQQA=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.82/go.mod h1:4pzmxw8ZmkpbvGqrmedWaXuDL2xcABews1VLYqe9Djk= github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.89/go.mod h1:OkYwM7gYm9HieL6emYtkg7Pb7Jd8FFM5Pl5uAZ1h2jo=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42 h1:817VqVe6wvwE46xXy6YF5RywvjOX6U2zRQQ6IbQFK0s=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas= github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.42/go.mod h1:oDfgXoBBmj+kXnqxDDnIDnC56QBosglKp8ftRCTxR+0=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36 h1:7ZApaXzWbo8slc+W5TynuUlB4z66g44h7uqa3/d/BsY=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.36/go.mod h1:rwr4WnmFi3RJO0M4dxbJtgi9BPLMpVBMX1nUte5ha9U=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 h1:GPUcE/Yq7Ur8YSUk6lVkoIMWnJNO0HT18GUzCWCgCI0= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44 h1:quOJOqlbSfeJTboXLjYXM1M9T52LBXqLoTPlmsKLpBo=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo= github.com/aws/aws-sdk-go-v2/internal/ini v1.3.44/go.mod h1:LNy+P1+1LiRcCsVYr/4zG5n8zWFL0xsvZkOybjbftm8=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw= github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.5 h1:8JG9ny0BqBDzmtIzbpaN+eke152ZNsYKApFJ/q29Hxo=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.5/go.mod h1:kEDHQApP/ukMO9natNftgUN3NaTsMxK6jb2jjpSMX7Y=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.37 h1:Mx1zJlYbiUQANWT40koevLvxawGFolmkaP4m+LuyG7M=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.37/go.mod h1:PjKIAMFthKPgG/B8bbRpo3F8jfr2q2L+w3u78jJ12a0=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36 h1:YXlm7LxwNlauqb2OrinWlcvtsflTzP8GaMvYfQBhoT4=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.36/go.mod h1:ou9ffqJ9hKOVZmjlC6kQ6oROAyG1M4yBKzR+9BKbDwk=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.5 h1:sAAz28SeA7YZl8Yaphjs9tlLsflhdniQPjf3X2cqr4s=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.5/go.mod h1:HC7gNz3VH0p+RvLKK+HqNQv/gHy+1Os3ko/F41s3+aw=
github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5 h1:A42xdtStObqy7NGvzZKpnyNXvoOmm+FENobZ0/ssHWk= github.com/aws/aws-sdk-go-v2/service/s3 v1.40.1 h1:FqIaVPbs2W8U3fszl2PCL1IDKeRdM7TssjWamL6b2mg=
github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM= github.com/aws/aws-sdk-go-v2/service/s3 v1.40.1/go.mod h1:X0e0NCAx4GjOrKro7s9QYy+YEIFhgCkt6gYKVKhZB5Y=
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 h1:2PylFCfKCEDv6PeSN09pC/VUiRd10wi1VfHG5FrW0/g= github.com/aws/aws-sdk-go-v2/service/sso v1.15.1 h1:ZN3bxw9OYC5D6umLw6f57rNJfGfhg1DIAAcKpzyUTOE=
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4= github.com/aws/aws-sdk-go-v2/service/sso v1.15.1/go.mod h1:PieckvBoT5HtyB9AsJRrYZFY2Z+EyfVM/9zG6gbV8DQ=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2 h1:fSCCJuT5i6ht8TqGdZc5Q5K9pz/atrf7qH4iK5C9XzU=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.2/go.mod h1:5eNtr+vNc5vVd92q7SJ+U/HszsIdhZBEyi9dkMRKsp8=
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 h1:CQBFElb0LS8RojMJlxRSo/HXipvTZW2S44Lt9Mk2aYQ= github.com/aws/aws-sdk-go-v2/service/sts v1.23.1 h1:ASNYk1ypWAxRhJjKS0jBnTUeDl7HROOpeSMu1xDA/I8=
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU= github.com/aws/aws-sdk-go-v2/service/sts v1.23.1/go.mod h1:2cnsAhVT3mqusovc2stUSUrSBGTcX9nh8Tu6xh//2eI=
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ= github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -19,8 +19,8 @@ func TestMain(m *testing.M) {
Endpoint: "http://127.0.0.1:9000/", Endpoint: "http://127.0.0.1:9000/",
Region: "us-east-1", Region: "us-east-1",
Credentials: Credentials{ Credentials: Credentials{
AccessKey: "minioadmin", AccessKey: "minio-user",
SecretAccessKey: "minioadmin", SecretAccessKey: "minio-password",
}, },
RequestTimeout: 3 * time.Second, RequestTimeout: 3 * time.Second,
}, },

View File

@@ -94,3 +94,42 @@ func Test_S3_Close(t *testing.T) {
func Test_S3_Conn(t *testing.T) { func Test_S3_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_S3_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_S3_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_S3_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}

View File

@@ -155,3 +155,42 @@ func Test_SQLite3_Close(t *testing.T) {
func Test_SQLite3_Conn(t *testing.T) { func Test_SQLite3_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil) require.True(t, testStore.Conn() != nil)
} }
func Benchmark_SQLite3_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_SQLite3_Get(b *testing.B) {
err := testStore.Set("john", []byte("doe"), 0)
require.NoError(b, err)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
_, err = testStore.Get("john")
}
require.NoError(b, err)
}
func Benchmark_SQLite3_SetAndDelete(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
var err error
for i := 0; i < b.N; i++ {
_ = testStore.Set("john", []byte("doe"), 0)
err = testStore.Delete("john")
}
require.NoError(b, err)
}