Compare commits

...

208 Commits

Author SHA1 Message Date
RW
5b6559e084 Merge pull request #1073 from gofiber/dependabot/go_modules/postgres/github.com/jackc/pgx/v5-5.5.0
Bump github.com/jackc/pgx/v5 from 5.4.3 to 5.5.0 in /postgres
2023-11-06 08:09:45 +01:00
dependabot[bot]
32a3153566 Bump github.com/jackc/pgx/v5 from 5.4.3 to 5.5.0 in /postgres
Bumps [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) from 5.4.3 to 5.5.0.
- [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jackc/pgx/compare/v5.4.3...v5.5.0)

---
updated-dependencies:
- dependency-name: github.com/jackc/pgx/v5
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-06 07:08:06 +00:00
RW
b6cf4057d0 Merge pull request #1053 from gofiber/memory-keys
Add support for Keys() to Memory Driver
2023-11-05 11:20:15 +01:00
RW
d5968313b3 Merge pull request #1052 from gofiber/redis-keys
Add support for Keys() to Redis Driver
2023-11-05 11:19:58 +01:00
RW
7638e00caa Update release-drafter-scylladb.yml 2023-11-03 12:11:19 +01:00
RW
25737614cf Merge pull request #1064 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.13.1
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.91 to 1.13.1 in /s3
2023-11-03 09:00:36 +01:00
RW
ffe12feafa Merge pull request #1065 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue-1.12.0
Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue from 1.10.43 to 1.12.0 in /dynamodb
2023-11-03 08:53:59 +01:00
dependabot[bot]
71c101a0fa 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.91 to 1.13.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/config/v1.13.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.11.91...config/v1.13.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:49:19 +00:00
RW
a00477e510 Merge pull request #1063 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2-1.22.1
Bump github.com/aws/aws-sdk-go-v2 from 1.21.2 to 1.22.1 in /s3
2023-11-03 08:48:45 +01:00
dependabot[bot]
c3b4b6e96c 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.43 to 1.12.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.12.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/dynamodb/attributevalue/v1.10.43...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:45:47 +00:00
RW
ae8f210306 Merge pull request #1067 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.22.0
Bump github.com/aws/aws-sdk-go-v2/config from 1.19.1 to 1.22.0 in /dynamodb
2023-11-03 08:45:10 +01:00
dependabot[bot]
139b0f4870 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.19.1 to 1.22.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.19.1...v1.22.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:44:44 +00:00
RW
8749583563 Merge pull request #1070 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/service/dynamodb-1.25.0
Bump github.com/aws/aws-sdk-go-v2/service/dynamodb from 1.23.0 to 1.25.0 in /dynamodb
2023-11-03 08:44:07 +01:00
dependabot[bot]
54fa28a305 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.23.0 to 1.25.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.25.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.23.0...service/s3/v1.25.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:40:49 +00:00
RW
ca5ced95d7 Merge pull request #1068 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/credentials-1.15.1
Bump github.com/aws/aws-sdk-go-v2/credentials from 1.13.43 to 1.15.1 in /dynamodb
2023-11-03 08:40:23 +01:00
dependabot[bot]
5c018e302d 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.43 to 1.15.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/config/v1.15.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.13.43...config/v1.15.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:34:09 +00:00
RW
716f5a4878 Merge pull request #1062 from gofiber/dependabot/github_actions/actions/checkout-4
Bump actions/checkout from 3 to 4
2023-11-03 08:33:03 +01:00
RW
464c871e79 Merge pull request #1061 from gofiber/dependabot/go_modules/rueidis/github.com/redis/rueidis-1.0.21
Bump github.com/redis/rueidis from 1.0.20 to 1.0.21 in /rueidis
2023-11-03 08:31:34 +01:00
dependabot[bot]
56a8596fe9 Bump github.com/aws/aws-sdk-go-v2 from 1.21.2 to 1.22.1 in /s3
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.21.2 to 1.22.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.21.2...v1.22.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:30:22 +00:00
dependabot[bot]
8ba0110b24 Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-03 07:29:30 +00:00
dependabot[bot]
75ce232c9c Bump github.com/redis/rueidis from 1.0.20 to 1.0.21 in /rueidis
Bumps [github.com/redis/rueidis](https://github.com/redis/rueidis) from 1.0.20 to 1.0.21.
- [Release notes](https://github.com/redis/rueidis/releases)
- [Commits](https://github.com/redis/rueidis/compare/v1.0.20...v1.0.21)

---
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-11-03 07:29:22 +00:00
RW
602deafe0a Merge pull request #1047 from Chris-Basson-Grundling/main
New Storage Driver: ScyllaDb
2023-11-03 08:28:44 +01:00
RW
07fab67bb1 Merge pull request #1060 from gofiber/dependabot/go_modules/arangodb/github.com/arangodb/go-driver-1.6.1
Bump github.com/arangodb/go-driver from 1.6.0 to 1.6.1 in /arangodb
2023-11-01 08:38:23 +01:00
dependabot[bot]
6b21d0af38 Bump github.com/arangodb/go-driver from 1.6.0 to 1.6.1 in /arangodb
Bumps [github.com/arangodb/go-driver](https://github.com/arangodb/go-driver) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/arangodb/go-driver/releases)
- [Changelog](https://github.com/arangodb/go-driver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arangodb/go-driver/compare/v1.6.0...v1.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-01 07:37:03 +00:00
RW
9c99c74835 Merge pull request #1059 from gofiber/dependabot/go_modules/redis/github.com/redis/go-redis/v9-9.3.0
Bump github.com/redis/go-redis/v9 from 9.2.1 to 9.3.0 in /redis
2023-11-01 08:05:52 +01:00
dependabot[bot]
05c797f133 Bump github.com/redis/go-redis/v9 from 9.2.1 to 9.3.0 in /redis
Bumps [github.com/redis/go-redis/v9](https://github.com/redis/go-redis) from 9.2.1 to 9.3.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.2.1...v9.3.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-11-01 07:03:58 +00:00
RW
894f364785 Merge pull request #1057 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/config-1.19.1
Bump github.com/aws/aws-sdk-go-v2/config from 1.19.0 to 1.19.1 in /s3
2023-10-30 08:57:34 +01:00
dependabot[bot]
b607828b9d Bump github.com/aws/aws-sdk-go-v2/config from 1.19.0 to 1.19.1 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.19.0 to 1.19.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.19.0...v1.19.1)

---
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-30 07:56:17 +00:00
RW
32c87e29aa Merge pull request #1056 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.19.1
Bump github.com/aws/aws-sdk-go-v2/config from 1.19.0 to 1.19.1 in /dynamodb
2023-10-30 08:33:30 +01:00
dependabot[bot]
ee8aa518e5 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.19.0 to 1.19.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.19.0...v1.19.1)

---
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-30 07:32:12 +00:00
RW
aebce6444e Merge pull request #1055 from gofiber/dependabot/go_modules/coherence/github.com/oracle/coherence-go-client-1.0.3
Bump github.com/oracle/coherence-go-client from 1.0.2 to 1.0.3 in /coherence
2023-10-30 08:27:17 +01:00
RW
3ee7537cc8 Merge branch 'main' into dependabot/go_modules/coherence/github.com/oracle/coherence-go-client-1.0.3 2023-10-30 08:21:20 +01:00
RW
7091428842 Merge pull request #1054 from gofiber/dependabot/go_modules/etcd/go.etcd.io/etcd/client/v3-3.5.10
Bump go.etcd.io/etcd/client/v3 from 3.5.9 to 3.5.10 in /etcd
2023-10-30 08:14:41 +01:00
dependabot[bot]
6d79796597 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.2 to 1.0.3.
- [Release notes](https://github.com/oracle/coherence-go-client/releases)
- [Commits](https://github.com/oracle/coherence-go-client/compare/v1.0.2...v1.0.3)

---
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-30 07:13:51 +00:00
dependabot[bot]
fbf0bbef5c Bump go.etcd.io/etcd/client/v3 from 3.5.9 to 3.5.10 in /etcd
Bumps [go.etcd.io/etcd/client/v3](https://github.com/etcd-io/etcd) from 3.5.9 to 3.5.10.
- [Release notes](https://github.com/etcd-io/etcd/releases)
- [Commits](https://github.com/etcd-io/etcd/compare/v3.5.9...v3.5.10)

---
updated-dependencies:
- dependency-name: go.etcd.io/etcd/client/v3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-30 07:13:09 +00:00
Juan Calderon-Perez
50bea20332 Update empty check, value should be Nil 2023-10-29 21:04:03 -04:00
Juan Calderon-Perez
22f4401661 Add fix to verify Keys are expired during Keys() call. 2023-10-29 21:00:43 -04:00
Juan Calderon-Perez
0e92f332da Fix check for no keys 2023-10-29 20:48:39 -04:00
Juan Calderon-Perez
7921dc7e37 Add support for Keys() to Memory Driver 2023-10-29 20:42:46 -04:00
Juan Calderon-Perez
0b9f4aebc8 Create a testStore per test 2023-10-29 20:24:11 -04:00
Juan Calderon-Perez
2143a67c8d Add sleep after creating Redis Cluster 2023-10-29 20:06:45 -04:00
Juan Calderon-Perez
3b5d81397c Add support for Keys() to Redis Driver 2023-10-29 20:01:23 -04:00
Chris Grundling
af89d59508 Merge branch 'main' into main 2023-10-27 11:42:14 +02:00
chris.grundling
74f7e9b4c9 Updated checks for empty string, updated error messages 2023-10-27 11:29:35 +02:00
RW
ddac78a1dd Merge pull request #1050 from gofiber/dependabot/go_modules/bbolt/go.etcd.io/bbolt-1.3.8
Bump go.etcd.io/bbolt from 1.3.7 to 1.3.8 in /bbolt
2023-10-27 09:13:23 +02:00
dependabot[bot]
0591ba2589 Bump go.etcd.io/bbolt from 1.3.7 to 1.3.8 in /bbolt
Bumps [go.etcd.io/bbolt](https://github.com/etcd-io/bbolt) from 1.3.7 to 1.3.8.
- [Release notes](https://github.com/etcd-io/bbolt/releases)
- [Commits](https://github.com/etcd-io/bbolt/compare/v1.3.7...v1.3.8)

---
updated-dependencies:
- dependency-name: go.etcd.io/bbolt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-27 07:12:17 +00:00
chris.grundling
f602540e53 Updated set to use default scylladb ttl, updated tests 2023-10-26 18:03:26 +02:00
chris.grundling
05194dded6 Updated get expiration compare 2023-10-26 15:43:07 +02:00
chris.grundling
957cba4743 Merge branch 'main' of github.com:Chris-Basson-Grundling/ScyllaDB 2023-10-26 15:30:44 +02:00
chris.grundling
2a41f5c60f Updated replace in go mod, updated Expiration test 2023-10-26 15:26:18 +02:00
Juan Calderon-Perez
f6eab90d0b Merge branch 'main' into main 2023-10-25 22:07:01 -04:00
RW
f415c93d8b Merge pull request #1049 from gofiber/dependabot/go_modules/etcd/google.golang.org/grpc-1.57.1
Bump google.golang.org/grpc from 1.57.0 to 1.57.1 in /etcd
2023-10-25 23:38:37 +02:00
dependabot[bot]
cf8e97a71b Bump google.golang.org/grpc from 1.57.0 to 1.57.1 in /etcd
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.57.0 to 1.57.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.57.0...v1.57.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 21:37:18 +00:00
RW
ac0c464e5b Merge pull request #1048 from gofiber/dependabot/go_modules/coherence/google.golang.org/grpc-1.57.1
Bump google.golang.org/grpc from 1.57.0 to 1.57.1 in /coherence
2023-10-25 23:28:57 +02:00
dependabot[bot]
4457e96f9b Bump google.golang.org/grpc from 1.57.0 to 1.57.1 in /coherence
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.57.0 to 1.57.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.57.0...v1.57.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 21:26:46 +00:00
chris.grundling
ddb765f758 Updated Benchmarks to align with all. 2023-10-25 20:48:50 +02:00
chris.grundling
cd80e17ce8 Updated README 2023-10-25 20:34:43 +02:00
chris.grundling
edb77f865f Added TLS support, Updated README, Added Benchmark tests 2023-10-25 20:29:31 +02:00
chris.grundling
a2e3e4fced Updated benchmark 2023-10-25 06:41:06 +02:00
chris.grundling
c3431ff1af Updated main README, updated benchmark 2023-10-25 06:34:06 +02:00
chris.grundling
62ebac1d4f Updated test-scylladb, README and tests to use testify for Asserts 2023-10-25 06:06:04 +02:00
chris.grundling
3f4bff91cd ScyllaDb readme cleanup, added set port from config. 2023-10-24 23:46:44 +02:00
Chris Grundling
fc00b7501c Merge branch 'gofiber:main' into main 2023-10-24 23:32:57 +02:00
chris.grundling
2ba3adef60 Updated Scylladb 2023-10-24 23:21:12 +02:00
RW
fba0b33855 Merge pull request #1046 from gofiber/dependabot/github_actions/actions/setup-node-4
Bump actions/setup-node from 3 to 4
2023-10-24 22:51:54 +02:00
chris.grundling
f33ba7493c Updated test-scylladb 2023-10-24 22:03:17 +02:00
chris.grundling
1a9f3e144e Updated test-scylladb 2023-10-24 21:37:52 +02:00
chris.grundling
0732a00253 Updated tests-scylladb and readme 2023-10-24 21:34:03 +02:00
chris.grundling
2f5ae09380 New Storage Driver: ScyllaDb 2023-10-24 21:16:48 +02:00
dependabot[bot]
1d0a80e362 Bump actions/setup-node from 3 to 4
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 3 to 4.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-24 07:54:54 +00:00
RW
7e70887486 Merge pull request #1045 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.91
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.90 to 1.11.91 in /s3
2023-10-23 09:57:48 +02:00
dependabot[bot]
99e619ca77 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.90 to 1.11.91.
- [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.90...feature/s3/manager/v1.11.91)

---
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-23 07:57:14 +00:00
RW
875a5f3081 Merge pull request #1044 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/config-1.19.0
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.45 to 1.19.0 in /s3
2023-10-23 09:56:36 +02:00
dependabot[bot]
23cac43c89 Bump github.com/aws/aws-sdk-go-v2/config from 1.18.45 to 1.19.0 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.45 to 1.19.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.45...v1.19.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 07:55:13 +00:00
RW
6e44e3c729 Merge pull request #1043 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.19.0
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.45 to 1.19.0 in /dynamodb
2023-10-23 09:48:23 +02:00
dependabot[bot]
8a2be493cb 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.45 to 1.19.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/v1.19.0/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.45...v1.19.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-23 07:46:42 +00:00
RW
b5a1f8aec4 Merge pull request #1041 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue-1.10.43
Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue from 1.10.42 to 1.10.43 in /dynamodb
2023-10-23 09:46:33 +02:00
dependabot[bot]
d7b4cc8c6c 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.42 to 1.10.43.
- [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.42...feature/dynamodb/attributevalue/v1.10.43)

---
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-23 07:45:10 +00:00
RW
318be60fa9 Merge pull request #1040 from gofiber/dependabot/go_modules/couchbase/github.com/couchbase/gocb/v2-2.6.5
Bump github.com/couchbase/gocb/v2 from 2.6.4 to 2.6.5 in /couchbase
2023-10-19 09:58:54 +02:00
dependabot[bot]
56cbe84675 Bump github.com/couchbase/gocb/v2 from 2.6.4 to 2.6.5 in /couchbase
Bumps [github.com/couchbase/gocb/v2](https://github.com/couchbase/gocb) from 2.6.4 to 2.6.5.
- [Commits](https://github.com/couchbase/gocb/compare/v2.6.4...v2.6.5)

---
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-10-19 07:56:38 +00:00
RW
91db8c2e5d Merge pull request #1039 from gofiber/dependabot/go_modules/rueidis/github.com/redis/rueidis-1.0.20
Bump github.com/redis/rueidis from 1.0.19 to 1.0.20 in /rueidis
2023-10-18 10:07:38 +02:00
dependabot[bot]
e02ca45688 Bump github.com/redis/rueidis from 1.0.19 to 1.0.20 in /rueidis
Bumps [github.com/redis/rueidis](https://github.com/redis/rueidis) from 1.0.19 to 1.0.20.
- [Release notes](https://github.com/redis/rueidis/releases)
- [Commits](https://github.com/redis/rueidis/compare/v1.0.19...v1.0.20)

---
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-10-18 08:05:42 +00:00
RW
f864d67dbc Merge pull request #1038 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/feature/s3/manager-1.11.90
Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager from 1.11.89 to 1.11.90 in /s3
2023-10-16 10:07:39 +02:00
RW
863767bc9f Merge pull request #1031 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue-1.10.42
Bump github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue from 1.10.41 to 1.10.42 in /dynamodb
2023-10-16 10:06:06 +02:00
dependabot[bot]
dca7968160 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.89 to 1.11.90.
- [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.89...feature/s3/manager/v1.11.90)

---
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-16 08:03:36 +00:00
RW
2fd96adf12 Merge pull request #1036 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/service/s3-1.40.2
Bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.40.1 to 1.40.2 in /s3
2023-10-16 10:02:03 +02:00
dependabot[bot]
ec64c27225 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.41 to 1.10.42.
- [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.41...feature/dynamodb/attributevalue/v1.10.42)

---
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-16 07:59:04 +00:00
dependabot[bot]
0dd355a984 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.1 to 1.40.2.
- [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.1...service/s3/v1.40.2)

---
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-16 07:58:55 +00:00
RW
495f9835f2 Merge pull request #1032 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/config-1.18.45
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.44 to 1.18.45 in /dynamodb
2023-10-16 09:58:17 +02:00
dependabot[bot]
eb70c9cef1 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.44 to 1.18.45.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.44...config/v1.18.45)

---
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-16 07:56:57 +00:00
RW
93c051e1a7 Merge pull request #1034 from gofiber/dependabot/go_modules/s3/github.com/aws/aws-sdk-go-v2/config-1.18.45
Bump github.com/aws/aws-sdk-go-v2/config from 1.18.44 to 1.18.45 in /s3
2023-10-16 09:56:21 +02:00
dependabot[bot]
e86e48703c Bump github.com/aws/aws-sdk-go-v2/config from 1.18.44 to 1.18.45 in /s3
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.18.44 to 1.18.45.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.18.44...config/v1.18.45)

---
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-16 07:54:54 +00:00
RW
145a7fe255 Merge pull request #1033 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2-1.21.2
Bump github.com/aws/aws-sdk-go-v2 from 1.21.1 to 1.21.2 in /dynamodb
2023-10-16 09:17:37 +02:00
dependabot[bot]
ba555c5a34 Bump github.com/aws/aws-sdk-go-v2 from 1.21.1 to 1.21.2 in /dynamodb
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.21.1 to 1.21.2.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.21.1...v1.21.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 07:15:55 +00:00
RW
b2f5e6ceb7 Merge pull request #1030 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/credentials-1.13.43
Bump github.com/aws/aws-sdk-go-v2/credentials from 1.13.42 to 1.13.43 in /dynamodb
2023-10-16 09:15:01 +02:00
dependabot[bot]
5eb19f802b 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.42 to 1.13.43.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.13.42...credentials/v1.13.43)

---
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-10-16 07:14:21 +00:00
RW
23131b83cc Merge pull request #1029 from gofiber/dependabot/go_modules/dynamodb/github.com/aws/aws-sdk-go-v2/service/dynamodb-1.22.2
Bump github.com/aws/aws-sdk-go-v2/service/dynamodb from 1.22.1 to 1.22.2 in /dynamodb
2023-10-16 09:13:45 +02:00
dependabot[bot]
2ec67be1e9 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.1 to 1.22.2.
- [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.2/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/eks/v1.22.1...service/eks/v1.22.2)

---
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-16 07:12:32 +00:00
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
RW
629c25208d Merge pull request #978 from iredmail/main
s3: New methods: CreateBucket, DeleteBucket, SetWithChecksum.
2023-09-07 09:19:10 +02:00
Zhang Huangbin
bf6aa0132c Typo 2023-09-07 10:17:38 +08:00
Zhang Huangbin
4dfe51aa01 Fix incorrect checksum (base64 encoded).
Create bucket in unittest instead of GitHub Actions.
2023-09-06 08:45:46 +08:00
Zhang Huangbin
e735c69371 S3: Add RequestTimeout in unittest. 2023-09-05 17:34:55 +08:00
Zhang Huangbin
ae41d2f5c1 Init testStore in init(). 2023-09-05 17:17:31 +08:00
Zhang Huangbin
dc00bab703 Init testStore in first load test file. 2023-09-05 17:07:43 +08:00
Zhang Huangbin
d06fbfc7f3 Fix incorrect sum. 2023-09-05 16:47:36 +08:00
Zhang Huangbin
e09d83368c Fix incorrect sum. 2023-09-05 16:39:19 +08:00
Zhang Huangbin
1ddcc7b3fc Add example in README.
Use `map[string][]byte` instead of `map[string]string`.
2023-09-05 16:27:09 +08:00
RW
db6c457d5c Merge branch 'main' into main 2023-09-05 10:21:09 +02:00
Zhang Huangbin
26c755f312 New: SetWithChecksum. 2023-09-05 16:01:32 +08:00
94 changed files with 2976 additions and 898 deletions

View File

@@ -140,3 +140,9 @@ updates:
- "🤖 Dependencies"
schedule:
interval: "daily"
- package-ecosystem: "gomod"
directory: "/scylladb/" # Location of package manifests
labels:
- "🤖 Dependencies"
schedule:
interval: "daily"

43
.github/release-drafter-scylladb.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
name-template: 'ScyllaDb - v$RESOLVED_VERSION'
tag-template: 'scylladb/v$RESOLVED_VERSION'
tag-prefix: scylladb/v
include-paths:
- scylladb
categories:
- title: '🚀 New'
labels:
- '✏️ Feature'
- title: '🧹 Updates'
labels:
- '🧹 Updates'
- '🤖 Dependencies'
- title: '🐛 Fixes'
labels:
- '☢️ Bug'
- title: '📚 Documentation'
labels:
- '📒 Documentation'
change-template: '- $TITLE (#$NUMBER)'
change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks.
version-resolver:
major:
labels:
- 'major'
minor:
labels:
- 'minor'
- '✏️ Feature'
patch:
labels:
- 'patch'
- '📒 Documentation'
- '☢️ Bug'
- '🤖 Dependencies'
- '🧹 Updates'
default: patch
template: |
$CHANGES
**Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...scylladb/v$RESOLVED_VERSION
Thank you $CONTRIBUTORS for making this update possible.

View File

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

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

@@ -0,0 +1,175 @@
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: Install ScyllaDb
run: |
docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1
sleep 15 # Wait for ScyllaDb to initialize
- 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

@@ -124,3 +124,7 @@ jobs:
working-directory: ./rueidis
run: gosec ./...
# -----
- name: Run Gosec (scylladb)
working-directory: ./scylladb
run: gosec ./...
# -----

View File

@@ -0,0 +1,19 @@
name: Release Drafter ScyllaDb
on:
push:
# branches to consider in the event; optional, defaults to all
branches:
- master
- main
paths:
- 'scylladb/**'
jobs:
draft_release_scylladb:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: release-drafter/release-drafter@v5
with:
config-name: release-drafter-scylladb.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -23,7 +23,7 @@ jobs:
fetch-depth: 2
- name: Setup Node.js environment
uses: actions/setup-node@v3
uses: actions/setup-node@v4
with:
node-version: '18'

View File

@@ -25,23 +25,38 @@ jobs:
- name: Fetch Repository
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
uses: shogo82148/actions-setup-redis@v1
with:
redis-version: ${{ matrix.redis }}
auto-start: 'false'
redis-port: '6379'
redis-tls-port: '6380'
- name: Run Redis
run: |
redis-server --tls-port 6380 --port 6379 \
--tls-cert-file ./redis/tests/tls/redis.crt \
--tls-key-file ./redis/tests/tls/redis.key \
--tls-ca-cert-file ./redis/tests/tls/ca.crt&
--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 &
- 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
uses: vishnudxb/redis-cluster@1.0.8
uses: vishnudxb/redis-cluster@1.0.9
with:
master1-port: 7000
master2-port: 7001
@@ -49,6 +64,10 @@ jobs:
slave1-port: 7003
slave2-port: 7004
slave3-port: 7005
sleep-duration: 10
- name: Wait for Redis to Start
run: sleep 15
- name: Install Go
uses: actions/setup-go@v4

View File

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

View File

@@ -20,14 +20,7 @@ jobs:
- 1.21.x
steps:
- name: Install MinIO
run: |
docker run -d -p 9000:9000 --name minio minio/minio server /data
export AWS_ACCESS_KEY_ID=minioadmin
export AWS_SECRET_ACCESS_KEY=minioadmin
export AWS_EC2_METADATA_DISABLED=true
aws --endpoint-url http://127.0.0.1:9000/ s3 mb s3://testbucket
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
uses: actions/checkout@v4
- name: Install Go

39
.github/workflows/test-scylladb.yml vendored Normal file
View File

@@ -0,0 +1,39 @@
on:
push:
branches:
- master
- main
paths:
- 'scylladb/**'
pull_request:
paths:
- 'scylladb/**'
name: "Tests ScyllaDb"
jobs:
Tests:
runs-on: ubuntu-latest
strategy:
matrix:
go-version:
- 1.20.x
- 1.21.x
steps:
- name: Fetch Repository
uses: actions/checkout@v4
- name: Run ScyllaDb
run: |
docker run --name scylladb -p 9042:9042 -p 19042:19042 -p 9160:9160 -p 10000:10000 -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9180:9180 -d scylladb/scylla:latest --broadcast-address 127.0.0.1 --listen-address 0.0.0.0 --broadcast-rpc-address 127.0.0.1
sleep 30 # Wait for ScyllaDb to initialize
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: '${{ matrix.go-version }}'
- name: Run Test
run: cd ./scylladb && go test ./... -v -race

View File

@@ -69,5 +69,6 @@ type Storage interface {
- [Redis](./redis/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Redis%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-redis.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
- [Rueidis](./rueidis/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+rueidis%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-rueidis.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
- [S3](./s3/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+S3%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-s3.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
- [ScyllaDB](./scylladb/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+scylladb%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-scylladb.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>
- [SQLite3](./sqlite3/README.md) <a href="https://github.com/gofiber/storage/actions?query=workflow%3A%22Tests+Sqlite3%22"> <img src="https://img.shields.io/github/actions/workflow/status/gofiber/storage/test-sqlite3.yml?branch=main&label=%F0%9F%A7%AA%20&style=flat&color=75C46B" /> </a>

View File

@@ -11,7 +11,7 @@ var testStore = New(Config{
Reset: true,
})
func Test_ARANGODB_Set(t *testing.T) {
func Test_ArangoDB_Set(t *testing.T) {
var (
key = "john"
val = []byte("doe")
@@ -21,7 +21,7 @@ func Test_ARANGODB_Set(t *testing.T) {
require.NoError(t, err)
}
func Test_ARANGODB_Upsert(t *testing.T) {
func Test_ArangoDB_Upsert(t *testing.T) {
var (
key = "john"
val = []byte("doe")
@@ -34,7 +34,7 @@ func Test_ARANGODB_Upsert(t *testing.T) {
require.NoError(t, err)
}
func Test_ARANGODB_Get(t *testing.T) {
func Test_ArangoDB_Get(t *testing.T) {
var (
key = "john"
val = []byte("doe")
@@ -48,7 +48,7 @@ func Test_ARANGODB_Get(t *testing.T) {
require.Equal(t, val, result)
}
func Test_ARANGODB_Set_Expiration(t *testing.T) {
func Test_ArangoDB_Set_Expiration(t *testing.T) {
var (
key = "john"
val = []byte("doe")
@@ -61,7 +61,7 @@ func Test_ARANGODB_Set_Expiration(t *testing.T) {
time.Sleep(1100 * time.Millisecond)
}
func Test_ARANGODB_Get_Expired(t *testing.T) {
func Test_ArangoDB_Get_Expired(t *testing.T) {
key := "john"
result, err := testStore.Get(key)
@@ -69,13 +69,13 @@ func Test_ARANGODB_Get_Expired(t *testing.T) {
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")
require.NoError(t, err)
require.Zero(t, len(result))
}
func Test_ARANGODB_Delete(t *testing.T) {
func Test_ArangoDB_Delete(t *testing.T) {
var (
key = "john"
val = []byte("doe")
@@ -92,7 +92,7 @@ func Test_ARANGODB_Delete(t *testing.T) {
require.Zero(t, len(result))
}
func Test_ARANGODB_Reset(t *testing.T) {
func Test_ArangoDB_Reset(t *testing.T) {
val := []byte("doe")
err := testStore.Set("john1", val, 0)
@@ -113,7 +113,7 @@ func Test_ARANGODB_Reset(t *testing.T) {
require.Zero(t, len(result))
}
func Test_ARANGODB_Non_UTF8(t *testing.T) {
func Test_ArangoDB_Non_UTF8(t *testing.T) {
val := []byte("0xF5")
err := testStore.Set("0xF6", val, 0)
@@ -124,10 +124,49 @@ func Test_ARANGODB_Non_UTF8(t *testing.T) {
require.Equal(t, val, result)
}
func Test_ARANGODB_Close(t *testing.T) {
func Test_ArangoDB_Close(t *testing.T) {
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)
}
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

@@ -3,7 +3,7 @@ module github.com/gofiber/storage/arangodb/v2
go 1.19
require (
github.com/arangodb/go-driver v1.6.0
github.com/arangodb/go-driver v1.6.1
github.com/gofiber/utils/v2 v2.0.0-beta.3
github.com/stretchr/testify v1.8.4
)

View File

@@ -1,5 +1,5 @@
github.com/arangodb/go-driver v1.6.0 h1:NFWj/idqXZxhFVueihMSI2R9NotNIsgvNfM/xmpekb4=
github.com/arangodb/go-driver v1.6.0/go.mod h1:HQmdGkvNMVBTE3SIPSQ8T/ZddC6iwNsfMR+dDJQxIsI=
github.com/arangodb/go-driver v1.6.1 h1:bnhrpbA4U1NU13JOWs5sWWYMtQwdjKT0+jkl8dSndyY=
github.com/arangodb/go-driver v1.6.1/go.mod h1:ywucwwi34GBxxXFWw/ym+7/66//L4K9abxk/sFJro2k=
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e h1:Xg+hGrY2LcQBbxd0ZFdbGSyRKTYMZCfBbw/pMJFOk1g=
github.com/arangodb/go-velocypack v0.0.0-20200318135517-5af53c29c67e/go.mod h1:mq7Shfa/CaixoDxiyAAc5jZ6CVBAyPaNQCGS7mkj4Ho=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

View File

@@ -1,14 +1,17 @@
package azureblob
import (
"os"
"testing"
"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/bloberror"
"github.com/stretchr/testify/require"
)
func newStore() *Storage {
return New(Config{
var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(Config{
Account: "devstoreaccount1",
Container: "test",
Endpoint: "http://127.0.0.1:10000/devstoreaccount1",
@@ -16,7 +19,13 @@ func newStore() *Storage {
Account: "devstoreaccount1",
Key: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
},
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_AzureBlob_Get(t *testing.T) {
@@ -24,7 +33,6 @@ func Test_AzureBlob_Get(t *testing.T) {
key = "john"
val = []byte("doe")
)
testStore := newStore()
err := testStore.Set(key, val, 0)
require.NoError(t, err)
@@ -40,7 +48,6 @@ func Test_AzureBlob_Set(t *testing.T) {
val = []byte("doe")
)
testStore := newStore()
err := testStore.Set(key, val, 0)
require.NoError(t, err)
}
@@ -50,7 +57,6 @@ func Test_AzureBlob_Delete(t *testing.T) {
key = "john"
val = []byte("doe")
)
testStore := newStore()
err := testStore.Set(key, val, 0)
require.NoError(t, err)
@@ -73,7 +79,6 @@ func Test_AzureBlob_Override(t *testing.T) {
key = "john"
val = []byte("doe")
)
testStore := newStore()
err := testStore.Set(key, val, 0)
require.NoError(t, err)
@@ -83,7 +88,6 @@ func Test_AzureBlob_Override(t *testing.T) {
}
func Test_AzureBlob_Get_NotExist(t *testing.T) {
testStore := newStore()
result, err := testStore.Get("notexist")
if err != nil {
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) {
val := []byte("doe")
testStore := newStore()
err := testStore.Set("john1", val, 0)
require.NoError(t, err)
@@ -127,11 +130,48 @@ func Test_AzureBlob_Reset(t *testing.T) {
}
func Test_S3_Conn(t *testing.T) {
testStore := newStore()
require.True(t, testStore.Conn() != nil)
}
func Test_AzureBlob_Close(t *testing.T) {
testStore := newStore()
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
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
)
@@ -12,7 +12,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/text v0.13.0 // 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/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/storage/azblob v1.1.0 h1:nVocQV40OQne5613EeLayJiRAJuKlBGy+m22qWG+WRg=
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 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY=
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/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=
@@ -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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
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/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
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=
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/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=

View File

@@ -7,7 +7,9 @@ import (
"github.com/stretchr/testify/require"
)
var testStore = New()
var testStore = New(Config{
Reset: true,
})
func Test_Badger_Set(t *testing.T) {
var (
@@ -118,3 +120,42 @@ func Test_Badger_Close(t *testing.T) {
func Test_Badger_Conn(t *testing.T) {
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/pmezard/go-difflib v1.0.0 // indirect
go.opencensus.io v0.24.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
google.golang.org/protobuf v1.31.0 // 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-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.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
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/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=
@@ -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-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.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
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.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
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=

View File

@@ -1,12 +1,25 @@
package bbolt
import (
"os"
"testing"
"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) {
var (
@@ -96,3 +109,42 @@ func Test_Bbolt_Close(t *testing.T) {
func Test_Bbolt_Conn(t *testing.T) {
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

@@ -5,7 +5,7 @@ go 1.19
require (
github.com/gofiber/utils/v2 v2.0.0-beta.3
github.com/stretchr/testify v1.8.4
go.etcd.io/bbolt v1.3.7
go.etcd.io/bbolt v1.3.8
)
require (

View File

@@ -8,8 +8,8 @@ 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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ=
go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=

View File

@@ -1,6 +1,7 @@
package bbolt
import (
"errors"
"github.com/gofiber/utils/v2"
"go.etcd.io/bbolt"
)
@@ -15,6 +16,11 @@ func createBucket(cfg Config, conn *bbolt.DB) error {
func removeBucket(cfg Config, conn *bbolt.DB) 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 (
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.
@@ -42,30 +43,20 @@ type Config struct {
// DefaultConfig defines default options.
var DefaultConfig = Config{
Address: "localhost:1408",
Timeout: time.Duration(30) * time.Millisecond,
Address: defaultAddress,
Timeout: defaultTimeout,
ScopeName: defaultScopeName,
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) {
var (
scopeName = defaultScopeName
cfg = DefaultConfig
)
cfg := setupConfig(config...)
if len(config) == 1 {
cfg = config[0]
}
options := make([]func(session *coh.SessionOptions), 0)
// apply any config values
if cfg.Address != "" {
options = append(options, coh.WithAddress(cfg.Address))
} else {
cfg.Address = DefaultConfig.Address
}
// apply any config values as Coherence options
options = append(options, coh.WithAddress(cfg.Address))
if cfg.TLSConfig != nil {
options = append(options, coh.WithTLSConfig(cfg.TLSConfig))
@@ -73,13 +64,7 @@ func New(config ...Config) (*Storage, error) {
options = append(options, coh.WithPlainText())
}
if cfg.Timeout != defaultTimeout {
options = append(options, coh.WithReadyTimeout(cfg.Timeout))
}
if cfg.ScopeName != defaultScopeName {
scopeName = cfg.ScopeName
}
options = append(options, coh.WithRequestTimeout(cfg.Timeout))
// create the Coherence session
session, err := coh.NewSession(context.Background(), options...)
@@ -87,7 +72,7 @@ func New(config ...Config) (*Storage, error) {
return nil, err
}
store, err := newCoherenceStorage(session, scopeName)
store, err := newCoherenceStorage(session, cfg.ScopeName)
if err != nil {
return nil, err
}
@@ -100,6 +85,29 @@ func New(config ...Config) (*Storage, error) {
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].
func newCoherenceStorage(session *coh.Session, cacheName string) (*Storage, error) {
nc, err := coh.GetNamedCache[string, []byte](session, "fiber$"+cacheName)

View File

@@ -4,7 +4,8 @@ package coherence
* Copyright © 2023, Oracle and/or its affiliates.
*/
import (
"github.com/gofiber/utils"
"github.com/stretchr/testify/require"
"os"
"testing"
"time"
)
@@ -17,152 +18,145 @@ var (
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) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, 0)
require.NoError(t, err)
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value1, val)
require.NoError(t, err)
require.Equal(t, value1, val)
utils.AssertEqual(t, true, testStore.Conn() != nil)
utils.AssertEqual(t, testStore.Close(), nil)
require.NotNil(t, testStore.Conn())
}
func Test_Coherence_Set_Override(t *testing.T) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, 0)
require.NoError(t, err)
err = testStore.Set(key1, value2, 0)
utils.AssertEqual(t, err, nil)
require.NoError(t, err)
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value2, val)
utils.AssertEqual(t, testStore.Close(), nil)
require.NoError(t, err)
require.Equal(t, value2, val)
}
func Test_Coherence_Set_With_Reset(t *testing.T) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, 0)
require.NoError(t, err)
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value1, val)
require.NoError(t, err)
require.Equal(t, value1, val)
// get a new store but reset it, so the subsequent Get will return nil
testStore, err = newTestStore(t, Config{Reset: true})
utils.AssertEqual(t, err, nil)
testStore2, err := newTestStore(t, Config{Reset: true})
require.NoError(t, err)
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
val, err = testStore2.Get(key1)
require.NoError(t, err)
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) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
// set with an expiry of 5 seconds
err = testStore.Set(key1, value1, time.Duration(5)*time.Second)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, time.Duration(5)*time.Second)
require.NoError(t, err)
time.Sleep(time.Duration(6) * time.Second)
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
require.NoError(t, err)
require.True(t, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
}
func Test_Coherence_Get_Missing(t *testing.T) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
val, err = testStore.Get(missingKey)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
val, err := testStore.Get(missingKey)
require.NoError(t, err)
require.True(t, len(val) == 0)
}
func Test_Coherence_Reset(t *testing.T) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, 0)
require.NoError(t, err)
err = testStore.Set(key2, value2, 0)
utils.AssertEqual(t, err, nil)
require.NoError(t, err)
// check the keys exist
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value1, val)
require.NoError(t, err)
require.Equal(t, value1, val)
val, err = testStore.Get(key2)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value2, val)
require.NoError(t, err)
require.Equal(t, value2, val)
// reset the store, this should remove both entries
err = testStore.Reset()
// check the keys have expired
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
require.NoError(t, err)
require.True(t, len(val) == 0)
val, err = testStore.Get(key2)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
require.NoError(t, err)
require.True(t, len(val) == 0)
}
func Test_Coherence_Set_And_Delete(t *testing.T) {
var val []byte
testStore, err := newTestStore(t)
utils.AssertEqual(t, err, nil)
err = testStore.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
err := testStore.Set(key1, value1, 0)
require.NoError(t, err)
err = testStore.Delete(key1)
utils.AssertEqual(t, err, nil)
require.NoError(t, err)
// ensure the key has gone
val, err = testStore.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, true, len(val) == 0)
utils.AssertEqual(t, testStore.Close(), nil)
require.NoError(t, err)
require.True(t, len(val) == 0)
}
// 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
testStore1, err := newTestStore(t, Config{ScopeName: "scope1"})
utils.AssertEqual(t, err, nil)
require.NoError(t, err)
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
err = testStore1.Set(key1, value1, 0)
utils.AssertEqual(t, err, nil)
require.NoError(t, err)
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
val, err = testStore1.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value1, val)
require.NoError(t, err)
require.Equal(t, value1, val)
val, err = testStore2.Get(key1)
utils.AssertEqual(t, err, nil)
utils.AssertEqual(t, value2, val)
require.NoError(t, err)
require.Equal(t, value2, val)
utils.AssertEqual(t, testStore1.Close(), nil)
utils.AssertEqual(t, testStore2.Close(), nil)
require.NoError(t, testStore1.Close())
require.NoError(t, testStore2.Close())
}
// newTestStore returns a new Coherence Store and ensures it is reset.
func newTestStore(t *testing.T, config ...Config) (*Storage, error) {
testStore, err := New(config...)
utils.AssertEqual(t, err, nil)
func Benchmark_Coherence_Set(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
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
require github.com/oracle/coherence-go-client v1.0.1
require google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19 // indirect
require (
github.com/oracle/coherence-go-client v1.0.3
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-20230711160842-782d3b101e98 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
github.com/gofiber/utils v1.1.0
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/uuid v1.3.1 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
google.golang.org/grpc v1.57.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
google.golang.org/grpc v1.58.3 // 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/gofiber/utils v1.1.0/go.mod h1:poZpsnhBykfnY1Mc0KeEa6mSHrS3dV0+oBWyeQmb2e0=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
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.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
@@ -7,22 +8,33 @@ 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/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
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/oracle/coherence-go-client v1.0.1 h1:MJ9S46+G8DHg/b3c/XB+mGA58wmTE0HdBCH1t+WrIBs=
github.com/oracle/coherence-go-client v1.0.1/go.mod h1:tdIKuX6brsdTCARlbxeRYiOF0TA4tA8ujHO4BCS1mjk=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
github.com/oracle/coherence-go-client v1.0.3 h1:P8Rzgo21BAaJsKzemzMCFY9I27PdKBpr5ZqrHhZ7zPg=
github.com/oracle/coherence-go-client v1.0.3/go.mod h1:IAk8etsxzhUK6YaGzbInR1LYlh+1fiG85bGpyvzY0QY=
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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
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=
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/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
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/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.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"
)
func TestSetCouchbase_ShouldReturnNoError(t *testing.T) {
testStorage := New(Config{
func newTestStore(t testing.TB) *Storage {
t.Helper()
return New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
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)
}
func TestGetCouchbase_ShouldReturnNil_WhenDocumentNotFound(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
testStore := newTestStore(t)
val, err := testStorage.Get("not_found_key")
val, err := testStore.Get("not_found_key")
require.NoError(t, err)
require.Zero(t, len(val))
}
func TestSetAndGet_GetShouldReturn_SettedValueWithoutError(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
func TestSetAndGet_GetShouldReturn_SetValueWithoutError(t *testing.T) {
testStore := newTestStore(t)
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err)
val, err := testStorage.Get("test")
val, err := testStore.Get("test")
require.NoError(t, err)
require.Equal(t, val, []byte("fiber_test_value"))
}
func TestSetAndGet_GetShouldReturnNil_WhenTTLExpired(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
testStore := newTestStore(t)
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)
time.Sleep(6 * time.Second)
val, err := testStorage.Get("test")
val, err := testStore.Get("test")
require.NoError(t, err)
require.Zero(t, len(val))
}
func TestSetAndDelete_DeleteShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
testStore := newTestStore(t)
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err)
err = testStorage.Delete("test")
err = testStore.Delete("test")
require.NoError(t, err)
_, err = testStorage.Get("test")
_, err = testStore.Get("test")
require.NoError(t, err)
}
func TestSetAndReset_ResetShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
testStore := newTestStore(t)
err := testStorage.Set("test", []byte("fiber_test_value"), 0)
err := testStore.Set("test", []byte("fiber_test_value"), 0)
require.NoError(t, err)
err = testStorage.Reset()
err = testStore.Reset()
require.NoError(t, err)
_, err = testStorage.Get("test")
_, err = testStore.Get("test")
require.NoError(t, err)
}
func TestClose_CloseShouldReturn_NoError(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
testStore := newTestStore(t)
err := testStorage.Close()
err := testStore.Close()
require.NoError(t, err)
}
func TestGetConn_ReturnsNotNill(t *testing.T) {
testStorage := New(Config{
Username: "admin",
Password: "123456",
Host: "127.0.0.1:8091",
Bucket: "fiber_storage",
})
require.True(t, testStorage.Conn() != nil)
func TestGetConn_ReturnsNotNil(t *testing.T) {
testStore := newTestStore(t)
require.True(t, testStore.Conn() != nil)
}
func Benchmark_Couchbase_Set(b *testing.B) {
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
require (
github.com/couchbase/gocb/v2 v2.6.3
github.com/couchbase/gocb/v2 v2.6.5
github.com/stretchr/testify v1.8.4
)
require (
github.com/couchbase/gocbcore/v10 v10.2.3 // indirect
github.com/couchbase/gocbcore/v10 v10.2.9 // indirect
github.com/davecgh/go-spew v1.1.1 // 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
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.3/go.mod h1:yF5F6BHTZ/ZowhEuZbySbXrlI4rHd1TIhm5azOaMbJU=
github.com/couchbase/gocbcore/v10 v10.2.3 h1:PEkRSNSkKjUBXx82Ucr094+anoiCG5GleOOQZOHo6D4=
github.com/couchbase/gocbcore/v10 v10.2.3/go.mod h1:lYQIIk+tzoMcwtwU5GzPbDdqEkwkH3isI2rkSpfL0oM=
github.com/couchbase/gocb/v2 v2.6.5 h1:xaZu29o8UJEV1ZQ3n2s9jcRCUHz/JsQ6+y6JBnVsy5A=
github.com/couchbase/gocb/v2 v2.6.5/go.mod h1:0vFM09y+VPhnXeNrIb8tS0wKHGpJvjJBrJnriWEiwGs=
github.com/couchbase/gocbcore/v10 v10.2.9 h1:zph/+ceu3JtZEDKhJMTRc6lGrahq+mnlQY/1dSepJuE=
github.com/couchbase/gocbcore/v10 v10.2.9/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-20230404095311-05e3ba4f0259 h1:2TXy68EGEzIMHOx9UvczR5ApVecwCfQZ0LjkmwMI6g4=
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/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
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.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/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=

View File

@@ -1,13 +1,16 @@
package dynamodb
import (
"os"
"testing"
"github.com/stretchr/testify/require"
)
var testStore = New(
Config{
var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(Config{
Table: "fiber_storage",
Endpoint: "http://localhost:8000/",
Region: "us-east-1",
@@ -15,8 +18,14 @@ var testStore = New(
AccessKey: "dummy",
SecretAccessKey: "dummy",
},
},
)
Reset: true,
})
code := m.Run()
_ = testStore.Close()
os.Exit(code)
}
func Test_DynamoDB_Set(t *testing.T) {
var (
@@ -106,3 +115,42 @@ func Test_DynamoDB_Close(t *testing.T) {
func Test_DynamoDB_Conn(t *testing.T) {
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
require (
github.com/aws/aws-sdk-go-v2 v1.21.0
github.com/aws/aws-sdk-go-v2/config v1.18.38
github.com/aws/aws-sdk-go-v2/credentials v1.13.36
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.39
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.21.5
github.com/aws/aws-sdk-go-v2 v1.22.1
github.com/aws/aws-sdk-go-v2/config v1.22.0
github.com/aws/aws-sdk-go-v2/credentials v1.15.1
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.12.0
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.0
github.com/stretchr/testify v1.8.4
)
require (
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.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/endpoint-discovery v1.7.35 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect
github.com/aws/smithy-go v1.14.2 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0 // indirect
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.17.0 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect

View File

@@ -1,42 +1,41 @@
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
github.com/aws/aws-sdk-go-v2/config v1.18.38 h1:CByQCELMgm2tM1lAehx3XNg0R/pfeXsYzqn0Aq2chJQ=
github.com/aws/aws-sdk-go-v2/config v1.18.38/go.mod h1:vNm9Hf5VgG2fSUWhT3zFrqN/RosGcabFMYgiSoxKFU8=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 h1:ps0cPswZjpsOk6sLwG6fdXTzrYjCplgPEyG3OUbbdqE=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36/go.mod h1:sY2phUzxbygoyDtTXhqi7GjGjCQ1S5a5Rj8u3ksBxCg=
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.39/go.mod h1:oTk09orqXlwSKnKf+UQhy+4Ci7aCo9x8hn0ZvPCLrns=
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.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8=
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.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
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.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
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.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo=
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.21.5/go.mod h1:X3ThW5RPV19hi7bnQ0RMAiBjZbzxj4rZlj+qdctbMWY=
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.5/go.mod h1:7QtKdGj66zM4g5hPgxHRQgFGLGal4EgwggTw5OZH56c=
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.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
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.35/go.mod h1:B3dUg0V6eJesUTi+m27NUkj7n8hdDKYUpxj8f4+TqaQ=
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.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
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.13.6/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
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.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU=
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aws/aws-sdk-go-v2 v1.22.1 h1:sjnni/AuoTXxHitsIdT0FwmqUuNUuHtufcVDErVFT9U=
github.com/aws/aws-sdk-go-v2 v1.22.1/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/config v1.22.0 h1:9Mm99OalzZRz0ab5fpodMoHBApHS6pqRNp3M9NmzvDg=
github.com/aws/aws-sdk-go-v2/config v1.22.0/go.mod h1:2eWgw5lps8fKI7LZVTrRTYP6HE6k/uEFUuTSHfXwqP0=
github.com/aws/aws-sdk-go-v2/credentials v1.15.1 h1:hmf6lAm9hk7uLCfapZn/jL05lm6Uwdbn1B0fgjyuf4M=
github.com/aws/aws-sdk-go-v2/credentials v1.15.1/go.mod h1:QTcHga3ZbQOneJuxmGBOCxiClxmp+TlvmjFexAnJ790=
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.12.0 h1:nKmTvugKsuO2bHkL0vkpHEFtRoT/ijOVx0VdP+LLjgw=
github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.12.0/go.mod h1:vxJ/EEKuP9CCSG4lEViyU9i5gr2M0X5OIJqTcX/oxuU=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2 h1:gIeH4+o1MN/caGBWjoGQTUTIu94xD6fI5B2+TcwBf70=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2/go.mod h1:wLyMIo/zPOhQhPXTddpfdkSleyigtFi8iMnC+2m/SK4=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1 h1:fi1ga6WysOyYb5PAf3Exd6B5GiSNpnZim4h1rhlBqx0=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1/go.mod h1:V5CY8wNurvPUibTi9mwqUqpiFZ5LnioKWIFUDtIzdI8=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1 h1:ZpaV/j48RlPc4AmOZuPv22pJliXjXq8/reL63YzyFnw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1/go.mod h1:R8aXraabD2e3qv1csxM14/X9WF4wFMIY0kH4YEtYD5M=
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0 h1:DqOQvIfmGkXZUVJnl9VRk0AnxyS59tCtX9k1Pyss4Ak=
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0/go.mod h1:VV/Kbw9Mg1GWJOT9WK+oTL3cWZiXtapnNvDSRqTZLsg=
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.0 h1:wAG9NailFhGhg8Ngg2YeCtzGmFWc63SYqJKdvN5ZMkE=
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.0/go.mod h1:ByrosnNlEq6xkA0d+FwB4f0HH/5KWCcgBqVxAt+Rsps=
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.17.0 h1:iTGBKvqZNU9SsQCzRiK8f0u9kVtdG4K1Q68A97JRn6w=
github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.17.0/go.mod h1:EabdnPA1OVcrolKX/hyMSNvJv8MBCZtlAlncsg/b/rA=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 h1:CJxo7ZBbaIzmXfV3hjcx36n9V87gJsIUPJflwqEHl3Q=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0/go.mod h1:yjVfjuY4nD1EW9i387Kau+I6V5cBA5YnC/mWNopjZrI=
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.1 h1:aY45T0Xk+xHHrQPlQrp8IhrgN7k4SL5VF2UXhsmI2rs=
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.1/go.mod h1:5E/dXkj2ljMIAvuYaFuYwitKJg6ULwsDbUr3g8izVB0=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1 h1:2OXw3ppu1XsB6rqKEMV4tnecTjIY3PRV2U6IP6KPJQo=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1/go.mod h1:FZB4AdakIqW/yERVdGJA6Z9jraax1beXfhBBnK2wwR8=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0 h1:I/Oh3IxGPfHXiGnwM54TD6hNr/8TlUrBXAtTyGhR+zw=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0/go.mod h1:H6NCMvDBqA+CvIaXzaSqM6LWtzv9BzZrqBOqz+PzRF8=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0 h1:irbXQkfVYIRaewYSXcu4yVk0m2T+JzZd0dkop7FjmO0=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0/go.mod h1:4wPNCkM22+oRe71oydP66K50ojDUC33XutSMi2pEF/M=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0 h1:sYIFy8tm1xQwRvVQ4CRuBGXKIg9sHNuG6+3UAQuoujk=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0/go.mod h1:S/LOQUeYDfJeJpFCIJDMjy7dwL4aA33HUdVi+i7uH8k=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=

View File

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

@@ -4,7 +4,7 @@ go 1.19
require (
github.com/stretchr/testify v1.8.4
go.etcd.io/etcd/client/v3 v3.5.9
go.etcd.io/etcd/client/v3 v3.5.10
)
require (
@@ -14,17 +14,17 @@ require (
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
go.etcd.io/etcd/api/v3 v3.5.10 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.10 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.25.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // 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/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
google.golang.org/grpc v1.57.0 // indirect
google.golang.org/grpc v1.58.3 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -21,12 +21,12 @@ 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/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs=
go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k=
go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE=
go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4=
go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E=
go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA=
go.etcd.io/etcd/api/v3 v3.5.10 h1:szRajuUUbLyppkhs9K6BRtjY37l66XQQmw7oZRANE4k=
go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI=
go.etcd.io/etcd/client/pkg/v3 v3.5.10 h1:kfYIdQftBnbAq8pUWFXfpuuxFSKzlmM5cSn76JByiT0=
go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U=
go.etcd.io/etcd/client/v3 v3.5.10 h1:W9TXNZ+oB3MCd/8UjxHTWK5J9Nquw9fQBLJd5ne5/Ao=
go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc=
go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
@@ -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-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.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
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-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/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-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
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.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.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
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/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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -69,8 +69,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d h1:
google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw=
google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ=
google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=

View File

@@ -1,13 +1,25 @@
package memcache
import (
"os"
"testing"
"time"
"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) {
var (
@@ -118,3 +130,42 @@ func Test_Memcache_Close(t *testing.T) {
func Test_Memcache_Conn(t *testing.T) {
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

@@ -31,6 +31,7 @@ func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
func (s *Storage) Conn() map[string]entry
func (s *Storage) Keys() ([][]byte, error)
```
### Installation

View File

@@ -2,14 +2,10 @@ module github.com/gofiber/storage/memory/v2
go 1.19
require (
github.com/gofiber/utils/v2 v2.0.0-beta.3
github.com/stretchr/testify v1.8.4
)
require github.com/stretchr/testify v1.8.4
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/google/uuid v1.3.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)

View File

@@ -1,9 +1,5 @@
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/gofiber/utils/v2 v2.0.0-beta.3 h1:pfOhUDDVjBJpkWv6C5jaDyYLvpui7zQ97zpyFFsUOKw=
github.com/gofiber/utils/v2 v2.0.0-beta.3/go.mod h1:jsl17+MsKfwJjM3ONCE9Rzji/j8XNbwjhUVTjzgfDCo=
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/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=

View File

@@ -141,3 +141,29 @@ func (s *Storage) Conn() map[string]entry {
defer s.mux.RUnlock()
return s.db
}
// Return all the keys
func (s *Storage) Keys() ([][]byte, error) {
s.mux.RLock()
defer s.mux.RUnlock()
if len(s.db) == 0 {
return nil, nil
}
ts := atomic.LoadUint32(&internal.Timestamp)
keys := make([][]byte, 0, len(s.db))
for key, v := range s.db {
// Filter out the expired keys
if v.expiry == 0 || v.expiry > ts {
keys = append(keys, []byte(key))
}
}
// Double check if no valid keys were found
if len(keys) == 0 {
return nil, nil
}
return keys, nil
}

View File

@@ -4,26 +4,29 @@ import (
"testing"
"time"
"github.com/gofiber/utils/v2"
"github.com/stretchr/testify/require"
)
var testStore = New()
func Test_Storage_Memory_Set(t *testing.T) {
var (
key = "john"
val = []byte("doe")
testStore = New()
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
}
func Test_Storage_Memory_Set_Override(t *testing.T) {
var (
key = "john"
val = []byte("doe")
testStore = New()
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
@@ -31,12 +34,17 @@ func Test_Storage_Memory_Set_Override(t *testing.T) {
err = testStore.Set(key, val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
}
func Test_Storage_Memory_Get(t *testing.T) {
var (
key = "john"
val = []byte("doe")
testStore = New()
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
@@ -45,53 +53,104 @@ func Test_Storage_Memory_Get(t *testing.T) {
result, err := testStore.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
}
func Test_Storage_Memory_Set_Expiration(t *testing.T) {
var (
key = "john"
val = []byte("doe")
exp = 1 * time.Second
testStore = New()
key = "john"
val = []byte("doe")
exp = 1 * time.Second
)
err := testStore.Set(key, val, exp)
require.NoError(t, err)
time.Sleep(1100 * time.Millisecond)
}
func Test_Storage_Memory_Get_Expired(t *testing.T) {
key := "john"
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
keys, err := testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Storage_Memory_Set_Long_Expiration_with_Keys(t *testing.T) {
var (
testStore = New()
key = "john"
val = []byte("doe")
exp = 5 * time.Second
)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
err = testStore.Set(key, val, exp)
require.NoError(t, err)
time.Sleep(1100 * time.Millisecond)
keys, err = testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
time.Sleep(4000 * time.Millisecond)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
keys, err = testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Storage_Memory_Get_NotExist(t *testing.T) {
testStore := New()
result, err := testStore.Get("notexist")
require.NoError(t, err)
require.Zero(t, len(result))
keys, err := testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Storage_Memory_Delete(t *testing.T) {
var (
key = "john"
val = []byte("doe")
testStore = New()
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
err = testStore.Delete(key)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
keys, err = testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Storage_Memory_Reset(t *testing.T) {
testStore := New()
val := []byte("doe")
err := testStore.Set("john1", val, 0)
@@ -100,6 +159,10 @@ func Test_Storage_Memory_Reset(t *testing.T) {
err = testStore.Set("john2", val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 2)
err = testStore.Reset()
require.NoError(t, err)
@@ -110,40 +173,60 @@ func Test_Storage_Memory_Reset(t *testing.T) {
result, err = testStore.Get("john2")
require.NoError(t, err)
require.Zero(t, len(result))
keys, err = testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Storage_Memory_Close(t *testing.T) {
testStore := New()
require.Nil(t, testStore.Close())
}
func Test_Storage_Memory_Conn(t *testing.T) {
testStore := New()
require.True(t, testStore.Conn() != nil)
}
// go test -v -run=^$ -bench=Benchmark_Storage_Memory -benchmem -count=4
func Benchmark_Storage_Memory(b *testing.B) {
keyLength := 1000
keys := make([]string, keyLength)
for i := 0; i < keyLength; i++ {
keys[i] = utils.UUID()
}
value := []byte("joe")
func Benchmark_Memory_Set(b *testing.B) {
testStore := New()
b.ReportAllocs()
b.ResetTimer()
ttl := 2 * time.Second
b.Run("fiber_memory", func(b *testing.B) {
d := New()
b.ReportAllocs()
b.ResetTimer()
for n := 0; n < b.N; n++ {
for _, key := range keys {
d.Set(key, value, ttl)
}
for _, key := range keys {
_, _ = d.Get(key)
}
for _, key := range keys {
d.Delete(key)
}
}
})
var err error
for i := 0; i < b.N; i++ {
err = testStore.Set("john", []byte("doe"), 0)
}
require.NoError(b, err)
}
func Benchmark_Memory_Get(b *testing.B) {
testStore := New()
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_Memory_SetAndDelete(b *testing.B) {
testStore := New()
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).
@@ -50,8 +61,8 @@ store := minio.New(minio.Config{
Bucket: "fiber-bucket",
Endpoint: "localhost:9000",
Credentials: Credentials{
accessKeyID: "minio-user",
secretAccessKey: "minio-password",
AccessKeyID: "minio-user",
SecretAccessKey: "minio-password",
},
})
```

View File

@@ -22,10 +22,10 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/xid v1.5.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
golang.org/x/crypto v0.12.0 // indirect
golang.org/x/net v0.14.0 // indirect
golang.org/x/sys v0.11.0 // indirect
golang.org/x/text v0.12.0 // indirect
golang.org/x/crypto v0.14.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
gopkg.in/ini.v1 v1.67.0 // 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/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
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.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
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.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
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=
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/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=

View File

@@ -1,6 +1,7 @@
package minio
import (
"os"
"strconv"
"testing"
"time"
@@ -8,16 +9,26 @@ import (
"github.com/stretchr/testify/require"
)
var testStore = New(
Config{
Bucket: "fiber-bucket",
Endpoint: "localhost:9000",
Credentials: Credentials{
AccessKeyID: "minio-user",
SecretAccessKey: "minio-password",
var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(
Config{
Bucket: "fiber-bucket",
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) {
var (
@@ -182,3 +193,42 @@ func Test_Reset(t *testing.T) {
func Test_Close(t *testing.T) {
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
import (
"os"
"testing"
"time"
"github.com/stretchr/testify/require"
)
var testStore = New(Config{
Reset: true,
})
var testStore *Storage
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) {
var (
@@ -120,3 +130,42 @@ func Test_MongoDB_Close(t *testing.T) {
func Test_MongoDB_Conn(t *testing.T) {
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) {
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)
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"))
newConfigStore = New(Config{
@@ -189,3 +189,42 @@ func Test_MYSQL_Close(t *testing.T) {
func Test_MYSQL_Conn(t *testing.T) {
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{
"test.db",
nil,
Path: "test.db",
WriteOptions: nil,
})
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) {
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

@@ -3,7 +3,7 @@ module github.com/gofiber/storage/postgres/v3
go 1.19
require (
github.com/jackc/pgx/v5 v5.4.3
github.com/jackc/pgx/v5 v5.5.0
github.com/stretchr/testify v1.8.4
)

View File

@@ -6,8 +6,8 @@ github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsI
github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY=
github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
github.com/jackc/pgx/v5 v5.5.0 h1:NxstgwndsTRy7eq9/kqYc/BZh5w2hHJV86wjvO+1xPw=
github.com/jackc/pgx/v5 v5.5.0/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA=
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=

View File

@@ -170,3 +170,42 @@ func Test_Postgres_Conn(t *testing.T) {
func Test_Postgres_Close(t *testing.T) {
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

@@ -29,6 +29,7 @@ func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
func (s *Storage) Conn() redis.UniversalClient
func (s *Storage) Keys() ([][]byte, error)
```
### Installation
Redis is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
@@ -86,15 +87,15 @@ tlsCfg := &tls.Config{
Certificates: []tls.Certificate{cer},
}
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,
Reset: false,
Reset: false,
})
// Create a client with a Redis URL with all information.
store = redis.New(redis.Config{
URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>",
Reset: false,
URL: "redis://<user>:<pass>@127.0.0.1:6379/<db>",
Reset: false,
})
```

View File

@@ -3,7 +3,7 @@ module github.com/gofiber/storage/redis/v3
go 1.19
require (
github.com/redis/go-redis/v9 v9.1.0
github.com/redis/go-redis/v9 v9.3.0
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/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
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/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
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.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c=
github.com/redis/go-redis/v9 v9.3.0 h1:RiVDjmig62jIWp7Kk4XVLs0hzV6pI3PyTnnL0cnn0u0=
github.com/redis/go-redis/v9 v9.3.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
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=

View File

@@ -33,6 +33,11 @@ func New(config ...Config) *Storage {
cfg.Password = options.Password
cfg.Database = options.DB
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 {
// Fallback to Host and Port values if Addrs is empty
cfg.Addrs = []string{fmt.Sprintf("%s:%d", cfg.Host, cfg.Port)}
@@ -69,8 +74,6 @@ func New(config ...Config) *Storage {
}
}
// ...
// Get value by key
func (s *Storage) Get(key string) ([]byte, error) {
if len(key) <= 0 {
@@ -113,3 +116,32 @@ func (s *Storage) Close() error {
func (s *Storage) Conn() redis.UniversalClient {
return s.db
}
// Return all the keys
func (s *Storage) Keys() ([][]byte, error) {
var keys [][]byte
var cursor uint64
var err error
for {
var batch []string
if batch, cursor, err = s.db.Scan(context.Background(), cursor, "*", 10).Result(); err != nil {
return nil, err
}
for _, key := range batch {
keys = append(keys, []byte(key))
}
if cursor == 0 {
break
}
}
if len(keys) == 0 {
return nil, nil
}
return keys, nil
}

View File

@@ -9,12 +9,11 @@ import (
"github.com/stretchr/testify/require"
)
var testStore = New(Config{
Reset: true,
})
func Test_Redis_Set(t *testing.T) {
var (
testStore = New(Config{
Reset: true,
})
key = "john"
val = []byte("doe")
)
@@ -25,6 +24,9 @@ func Test_Redis_Set(t *testing.T) {
func Test_Redis_Set_Override(t *testing.T) {
var (
testStore = New(Config{
Reset: true,
})
key = "john"
val = []byte("doe")
)
@@ -34,10 +36,17 @@ func Test_Redis_Set_Override(t *testing.T) {
err = testStore.Set(key, val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
}
func Test_Redis_Get(t *testing.T) {
var (
testStore = New(Config{
Reset: true,
})
key = "john"
val = []byte("doe")
)
@@ -48,10 +57,17 @@ func Test_Redis_Get(t *testing.T) {
result, err := testStore.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 1)
}
func Test_Redis_Set_Expiration(t *testing.T) {
func Test_Redis_Expiration(t *testing.T) {
var (
testStore = New(Config{
Reset: true,
})
key = "john"
val = []byte("doe")
exp = 1 * time.Second
@@ -61,17 +77,20 @@ func Test_Redis_Set_Expiration(t *testing.T) {
require.NoError(t, err)
time.Sleep(1100 * time.Millisecond)
}
func Test_Redis_Get_Expired(t *testing.T) {
key := "john"
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
keys, err := testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Redis_Get_NotExist(t *testing.T) {
testStore := New(Config{
Reset: true,
})
result, err := testStore.Get("notexist")
require.NoError(t, err)
require.Zero(t, len(result))
@@ -79,6 +98,9 @@ func Test_Redis_Get_NotExist(t *testing.T) {
func Test_Redis_Delete(t *testing.T) {
var (
testStore = New(Config{
Reset: true,
})
key = "john"
val = []byte("doe")
)
@@ -92,9 +114,16 @@ func Test_Redis_Delete(t *testing.T) {
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
keys, err := testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Redis_Reset(t *testing.T) {
testStore := New(Config{
Reset: true,
})
val := []byte("doe")
err := testStore.Set("john1", val, 0)
@@ -103,6 +132,10 @@ func Test_Redis_Reset(t *testing.T) {
err = testStore.Set("john2", val, 0)
require.NoError(t, err)
keys, err := testStore.Keys()
require.NoError(t, err)
require.Len(t, keys, 2)
err = testStore.Reset()
require.NoError(t, err)
@@ -113,13 +146,23 @@ func Test_Redis_Reset(t *testing.T) {
result, err = testStore.Get("john2")
require.NoError(t, err)
require.Zero(t, len(result))
keys, err = testStore.Keys()
require.NoError(t, err)
require.Nil(t, keys)
}
func Test_Redis_Close(t *testing.T) {
testStore := New(Config{
Reset: true,
})
require.Nil(t, testStore.Close())
}
func Test_Redis_Conn(t *testing.T) {
testStore := New(Config{
Reset: true,
})
require.True(t, testStore.Conn() != nil)
}
@@ -146,17 +189,16 @@ func Test_Redis_Initalize_WithURL(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 {
log.Println(err)
return
}
tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
PreferServerCipherSuites: true,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cer},
MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cer},
CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
@@ -185,6 +227,83 @@ func Test_Redis_Initalize_WithURL_TLS(t *testing.T) {
err = testStoreUrl.Delete(key)
require.NoError(t, err)
keys, err := testStoreUrl.Keys()
require.NoError(t, err)
require.Nil(t, keys)
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)
keys, err := testStoreUrl.Keys()
require.NoError(t, err)
require.Nil(t, keys)
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)
keys, err := testStoreUrl.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUrl.Close())
}
@@ -209,6 +328,10 @@ func Test_Redis_Universal_Addrs(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
@@ -235,6 +358,10 @@ func Test_Redis_Universal_With_URL_Undefined(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
@@ -261,6 +388,10 @@ func Test_Redis_Universal_With_URL_Defined(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
@@ -288,6 +419,10 @@ func Test_Redis_Universal_With_HostPort(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
@@ -316,6 +451,10 @@ func Test_Redis_Universal_With_HostPort_And_URL(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
@@ -346,5 +485,57 @@ func Test_Redis_Cluster(t *testing.T) {
err = testStoreUniversal.Delete(key)
require.NoError(t, err)
keys, err := testStoreUniversal.Keys()
require.NoError(t, err)
require.Nil(t, keys)
require.Nil(t, testStoreUniversal.Close())
}
func Benchmark_Redis_Set(b *testing.B) {
testStore := New(Config{
Reset: true,
})
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) {
testStore := New(Config{
Reset: true,
})
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) {
testStore := New(Config{
Reset: true,
})
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
import (
"os"
"testing"
"time"
"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) {
var (
@@ -73,7 +84,7 @@ func Test_Ristretto_Set_Expiration(t *testing.T) {
err := testStore.Set(key, val, exp)
require.NoError(t, err)
testStore.Reset()
require.NoError(t, testStore.Reset())
}
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) {
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,
})
// Initialize using Rueidis URL
store := rueidis.New(rueidis.Config{
URL: "redis://localhost:6379",
})
// Initialize Rueidis Cluster Client
store := rueidis.New(rueidis.Config{
InitAddress: []string{":6379", ":6380"},
@@ -105,6 +110,12 @@ type Config struct {
// Optional. Default is ""
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.
//
// Optional. Default is 0
@@ -172,7 +183,7 @@ type Config struct {
// CacheTTL TTL
//
// Optional. Default is time.Second
// Optional. Default is time.Minute
CacheTTL time.Duration
}
```
@@ -196,6 +207,6 @@ var ConfigDefault = Config{
DisableCache: false,
AlwaysPipelining: true,
Reset: false,
CacheTTL: time.Second,
CacheTTL: time.Minute,
}
```

View File

@@ -24,6 +24,12 @@ type Config struct {
// Optional. Default is ""
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.
//
// Optional. Default is 0
@@ -91,7 +97,7 @@ type Config struct {
// CacheTTL TTL
//
// Optional. Default is time.Second
// Optional. Default is time.Minute
CacheTTL time.Duration
}
@@ -100,6 +106,7 @@ var ConfigDefault = Config{
Username: "",
Password: "",
ClientName: "",
URL: "",
SelectDB: 0,
InitAddress: []string{"127.0.0.1:6379"},
TLSConfig: nil,
@@ -113,7 +120,7 @@ var ConfigDefault = Config{
DisableCache: false,
AlwaysPipelining: true,
Reset: false,
CacheTTL: time.Second,
CacheTTL: time.Minute,
}
// Helper function to set default values
@@ -138,6 +145,9 @@ func configDefault(config ...Config) Config {
if userConfig.ClientName != "" {
cfg.ClientName = userConfig.ClientName
}
if userConfig.URL != "" {
cfg.URL = userConfig.URL
}
if userConfig.SelectDB != 0 {
cfg.SelectDB = userConfig.SelectDB
}

View File

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

View File

@@ -7,15 +7,15 @@ 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/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c=
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/redis/rueidis v1.0.17 h1:RyjiBVnPcKxjgiUpkyqbRw/OFJV5vX2bMM/oMPdz8JE=
github.com/redis/rueidis v1.0.17/go.mod h1:8B+r5wdnjwK3lTFml5VtxjzGOQAC+5UmujoD12pDrEo=
github.com/redis/rueidis v1.0.21 h1:5vd5672hdNLQ7vaHygiZWZVhSrQ239PepuX9lkgAano=
github.com/redis/rueidis v1.0.21/go.mod h1:8EOzvsg3o5dUDitRj4vpsolUKkSIvFz88PeQnqwTVk0=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
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/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

View File

@@ -24,6 +24,28 @@ func New(config ...Config) *Storage {
var db rueidis.Client
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
db, err := rueidis.NewClient(rueidis.ClientOption{
Username: cfg.Username,

View File

@@ -130,11 +130,10 @@ func Test_Rueidis_WithTLS(t *testing.T) {
require.NoError(t, err)
}
tlsCfg := &tls.Config{
MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
PreferServerCipherSuites: true,
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cer},
MinVersion: tls.VersionTLS12,
CurvePreferences: []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256},
InsecureSkipVerify: true,
Certificates: []tls.Certificate{cer},
CipherSuites: []uint16{
tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
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())
}
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) {
store := New(Config{
InitAddress: []string{
@@ -215,3 +236,42 @@ func Test_Rueidis_Cluster(t *testing.T) {
require.NoError(t, err)
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

@@ -31,8 +31,15 @@ func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
func (s *Storage) Conn() *s3.Client
// Additional useful methods.
func (s *Storage) CreateBucker(bucket string) error
func (s *Storage) DeleteBucket(bucket string) error
func (s *Storage) SetWithChecksum(key string, val []byte, checksum map[types.ChecksumAlgorithm][]byte) error
```
### Installation
S3 is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
```bash
go mod init github.com/<user>/<repo>
@@ -43,7 +50,9 @@ go get github.com/gofiber/storage/s3/v2
```
### Examples
Import the storage package.
```go
import "github.com/gofiber/storage/s3/v2"
```
@@ -62,6 +71,38 @@ store := s3.New(s3.Config{
})
```
Create an object with `Set()`:
```go
err := store.Set("my-key", []byte("my-value"))
```
Or, call `SetWithChecksum()` to create an object with checksum to
ask S3 server to verify data integrity on server side:
> Currently 4 algorithms are supported:
> - types.ChecksumAlgorithmCrc32 (`CRC32`)
> - types.ChecksumAlgorithmCrc32c (`CRC32C`)
> - types.ChecksumAlgorithmSha1 (`SHA1`)
> - types.ChecksumAlgorithmSha256 (`SHA256`)
>
> For more information, see [PutObjectInput](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#PutObjectInput).
```go
key := "my-key"
val := []byte("my-value")
hash := sha256.New()
hash.Write(val)
sha256sum := hash.Sum(nil)
// import "github.com/aws/aws-sdk-go-v2/service/s3/types"
checksum = map[types.ChecksumAlgorithm][]byte{
types.ChecksumAlgorithmSha256: sha256sum,
}
err := store.SetWithChecksum(key, val, checksum)
```
### Config
```go
// Config defines the config for storage.
@@ -104,7 +145,9 @@ type Credentials struct {
```
### Default Config
The default configuration lacks Bucket, Region, and Endpoint which are all required and must be overwritten:
```go
// ConfigDefault is the default config
var ConfigDefault = Config{

View File

@@ -3,29 +3,29 @@ module github.com/gofiber/storage/s3/v2
go 1.19
require (
github.com/aws/aws-sdk-go-v2 v1.21.0
github.com/aws/aws-sdk-go-v2/config v1.18.38
github.com/aws/aws-sdk-go-v2/credentials v1.13.36
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.82
github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5
github.com/aws/aws-sdk-go-v2 v1.22.1
github.com/aws/aws-sdk-go-v2/config v1.22.0
github.com/aws/aws-sdk-go-v2/credentials v1.15.1
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.1
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.0
github.com/stretchr/testify v1.8.4
)
require (
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.11 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.42 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 // 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/checksum v1.1.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/s3shared v1.15.4 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.13.6 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.21.5 // indirect
github.com/aws/smithy-go v1.14.2 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.1 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect

View File

@@ -1,46 +1,45 @@
github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
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.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
github.com/aws/aws-sdk-go-v2/config v1.18.38 h1:CByQCELMgm2tM1lAehx3XNg0R/pfeXsYzqn0Aq2chJQ=
github.com/aws/aws-sdk-go-v2/config v1.18.38/go.mod h1:vNm9Hf5VgG2fSUWhT3zFrqN/RosGcabFMYgiSoxKFU8=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36 h1:ps0cPswZjpsOk6sLwG6fdXTzrYjCplgPEyG3OUbbdqE=
github.com/aws/aws-sdk-go-v2/credentials v1.13.36/go.mod h1:sY2phUzxbygoyDtTXhqi7GjGjCQ1S5a5Rj8u3ksBxCg=
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.11/go.mod h1:TEPP4tENqBGO99KwVpV9MlOX4NSrSLP8u3KRy2CDwA8=
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.82/go.mod h1:4pzmxw8ZmkpbvGqrmedWaXuDL2xcABews1VLYqe9Djk=
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.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
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.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
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.42/go.mod h1:rzfdUlfA+jdgLDmPKjd3Chq9V7LVLYo1Nz++Wb91aRo=
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.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
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.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
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.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
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.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
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.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
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.38.5/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
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.13.6/go.mod h1:fIAwKQKBFu90pBxx07BFOMJLpRUGu8VOzLJakeY+0K4=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5 h1:dnInJb4S0oy8aQuri1mV6ipLlnZPfnsDNB9BGO9PDNY=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.5/go.mod h1:yygr8ACQRY2PrEcy3xsUI357stq2AxnFM6DIsR9lij4=
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.21.5/go.mod h1:VC7JDqsqiwXukYEDjoHh9U0fOJtNWh04FPQz4ct4GGU=
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aws/aws-sdk-go-v2 v1.22.1 h1:sjnni/AuoTXxHitsIdT0FwmqUuNUuHtufcVDErVFT9U=
github.com/aws/aws-sdk-go-v2 v1.22.1/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 h1:hHgLiIrTRtddC0AKcJr5s7i/hLgcpTt+q/FKxf1Zayk=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0/go.mod h1:w4I/v3NOWgD+qvs1NPEwhd++1h3XPHFaVxasfY6HlYQ=
github.com/aws/aws-sdk-go-v2/config v1.22.0 h1:9Mm99OalzZRz0ab5fpodMoHBApHS6pqRNp3M9NmzvDg=
github.com/aws/aws-sdk-go-v2/config v1.22.0/go.mod h1:2eWgw5lps8fKI7LZVTrRTYP6HE6k/uEFUuTSHfXwqP0=
github.com/aws/aws-sdk-go-v2/credentials v1.15.1 h1:hmf6lAm9hk7uLCfapZn/jL05lm6Uwdbn1B0fgjyuf4M=
github.com/aws/aws-sdk-go-v2/credentials v1.15.1/go.mod h1:QTcHga3ZbQOneJuxmGBOCxiClxmp+TlvmjFexAnJ790=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2 h1:gIeH4+o1MN/caGBWjoGQTUTIu94xD6fI5B2+TcwBf70=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.2/go.mod h1:wLyMIo/zPOhQhPXTddpfdkSleyigtFi8iMnC+2m/SK4=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.1 h1:ULswbgGNVrW8zEhkCNwrwXrs1mUvy2JTqWaCRsD2ZZw=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.1/go.mod h1:pAXgsDPk1rRwwfkz8/9ISO75vXEHqTGIgbLhGqqQ1GY=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1 h1:fi1ga6WysOyYb5PAf3Exd6B5GiSNpnZim4h1rhlBqx0=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.1/go.mod h1:V5CY8wNurvPUibTi9mwqUqpiFZ5LnioKWIFUDtIzdI8=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1 h1:ZpaV/j48RlPc4AmOZuPv22pJliXjXq8/reL63YzyFnw=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.1/go.mod h1:R8aXraabD2e3qv1csxM14/X9WF4wFMIY0kH4YEtYD5M=
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0 h1:DqOQvIfmGkXZUVJnl9VRk0AnxyS59tCtX9k1Pyss4Ak=
github.com/aws/aws-sdk-go-v2/internal/ini v1.5.0/go.mod h1:VV/Kbw9Mg1GWJOT9WK+oTL3cWZiXtapnNvDSRqTZLsg=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.1 h1:vzYLDkwTw4CY0vUk84MeSufRf8XIsC/GsoIFXD60sTg=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.1/go.mod h1:ToBFBnjeGR2ruMx8IWp/y7vSK3Irj5/oPwifruiqoOM=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 h1:CJxo7ZBbaIzmXfV3hjcx36n9V87gJsIUPJflwqEHl3Q=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0/go.mod h1:yjVfjuY4nD1EW9i387Kau+I6V5cBA5YnC/mWNopjZrI=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.1 h1:15FUCJzAP9Y25nioTqTrGlZmhOtthaXBWlt4pS+d3Xo=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.1/go.mod h1:5655NW53Un6l7JzkI6AA3rZvf0m532cSnLThA1fVXcA=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1 h1:2OXw3ppu1XsB6rqKEMV4tnecTjIY3PRV2U6IP6KPJQo=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.1/go.mod h1:FZB4AdakIqW/yERVdGJA6Z9jraax1beXfhBBnK2wwR8=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.1 h1:dnl0klXYX9EKpzZbWlH5LJL+YTcEZcJEMPFFr/rAHUQ=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.1/go.mod h1:Mfk/9Joso4tCQYzM4q4HRUIqwln8lnIIMB/OE8Zebdc=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.0 h1:u0YoSrxjr3Lm+IqIlRAV+4YTFwkXjyB9db9CfUFge2w=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.0/go.mod h1:98EIdRu+BNsdqITsXfy+57TZfwlUQC9aDn9a9qoo90U=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0 h1:I/Oh3IxGPfHXiGnwM54TD6hNr/8TlUrBXAtTyGhR+zw=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.0/go.mod h1:H6NCMvDBqA+CvIaXzaSqM6LWtzv9BzZrqBOqz+PzRF8=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0 h1:irbXQkfVYIRaewYSXcu4yVk0m2T+JzZd0dkop7FjmO0=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.0/go.mod h1:4wPNCkM22+oRe71oydP66K50ojDUC33XutSMi2pEF/M=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0 h1:sYIFy8tm1xQwRvVQ4CRuBGXKIg9sHNuG6+3UAQuoujk=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.0/go.mod h1:S/LOQUeYDfJeJpFCIJDMjy7dwL4aA33HUdVi+i7uH8k=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=

38
s3/init_test.go Normal file
View File

@@ -0,0 +1,38 @@
package s3
import (
"os"
"testing"
"time"
)
const (
bucket = "testbucket"
)
var testStore *Storage
func TestMain(m *testing.M) {
testStore = New(
Config{
Bucket: bucket,
Endpoint: "http://127.0.0.1:9000/",
Region: "us-east-1",
Credentials: Credentials{
AccessKey: "minio-user",
SecretAccessKey: "minio-password",
},
RequestTimeout: 3 * time.Second,
},
)
// Create test bucket.
_ = testStore.CreateBucket(bucket)
exitVal := m.Run()
// Delete test bucket.
_ = testStore.DeleteBucket(bucket)
os.Exit(exitVal)
}

View File

@@ -159,7 +159,7 @@ func (s *Storage) Close() error {
return nil
}
// Return database client
// Conn returns database client.
func (s *Storage) Conn() *s3.Client {
return s.svc
}
@@ -186,11 +186,11 @@ func returnAWSConfig(cfg Config) (aws.Config, error) {
})
if cfg.Credentials != (Credentials{}) {
credentials := credentials.NewStaticCredentialsProvider(cfg.Credentials.AccessKey, cfg.Credentials.SecretAccessKey, "")
creds := credentials.NewStaticCredentialsProvider(cfg.Credentials.AccessKey, cfg.Credentials.SecretAccessKey, "")
return awsconfig.LoadDefaultConfig(context.TODO(),
awsconfig.WithRegion(cfg.Region),
awsconfig.WithEndpointResolverWithOptions(endpoint),
awsconfig.WithCredentialsProvider(credentials),
awsconfig.WithCredentialsProvider(creds),
awsconfig.WithRetryer(func() aws.Retryer {
return retry.AddWithMaxAttempts(retry.NewStandard(), cfg.MaxAttempts)
}),

83
s3/s3_methods.go Normal file
View File

@@ -0,0 +1,83 @@
package s3
import (
"bytes"
"encoding/base64"
"fmt"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/service/s3"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
)
// Additional methods for S3, but not required by gofiber Storage interface.
// CreateBucket creates a new bucket.
func (s *Storage) CreateBucket(bucket string) error {
ctx, cancel := s.requestContext()
defer cancel()
_, err := s.svc.CreateBucket(ctx, &s3.CreateBucketInput{
Bucket: aws.String(bucket),
})
return err
}
// DeleteBucket deletes a bucket.
func (s *Storage) DeleteBucket(bucket string) error {
ctx, cancel := s.requestContext()
defer cancel()
_, err := s.svc.DeleteBucket(ctx, &s3.DeleteBucketInput{
Bucket: aws.String(bucket),
})
return err
}
// SetWithChecksum sets key with value and checksum.
//
// Currently 4 algorithms are supported:
// - types.ChecksumAlgorithmCrc32 (`CRC32`)
// - types.ChecksumAlgorithmCrc32c (`CRC32C`)
// - types.ChecksumAlgorithmSha1 (`SHA1`)
// - types.ChecksumAlgorithmSha256 (`SHA256`)
//
// For more information, see [PutObjectInput](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#PutObjectInput).
func (s *Storage) SetWithChecksum(key string, val []byte, checksum map[types.ChecksumAlgorithm][]byte) error {
if len(key) <= 0 {
return nil
}
poi := s3.PutObjectInput{
Bucket: &s.bucket,
Key: aws.String(key),
Body: bytes.NewReader(val),
}
for alg, sum := range checksum {
// S3 requires base64 encoded checksum.
b64str := base64.StdEncoding.EncodeToString(sum)
switch alg {
case types.ChecksumAlgorithmCrc32:
poi.ChecksumCRC32 = aws.String(b64str)
case types.ChecksumAlgorithmCrc32c:
poi.ChecksumCRC32C = aws.String(b64str)
case types.ChecksumAlgorithmSha1:
poi.ChecksumSHA1 = aws.String(b64str)
case types.ChecksumAlgorithmSha256:
poi.ChecksumSHA256 = aws.String(b64str)
default:
return fmt.Errorf("invalid checksum algorithm: %s", alg)
}
}
ctx, cancel := s.requestContext()
defer cancel()
_, err := s.uploader.Upload(ctx, &poi)
return err
}

50
s3/s3_methods_test.go Normal file
View File

@@ -0,0 +1,50 @@
package s3
import (
"crypto/sha256"
"testing"
"github.com/aws/aws-sdk-go-v2/service/s3/types"
"github.com/stretchr/testify/require"
)
func Test_S3_CreateDeleteBucket(t *testing.T) {
bkt := "test-new-bucket"
err := testStore.CreateBucket(bkt)
require.NoError(t, err)
err = testStore.DeleteBucket(bkt)
require.NoError(t, err)
}
func Test_S3_SetWithChecksum(t *testing.T) {
var (
key = "set-with-checksum"
val = []byte("doe")
)
// Create SHA-256 hash and get checksum.
sha256Hash := sha256.New()
sha256Hash.Write(val)
sha256sum := sha256Hash.Sum(nil)
checksum := map[types.ChecksumAlgorithm][]byte{
types.ChecksumAlgorithmSha256: sha256sum,
}
err := testStore.SetWithChecksum(key, val, checksum)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
// Compare value.
require.Equal(t, result, val)
// Compare checksum.
hash2 := sha256.New()
hash2.Write(result)
sha256sum2 := hash2.Sum(nil)
require.Equal(t, sha256sum, sha256sum2)
}

View File

@@ -6,18 +6,6 @@ import (
"github.com/stretchr/testify/require"
)
var testStore = New(
Config{
Bucket: "testbucket",
Endpoint: "http://127.0.0.1:9000/",
Region: "us-east-1",
Credentials: Credentials{
AccessKey: "minioadmin",
SecretAccessKey: "minioadmin",
},
},
)
func Test_S3_Set(t *testing.T) {
var (
key = "john"
@@ -106,3 +94,42 @@ func Test_S3_Close(t *testing.T) {
func Test_S3_Conn(t *testing.T) {
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)
}

183
scylladb/README.md Normal file
View File

@@ -0,0 +1,183 @@
---
id: scylladb
title: ScyllaDb
---
![Release](https://img.shields.io/github/v/tag/gofiber/storage?filter=scylladb*)
[![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-scylladb.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)
# ScyllaDb
A ScyllaDb storage engine for [Fiber](github.com/gofiber/fiber) using [gocql](github.com/scylladb/gocql).
### Table of Contents
- [Signatures](#signatures)
- [Installation](#installation)
- [Examples](#examples)
- [Config](#config)
- [Default Config](#default-config)
### Signatures
```go
func New(config ...Config) Storage
func (s *Storage) Get(key string) ([]byte, error)
func (s *Storage) Set(key string, value []byte, expire time.Duration) error
func (s *Storage) Delete(key string) error
func (s *Storage) Reset() error
func (s *Storage) Close() error
func (s *Storage) Conn() *gocql.Session
```
### Installation
ScyllaDb is tested on the 2 last [Go versions](https://golang.org/dl/) with support for modules. So make sure to initialize one first if you didn't do that yet:
```bash
go mod init github.com/<user>/<repo>
```
And then install the scylladb implementation:
```bash
go get github.com/gofiber/storage/scylladb
```
### Examples
Import the storage package.
```go
import "github.com/gofiber/storage/scylladb"
```
You can use the following possibilities to create a storage:
```go
// Initialize default config
store := scylladb.New()
// Initialize custom config
store := scylladb.New(scylladb.Config{
Keyspace: "fiber",
Hosts: []string{"127.0.0.1"},
Port: 9042,
Table: "fiber_storage",
Consistency: "ONE",
Reset: false,
})
// Initialize with support for TLS (SslOptions configures TLS use)
//
// InsecureSkipVerify and EnableHostVerification interact as follows:
//
// |Config.InsecureSkipVerify | EnableHostVerification | Result |
// |--------------------------|------------------------|--------------------|
// |Config is nil | false | do not verify host |
// |Config is nil | true | verify host |
// |false | false | verify host |
// |true | false | do not verify host |
// |false | true | verify host |
// |true | true | verify host |
store := New(
Config{
Keyspace: "fiber",
Hosts: []string{"127.0.0.1"},
Port: 9042,
Table: "fiber_storage",
Consistency: "ONE",
SslOpts: &gocql.SslOptions{
Config: &tls.Config{
InsecureSkipVerify: false, // Set this too false to enable certificate verification
},
CertPath: "/path/to/client_cert.pem", // Path to the client certificate
KeyPath: "/path/to/client_key.pem", // Path to the client certificate's private key
CaPath: "/path/to/ca_cert.pem", // Path to the CA certificate
EnableHostVerification: true, // Enable hostname verification
},
Reset: false,
},
)
// Initialize custom config using scylladb connection
cluster, _ := gocql.NewCluster("127.0.0.1")
cluster.Keyspace = "fiber"
cluster.Port = 9042
session, _ := cluster.CreateSession()
store := scylladb.New(scylladb.Config{
Session: session,
Keyspace: "fiber",
Table: "fiber_storage",
Reset: false,
})
```
### Config
```go
type Config struct {
// Session is provided by the user to use an existing ScyllaDb session
// Session Will override Keyspace and all other authentication values if used
//
// Optional. Default is nil
Session *gocql.Session
// Keyspace name
//
// Optional. Default is "fiber"
Keyspace string
// Hosts are an array of network addresses for establishing initial connections
// You have the flexibility to specify one or multiple addresses as needed
//
// Optional. Default is "127.0.0.1"
Hosts []string
// Port where the ScyllaDb cluster is listening on
//
// Optional. Default is 9042
Port int
// Username for ScyllaDb cluster
//
// Optional. Default is ""
Username string
// Password for ScyllaDb cluster
//
// Optional. Default is ""
Password string
// Table name
//
// Optional. Default is "fiber_storage"
Table string
// Level of the consistency
//
// Optional. Default is "LOCAL_ONE"
Consistency string
// SslOpts configures TLS use.
//
// Optional. Default is nil
SslOpts *gocql.SslOptions
// Reset clears any existing keys in existing Table
//
// Optional. Default is false
Reset bool
}
```
### Default Config
```go
// ConfigDefault is the default config
var ConfigDefault = Config{
Session: nil,
Keyspace: "fiber",
Hosts: []string{"127.0.0.1"},
Username: "",
Password: "",
Port: 9042,
Table: "fiber_storage",
Consistency: "LOCAL_ONE",
SslOpts: nil,
Reset: false,
}
```

102
scylladb/config.go Normal file
View File

@@ -0,0 +1,102 @@
package scylladb
import (
"github.com/gocql/gocql"
"strings"
)
type Config struct {
// Session is provided by the user to use an existing ScyllaDb session
//
// Optional. Default is nil
Session *gocql.Session
// Keyspace name
//
// Optional. Default is "fiber"
Keyspace string
// Hosts are an array of network addresses for establishing initial connections.
// You have the flexibility to specify one or multiple addresses as needed.
//
// Optional. Default is "127.0.0.1"
Hosts []string
// Port where the ScyllaDb cluster is listening on
//
// Optional. Default is 9042
Port int
// Username for ScyllaDb cluster
//
// Optional. Default is ""
Username string
// Password for ScyllaDb cluster
//
// Optional. Default is ""
Password string
// Table name
//
// Optional. Default is "fiber_storage"
Table string
// Level of the consistency
//
// Optional. Default is "LOCAL_ONE"
Consistency string
// SslOpts configures TLS use.
//
// Optional. Default is nil
SslOpts *gocql.SslOptions
// Reset clears any existing keys in existing Table
//
// Optional. Default is false
Reset bool
}
// ConfigDefault is the default config
var ConfigDefault = Config{
Session: nil,
Keyspace: "fiber",
Hosts: []string{"127.0.0.1"},
Username: "",
Password: "",
Port: 9042,
Table: "fiber_storage",
Consistency: "LOCAL_ONE",
SslOpts: nil,
Reset: false,
}
// configDefault helps to set a default config
func configDefault(config ...Config) Config {
// Return default config if nothing provided
if len(config) < 1 {
return ConfigDefault
}
// Override default config
cfg := config[0]
// Set default values
if cfg.Hosts == nil {
cfg.Hosts = ConfigDefault.Hosts
}
if cfg.Port <= 0 {
cfg.Port = ConfigDefault.Port
}
if len(strings.TrimSpace(cfg.Table)) == 0 {
cfg.Table = ConfigDefault.Table
}
if len(strings.TrimSpace(cfg.Keyspace)) == 0 {
cfg.Keyspace = ConfigDefault.Keyspace
}
if len(strings.TrimSpace(cfg.Consistency)) == 0 {
cfg.Consistency = ConfigDefault.Consistency
}
return cfg
}

19
scylladb/go.mod Normal file
View File

@@ -0,0 +1,19 @@
module github.com/gofiber/storage/scylladb
go 1.20
require (
github.com/gocql/gocql v1.6.0
github.com/stretchr/testify v1.8.4
)
require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
replace github.com/gocql/gocql => github.com/scylladb/gocql v1.11.1

45
scylladb/go.sum Normal file
View File

@@ -0,0 +1,45 @@
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932 h1:mXoPYz/Ul5HYEDvkta6I8/rnYM5gSdSV2tJ6XbZuEtY=
github.com/bitly/go-hostpool v0.0.0-20171023180738-a3a6125de932/go.mod h1:NOuUCSz6Q9T7+igc/hlvDOUdtWKryOrtFyIVABv/p7k=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
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/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
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/scylladb/gocql v1.11.1 h1:AlIPHHZf2l0Cbj8wGjfELspaGfnd4meGj9sPQnr5dn8=
github.com/scylladb/gocql v1.11.1/go.mod h1:ZLEJ0EVE5JhmtxIW2stgHq/v1P4fWap0qyyXSKyV8K0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/net v0.0.0-20220526153639-5463443f8c37 h1:lUkvobShwKsOesNfWWlCS5q7fnbG1MEliIzwu886fn8=
golang.org/x/net v0.0.0-20220526153639-5463443f8c37/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
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/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

175
scylladb/scylladb.go Normal file
View File

@@ -0,0 +1,175 @@
package scylladb
import (
"errors"
"fmt"
"github.com/gocql/gocql"
"strings"
"time"
)
// Storage interface that is implemented by storage providers
type Storage struct {
session *gocql.Session
tableName string
selectQuery string
insertQuery string
deleteQuery string
resetQuery string
}
var (
checkSchemaErrorMsg = errors.New("the `value` row has an incorrect data type. " +
"The message should be BLOB, but it is instead %s. This could lead to encoding-related issues if the database is not migrated (refer to https://github.com/gofiber/storage/blob/main/MIGRATE.md)")
keyspaceErrorMsg = errors.New(`keyspace cannot be empty`)
createKeyspaceQuery = `CREATE KEYSPACE IF NOT EXISTS %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};`
dropQuery = `DROP TABLE IF EXISTS %s.%s;`
createTableQuery = `CREATE TABLE IF NOT EXISTS %s.%s (key TEXT PRIMARY KEY, value BLOB)`
checkSchemaQuery = `SELECT type FROM system_schema.columns WHERE keyspace_name = '%s' AND table_name = '%s' AND column_name = 'value';`
selectQuery = `SELECT value FROM %s.%s WHERE key = ?`
insertQuery = `INSERT INTO %s.%s (key, value) VALUES (?, ?) USING TTL ?`
deleteQuery = `DELETE FROM %s.%s WHERE key = ?`
resetQuery = `TRUNCATE %s.%s`
)
// New creates a new storage
func New(config ...Config) *Storage {
var err error
var session *gocql.Session
// Set default config
cfg := configDefault(config...)
if len(strings.TrimSpace(cfg.Keyspace)) == 0 {
panic(keyspaceErrorMsg)
}
if cfg.Session == nil {
// Create a new cluster
cluster := gocql.NewCluster(cfg.Hosts...)
cluster.Consistency = gocql.ParseConsistency(cfg.Consistency)
cluster.Port = cfg.Port
// Set credentials if provided
if len(strings.TrimSpace(cfg.Username)) > 0 && len(strings.TrimSpace(cfg.Password)) > 0 {
cluster.Authenticator = gocql.PasswordAuthenticator{
Username: cfg.Username,
Password: cfg.Password,
}
}
// Set cfg.SslOpts if provided.
if cfg.SslOpts != nil {
cluster.SslOpts = cfg.SslOpts
}
// Create session
session, err = cluster.CreateSession()
if err != nil {
panic(err)
}
} else {
// Set session if provided
session = cfg.Session
}
// Create keyspace if it does not exist
if err = session.Query(fmt.Sprintf(createKeyspaceQuery, cfg.Keyspace)).Exec(); err != nil {
session.Close()
panic(err)
}
// Drop table if reset is true
if cfg.Reset {
if err = session.Query(fmt.Sprintf(dropQuery, cfg.Keyspace, cfg.Table)).Exec(); err != nil {
session.Close()
panic(err)
}
}
// Create the storage
store := &Storage{
session: session,
tableName: cfg.Table,
selectQuery: fmt.Sprintf(selectQuery, cfg.Keyspace, cfg.Table),
insertQuery: fmt.Sprintf(insertQuery, cfg.Keyspace, cfg.Table),
deleteQuery: fmt.Sprintf(deleteQuery, cfg.Keyspace, cfg.Table),
resetQuery: fmt.Sprintf(resetQuery, cfg.Keyspace, cfg.Table),
}
// Create table if not exists
if err = store.createTableIfNotExists(cfg.Keyspace); err != nil {
session.Close()
panic(err)
}
// Check schema
store.checkSchema(cfg.Keyspace)
return store // Return storage
}
func (s *Storage) createTableIfNotExists(keyspace string) error {
// Create table if not exists
query := fmt.Sprintf(createTableQuery, keyspace, s.tableName)
if err := s.session.Query(query).Exec(); err != nil {
return err
}
return nil
}
func (s *Storage) checkSchema(keyspace string) {
// Check schema for value column type (should be blob)
var dataType string
query := fmt.Sprintf(checkSchemaQuery, keyspace, s.tableName)
if err := s.session.Query(query).Scan(&dataType); err != nil {
panic(err)
}
if dataType != "blob" {
panic(fmt.Errorf(checkSchemaErrorMsg.Error(), dataType))
}
}
// Get retrieves a value by key
func (s *Storage) Get(key string) ([]byte, error) {
var value []byte
if err := s.session.Query(s.selectQuery, key).Scan(&value); err != nil {
if errors.Is(err, gocql.ErrNotFound) {
return nil, nil
}
return nil, err
}
return value, nil
}
// Set sets a value by key
func (s *Storage) Set(key string, value []byte, expire time.Duration) error {
var expiration int
if expire != 0 {
expiration = int(expire.Round(time.Second).Seconds())
}
return s.session.Query(s.insertQuery, key, value, expiration).Exec()
}
// Delete removes a value by key
func (s *Storage) Delete(key string) error {
return s.session.Query(s.deleteQuery, key).Exec()
}
// Reset resets all values
func (s *Storage) Reset() error {
return s.session.Query(s.resetQuery).Exec()
}
// Close closes the storage
func (s *Storage) Close() error {
s.session.Close()
return nil
}
// Conn returns the underlying gocql session
func (s *Storage) Conn() *gocql.Session {
return s.session
}

164
scylladb/scylladb_test.go Normal file
View File

@@ -0,0 +1,164 @@
package scylladb
import (
"github.com/stretchr/testify/require"
"testing"
"time"
)
var testStore = New(Config{Reset: true})
func Test_Scylla_Set(t *testing.T) {
// Create a new instance of the Storage
var (
key = "john"
value = []byte("doe")
)
err := testStore.Set(key, value, 0)
require.NoError(t, err)
}
func Test_Scylla_Set_Override_Get(t *testing.T) {
var (
key = "john"
valInitial = []byte("doe")
valOverride = []byte("doe2")
)
err := testStore.Set(key, valInitial, 0)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Equal(t, valInitial, result)
err = testStore.Set(key, valOverride, 0)
require.NoError(t, err)
result, err = testStore.Get(key)
require.NoError(t, err)
require.Equal(t, valOverride, result)
}
func Test_Scylla_Get(t *testing.T) {
var (
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Equal(t, val, result)
}
func Test_Scylla_Set_Expiration_Get(t *testing.T) {
var (
key = "john"
val = []byte("doe")
exp = 1 * time.Second
)
err := testStore.Set(key, val, exp)
require.NoError(t, err)
time.Sleep(1001 * time.Millisecond)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Empty(t, result)
}
func Test_Scylla_Get_NotExist(t *testing.T) {
result, err := testStore.Get("not-exist")
require.NoError(t, err)
require.Zero(t, len(result))
}
func Test_Scylla_Delete(t *testing.T) {
var (
key = "john"
val = []byte("doe")
)
err := testStore.Set(key, val, 0)
require.NoError(t, err)
err = testStore.Delete(key)
require.NoError(t, err)
result, err := testStore.Get(key)
require.NoError(t, err)
require.Zero(t, len(result))
}
func Test_Scylla_Reset(t *testing.T) {
var val = []byte("doe")
err := testStore.Set("john1", val, 0)
require.NoError(t, err)
err = testStore.Set("john2", val, 0)
require.NoError(t, err)
err = testStore.Reset()
require.NoError(t, err)
result, err := testStore.Get("john1")
require.NoError(t, err)
require.Zero(t, len(result))
result, err = testStore.Get("john2")
require.NoError(t, err)
require.Zero(t, len(result))
}
func Test_Scylla_Close(t *testing.T) {
require.Nil(t, testStore.Close())
}
func Test_Scylla_Conn(t *testing.T) {
require.True(t, testStore.Conn() != nil)
}
func Benchmark_Scylla_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_Scylla_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_Scylla_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) {
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)
}