mirror of
				https://github.com/gofiber/storage.git
				synced 2025-10-31 11:46:32 +08:00 
			
		
		
		
	Compare commits
	
		
			103 Commits
		
	
	
		
			coherence/
			...
			coherence/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | aebce6444e | ||
|   | 3ee7537cc8 | ||
|   | 7091428842 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 6d79796597 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | fbf0bbef5c | ||
|   | ddac78a1dd | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0591ba2589 | ||
|   | f415c93d8b | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | cf8e97a71b | ||
|   | ac0c464e5b | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 4457e96f9b | ||
|   | fba0b33855 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 1d0a80e362 | ||
|   | 7e70887486 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 99e619ca77 | ||
|   | 875a5f3081 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 23cac43c89 | ||
|   | 6e44e3c729 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 8a2be493cb | ||
|   | b5a1f8aec4 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d7b4cc8c6c | ||
|   | 318be60fa9 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 56cbe84675 | ||
|   | 91db8c2e5d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | e02ca45688 | ||
|   | f864d67dbc | ||
|   | 863767bc9f | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | dca7968160 | ||
|   | 2fd96adf12 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | ec64c27225 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0dd355a984 | ||
|   | 495f9835f2 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | eb70c9cef1 | ||
|   | 93c051e1a7 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | e86e48703c | ||
|   | 145a7fe255 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | ba555c5a34 | ||
|   | b2f5e6ceb7 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5eb19f802b | ||
|   | 23131b83cc | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 2ec67be1e9 | ||
|   | e0807d0fb3 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 25c0384af3 | ||
|   | a10c5eb812 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5cb28ee173 | ||
|   | b486d160a8 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | afd4517c53 | ||
|   | dc9461d2cc | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 433533050c | ||
|   | f9e45829b1 | ||
|   | d4e50f8263 | ||
|   | 6b04025154 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 17f8641ece | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 3780da9230 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 5f6130f3d0 | ||
|   | a5acb4cc84 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 27086258a6 | ||
|   | 83194711c3 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d809bc6240 | ||
|   | 51a3d39536 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c2a09a1e85 | ||
|   | 11ea30d1ed | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 8f916fde3c | ||
|   | 26aac40a50 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 9f2fbc07fa | ||
|   | 502cb1dd74 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | c92df2a45b | ||
|   | f0b304a0c6 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 9ad80e96c2 | ||
|   | 3e53b6f96f | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d18325dea7 | ||
|   | 46c9ec665a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d77dda57c2 | ||
|   | 133e1b134b | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | bdf3fafbac | ||
|   | a8098ce577 | ||
|   | 807d903176 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0c546d9a05 | ||
|   | 6939eda25d | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | be00cc356c | ||
|   | 5fd61e7460 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | a82ac381aa | ||
|   | a0500b170a | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 0bc7d51380 | ||
|   | eb86e00a79 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | d33d3cae34 | ||
|   | e410768f7f | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 421b7f81fd | ||
|   | 747f025819 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 66e0f69437 | ||
|   | 4b59c5aa07 | ||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | f7dbcd1fca | ||
|   | 499d8aa343 | ||
|   | aeb7a24789 | ||
|   | 946562e2a5 | ||
|   | 558ec79281 | ||
|   | f113998db1 | ||
|   | f39724354c | ||
|   | db1dd2bf6a | ||
|   | 36dd674d93 | ||
|   | 55eca1c7b2 | ||
|   | d17795a9a9 | ||
|   | 68d59280d8 | 
							
								
								
									
										170
									
								
								.github/workflows/benchmark.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								.github/workflows/benchmark.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|       - master | ||||
|       - main | ||||
|     paths: | ||||
|       - "**" | ||||
|       - "!**.md" | ||||
|   pull_request: | ||||
|     paths: | ||||
|       - "**" | ||||
|       - "!**.md" | ||||
|  | ||||
| permissions: | ||||
|   deployments: write | ||||
|   contents: write | ||||
|  | ||||
| name: Benchmark | ||||
| jobs: | ||||
|   Compare: | ||||
|     runs-on: ubuntu-latest | ||||
|     services: | ||||
|       arangodb: | ||||
|         image: 'arangodb:latest' | ||||
|         env: | ||||
|           ARANGO_NO_AUTH: 1 | ||||
|         ports: | ||||
|           - '8529:8529' | ||||
|       dynamodb: | ||||
|         image: 'amazon/dynamodb-local:latest' | ||||
|         ports: | ||||
|           - '8000:8000' | ||||
|       memcached: | ||||
|         image: 'memcached:latest' | ||||
|         ports: | ||||
|           - '11211:11211' | ||||
|       mongo: | ||||
|         image: 'mongo:latest' | ||||
|         ports: | ||||
|           - '27017:27017' | ||||
|       mssql: | ||||
|         image: 'mcmoe/mssqldocker:latest' | ||||
|         ports: | ||||
|           - '1433:1433' | ||||
|         env: | ||||
|           ACCEPT_EULA: Y | ||||
|           SA_PASSWORD: MsSql!1234 | ||||
|           MSSQL_DB: master | ||||
|           MSSQL_USER: sa | ||||
|           MSSQL_PASSWORD: MsSql!1234 | ||||
|         options: >- | ||||
|           --health-cmd "/opt/mssql-tools/bin/sqlcmd -U sa -P $SA_PASSWORD -Q 'select 1' -b -o /dev/null" | ||||
|           --health-interval 1s | ||||
|           --health-timeout 30s | ||||
|           --health-start-period 10s | ||||
|           --health-retries 20 | ||||
|       mysql: | ||||
|         image: 'mysql:latest' | ||||
|         env: | ||||
|           MYSQL_DATABASE: fiber | ||||
|           MYSQL_USER: username | ||||
|           MYSQL_PASSWORD: password | ||||
|           MYSQL_ROOT_PASSWORD: password | ||||
|         ports: | ||||
|           - '3306:3306' | ||||
|         options: >- | ||||
|           --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout | ||||
|           5s --health-retries 5 | ||||
|       postgres: | ||||
|         image: 'postgres:latest' | ||||
|         ports: | ||||
|           - '5432:5432' | ||||
|         env: | ||||
|           POSTGRES_DB: fiber | ||||
|           POSTGRES_USER: username | ||||
|           POSTGRES_PASSWORD: "pass#w%rd" | ||||
|         options: >- | ||||
|           --health-cmd pg_isready --health-interval 10s --health-timeout 5s | ||||
|           --health-retries 5 | ||||
|     steps: | ||||
|       - name: Fetch Repository | ||||
|         uses: actions/checkout@v4 | ||||
|  | ||||
|       - name: Install Go | ||||
|         uses: actions/setup-go@v4 | ||||
|         with: | ||||
|           # NOTE: Keep this in sync with the version from go.mod | ||||
|           go-version: "1.20.x" | ||||
|  | ||||
|       - name: Install Azurite | ||||
|         run: | | ||||
|           docker run -d -p 10000:10000 mcr.microsoft.com/azure-storage/azurite azurite-blob --blobHost 0.0.0.0 --blobPort 10000 | ||||
|  | ||||
|       - name: Install Coherence | ||||
|         run: | | ||||
|           docker run -d -p 1408:1408 -p 30000:30000 ghcr.io/oracle/coherence-ce:22.06.5 | ||||
|           sleep 30 | ||||
|  | ||||
|       - name: Install couchbase | ||||
|         run: | | ||||
|           docker run --name couchbase -d -p 8091-8097:8091-8097 -p 9123:9123 -p 11207:11207 -p 11210:11210 -p 11280:11280 -p 18091-18097:18091-18097 couchbase:enterprise-7.1.1 | ||||
|           sleep 10 | ||||
|           docker exec --tty couchbase couchbase-cli cluster-init -c localhost:8091 --cluster-username admin --cluster-password 123456 --cluster-ramsize 256 --services data | ||||
|           sleep 10 | ||||
|           docker exec --tty couchbase couchbase-cli bucket-create -c localhost:8091 --username admin --password 123456 --bucket fiber_storage --bucket-type couchbase --bucket-ramsize 100 --enable-flush 1 | ||||
|  | ||||
|       - name: Install etcd | ||||
|         run: | | ||||
|           docker run -d --name Etcd-server \ | ||||
|             --publish 2379:2379 \ | ||||
|             --publish 2380:2380 \ | ||||
|             --env ALLOW_NONE_AUTHENTICATION=yes \ | ||||
|             --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 \ | ||||
|             bitnami/etcd:latest | ||||
|  | ||||
|       - name: Install MinIO | ||||
|         run: | | ||||
|           docker run -d --restart always -p 9000:9000 --name storage-minio -e MINIO_ROOT_USER='minio-user' -e MINIO_ROOT_PASSWORD='minio-password' minio/minio server /data | ||||
|  | ||||
|       - name: Setup Redis | ||||
|         uses: shogo82148/actions-setup-redis@v1 | ||||
|         with: | ||||
|           redis-version: '7.x' | ||||
|           auto-start: 'false' | ||||
|  | ||||
|       - name: Run Redis | ||||
|         run: | | ||||
|           redis-server --port 6379 & | ||||
|  | ||||
|       - name: Run Benchmarks | ||||
|         run: | | ||||
|           set -o pipefail | ||||
|           for d in */ ; do | ||||
|             [[ $d == "tls/" ]] && continue | ||||
|  | ||||
|             cd "$d" | ||||
|             go test ./... -benchmem -run=^$ -bench . | tee -a ../output.txt | ||||
|             cd .. | ||||
|           done | ||||
|         shell: bash | ||||
|         env: | ||||
|           MSSQL_DATABASE: master | ||||
|           MSSQL_USERNAME: sa | ||||
|           MSSQL_PASSWORD: MsSql!1234 | ||||
|           MYSQL_USERNAME: username | ||||
|           MYSQL_PASSWORD: password | ||||
|           MYSQL_DATABASE: fiber | ||||
|           POSTGRES_DATABASE: fiber | ||||
|           POSTGRES_USERNAME: username | ||||
|           POSTGRES_PASSWORD: "pass#w%rd" | ||||
|  | ||||
|       - name: Get Previous Benchmark Results | ||||
|         uses: actions/cache@v3 | ||||
|         with: | ||||
|           path: ./cache | ||||
|           key: ${{ runner.os }}-benchmark | ||||
|  | ||||
|       - name: Save Benchmark Results | ||||
|         uses: benchmark-action/github-action-benchmark@v1.18.0 | ||||
|         with: | ||||
|           tool: "go" | ||||
|           output-file-path: output.txt | ||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||
|           benchmark-data-dir-path: "benchmarks" | ||||
|           alert-threshold: "300%" | ||||
|           fail-on-alert: true | ||||
|           comment-on-alert: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} | ||||
|           #summary-always: ${{ github.event_name != 'push' && github.event_name != 'workflow_dispatch' }} | ||||
|           auto-push: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} | ||||
|           save-data-file: ${{ github.event_name == 'push' || github.event_name == 'workflow_dispatch' }} | ||||
							
								
								
									
										2
									
								
								.github/workflows/sync-docs.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/sync-docs.yml
									
									
									
									
										vendored
									
									
								
							| @@ -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' | ||||
|  | ||||
|   | ||||
							
								
								
									
										3
									
								
								.github/workflows/test-redis.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/test-redis.yml
									
									
									
									
										vendored
									
									
								
							| @@ -56,7 +56,7 @@ jobs: | ||||
|                     --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 | ||||
| @@ -64,6 +64,7 @@ jobs: | ||||
|                     slave1-port: 7003 | ||||
|                     slave2-port: 7004 | ||||
|                     slave3-port: 7005 | ||||
|                     sleep-duration: 10 | ||||
|  | ||||
|             -   name: Install Go | ||||
|                 uses: actions/setup-go@v4 | ||||
|   | ||||
							
								
								
									
										3
									
								
								.github/workflows/test-rueidis.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.github/workflows/test-rueidis.yml
									
									
									
									
										vendored
									
									
								
							| @@ -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 | ||||
|   | ||||
							
								
								
									
										2
									
								
								.github/workflows/test-s3.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/test-s3.yml
									
									
									
									
										vendored
									
									
								
							| @@ -20,7 +20,7 @@ jobs: | ||||
|                     - 1.21.x | ||||
|         steps: | ||||
|         -   name: Install MinIO | ||||
|             run: docker run -d -p 9000:9000 --name minio minio/minio server /data | ||||
|             run:  docker run -d --restart always -p 9000:9000 --name storage-minio -e MINIO_ROOT_USER='minio-user' -e MINIO_ROOT_PASSWORD='minio-password' minio/minio server /data | ||||
|         -   name: Fetch Repository | ||||
|             uses: actions/checkout@v4 | ||||
|         -   name: Install Go | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 ( | ||||
|   | ||||
| @@ -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= | ||||
|   | ||||
| @@ -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 | ||||
| 	}) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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.39 | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.13.37 | ||||
| 	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.21.2 | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.19.0 | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.13.43 | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.43 | ||||
| 	github.com/aws/aws-sdk-go-v2/service/dynamodb v1.23.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.6 // 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.13.13 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.7 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.37 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect | ||||
| 	github.com/aws/smithy-go v1.15.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 | ||||
|   | ||||
| @@ -1,37 +1,37 @@ | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.18.39 h1:oPVyh6fuu/u4OiW4qcuQyEtk7U7uuNBmHmJSLg1AJsQ= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.18.39/go.mod h1:+NH/ZigdPckFpgB1TRcRuWCB/Kbbvkxc/iNAKTq5RhE= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.37 h1:BvEdm09+ZEh2XtN+PVHPcYwKY3wIeB6pw7vPRM4M9/U= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.37/go.mod h1:ACLrdkd4CLZyXOghZ8IYumQbcooAcp2jo/s2xsFH8IM= | ||||
| 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.6 h1:pSB560BbVj9ZlJZF4WYj5zsytWHWKxg+NgyGV4B2L58= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.6/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.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.19.0 h1:AdzDvwH6dWuVARCl3RTLGRc4Ogy+N7yLFxVxXe1ClQ0= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= | ||||
| github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.43 h1:jlR1Rwjb3z5d1p0sqhNcuCaqdp73H+1O/X8Lc2kBDrY= | ||||
| github.com/aws/aws-sdk-go-v2/feature/dynamodb/attributevalue v1.10.43/go.mod h1:X1HGecFASboCkBt1GJRM4a/FDYYogu9AciUoXVsbr4U= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= | ||||
| github.com/aws/aws-sdk-go-v2/service/dynamodb v1.23.0 h1:xmSAn14nM6IdHyuWO/bsrAagOQtnqzuUCLxdVmj9nhg= | ||||
| github.com/aws/aws-sdk-go-v2/service/dynamodb v1.23.0/go.mod h1:1HkLh8vaL4obF95fne7ZOu7sxomS/+vkBt3/+gqqwE4= | ||||
| github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.7 h1:WCeS9WZbIqEKCbgIkrHB5jw/9mO2QMYTLPF8wee3v4Y= | ||||
| github.com/aws/aws-sdk-go-v2/service/dynamodbstreams v1.15.7/go.mod h1:uT1paW42RVCVEoAEbWKu98gEI0GMBWUsT/H+pI4ODJQ= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.37 h1:4LoizcvPT9A0tiAFhepxn0bGZXkzvN0pG0epydY3Pno= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.37/go.mod h1:7xBUZyP6LeLc+5Ym9PG7atqw4sR28sBtYcHETik+bPE= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= | ||||
| github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= | ||||
| github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
							
								
								
									
										14
									
								
								etcd/go.mod
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								etcd/go.mod
									
									
									
									
									
								
							| @@ -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 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										28
									
								
								etcd/go.sum
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								etcd/go.sum
									
									
									
									
									
								
							| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -4,7 +4,6 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/gofiber/utils/v2" | ||||
| 	"github.com/stretchr/testify/require" | ||||
| ) | ||||
|  | ||||
| @@ -120,30 +119,41 @@ func Test_Storage_Memory_Conn(t *testing.T) { | ||||
| 	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) { | ||||
| 	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) { | ||||
| 	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) { | ||||
| 	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) | ||||
| } | ||||
|   | ||||
| @@ -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 | ||||
| ) | ||||
|   | ||||
							
								
								
									
										16
									
								
								minio/go.sum
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								minio/go.sum
									
									
									
									
									
								
							| @@ -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= | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -86,15 +86,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, | ||||
| }) | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -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.2.1 | ||||
| 	github.com/stretchr/testify v1.8.4 | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -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.2.1 h1:WlYJg71ODF0dVspZZCpYmoF1+U1Jjk9Rwd7pq6QmlCg= | ||||
| github.com/redis/go-redis/v9 v9.2.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M= | ||||
| github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= | ||||
| github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= | ||||
|   | ||||
| @@ -152,11 +152,10 @@ func Test_Redis_Initalize_WithURL_TLS(t *testing.T) { | ||||
| 		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, | ||||
| @@ -195,11 +194,10 @@ func Test_Redis_Initalize_WithURL_TLS_Verify(t *testing.T) { | ||||
| 		return | ||||
| 	} | ||||
| 	tlsCfg := &tls.Config{ | ||||
| 		MinVersion:               tls.VersionTLS12, | ||||
| 		CurvePreferences:         []tls.CurveID{tls.CurveP521, tls.CurveP384, tls.CurveP256}, | ||||
| 		PreferServerCipherSuites: true, | ||||
| 		InsecureSkipVerify:       false, | ||||
| 		Certificates:             []tls.Certificate{cer}, | ||||
| 		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, | ||||
| @@ -414,3 +412,42 @@ func Test_Redis_Cluster(t *testing.T) { | ||||
|  | ||||
| 	require.Nil(t, testStoreUniversal.Close()) | ||||
| } | ||||
|  | ||||
| func Benchmark_Redis_Set(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	b.ResetTimer() | ||||
|  | ||||
| 	var err error | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		err = testStore.Set("john", []byte("doe"), 0) | ||||
| 	} | ||||
|  | ||||
| 	require.NoError(b, err) | ||||
| } | ||||
|  | ||||
| func Benchmark_Redis_Get(b *testing.B) { | ||||
| 	err := testStore.Set("john", []byte("doe"), 0) | ||||
| 	require.NoError(b, err) | ||||
|  | ||||
| 	b.ReportAllocs() | ||||
| 	b.ResetTimer() | ||||
|  | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_, err = testStore.Get("john") | ||||
| 	} | ||||
|  | ||||
| 	require.NoError(b, err) | ||||
| } | ||||
|  | ||||
| func Benchmark_Redis_SetAndDelete(b *testing.B) { | ||||
| 	b.ReportAllocs() | ||||
| 	b.ResetTimer() | ||||
|  | ||||
| 	var err error | ||||
| 	for i := 0; i < b.N; i++ { | ||||
| 		_ = testStore.Set("john", []byte("doe"), 0) | ||||
| 		err = testStore.Delete("john") | ||||
| 	} | ||||
|  | ||||
| 	require.NoError(b, err) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
| @@ -183,7 +183,7 @@ type Config struct { | ||||
|  | ||||
| 	// CacheTTL TTL | ||||
| 	// | ||||
| 	// Optional. Default is time.Second | ||||
| 	// Optional. Default is time.Minute | ||||
| 	CacheTTL time.Duration | ||||
| } | ||||
| ``` | ||||
| @@ -207,6 +207,6 @@ var ConfigDefault = Config{ | ||||
| 	DisableCache:        false, | ||||
| 	AlwaysPipelining:    true, | ||||
| 	Reset:               false, | ||||
| 	CacheTTL:            time.Second, | ||||
| 	CacheTTL:            time.Minute, | ||||
| } | ||||
| ``` | ||||
|   | ||||
| @@ -97,7 +97,7 @@ type Config struct { | ||||
|  | ||||
| 	// CacheTTL TTL | ||||
| 	// | ||||
| 	// Optional. Default is time.Second | ||||
| 	// Optional. Default is time.Minute | ||||
| 	CacheTTL time.Duration | ||||
| } | ||||
|  | ||||
| @@ -120,7 +120,7 @@ var ConfigDefault = Config{ | ||||
| 	DisableCache:        false, | ||||
| 	AlwaysPipelining:    true, | ||||
| 	Reset:               false, | ||||
| 	CacheTTL:            time.Second, | ||||
| 	CacheTTL:            time.Minute, | ||||
| } | ||||
|  | ||||
| // Helper function to set default values | ||||
|   | ||||
| @@ -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.20 | ||||
| 	github.com/stretchr/testify v1.8.4 | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -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.20 h1:OVEVkQBgNV5t7BC2YKXD2rd+BxuD4ExboyHKayiRgsI= | ||||
| github.com/redis/rueidis v1.0.20/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= | ||||
|   | ||||
| @@ -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, | ||||
| @@ -237,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) | ||||
| } | ||||
|   | ||||
							
								
								
									
										38
									
								
								s3/go.mod
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								s3/go.mod
									
									
									
									
									
								
							| @@ -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.39 | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.13.37 | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.83 | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.38.5 | ||||
| 	github.com/aws/aws-sdk-go-v2 v1.21.2 | ||||
| 	github.com/aws/aws-sdk-go-v2/config v1.19.0 | ||||
| 	github.com/aws/aws-sdk-go-v2/credentials v1.13.43 | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.91 | ||||
| 	github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 | ||||
| 	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.6 // 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.4.14 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 // indirect | ||||
| 	github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 // indirect | ||||
| 	github.com/aws/smithy-go v1.15.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 | ||||
|   | ||||
							
								
								
									
										76
									
								
								s3/go.sum
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								s3/go.sum
									
									
									
									
									
								
							| @@ -1,41 +1,41 @@ | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc= | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.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.39 h1:oPVyh6fuu/u4OiW4qcuQyEtk7U7uuNBmHmJSLg1AJsQ= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.18.39/go.mod h1:+NH/ZigdPckFpgB1TRcRuWCB/Kbbvkxc/iNAKTq5RhE= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.37 h1:BvEdm09+ZEh2XtN+PVHPcYwKY3wIeB6pw7vPRM4M9/U= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.37/go.mod h1:ACLrdkd4CLZyXOghZ8IYumQbcooAcp2jo/s2xsFH8IM= | ||||
| 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.83 h1:wcluDLIQ0uYaxv0fCWQRimbXkPdTgWHUD21j1CzXEwc= | ||||
| github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.83/go.mod h1:nGCBuon134gW67yAtxHKV73x+tAcY/xG4ZPNPDB1h/I= | ||||
| 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.6 h1:pSB560BbVj9ZlJZF4WYj5zsytWHWKxg+NgyGV4B2L58= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.6/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.21.2 h1:+LXZ0sgo8quN9UOKXXzAWRT3FWd4NxeXWOZom9pE7GA= | ||||
| github.com/aws/aws-sdk-go-v2 v1.21.2/go.mod h1:ErQhvNuEMhJjweavOYhxVkn2RUx7kQXVATHrjKtxIpM= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14 h1:Sc82v7tDQ/vdU1WtuSyzZ1I7y/68j//HJ6uozND1IDs= | ||||
| github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.14/go.mod h1:9NCTOURS8OpxvoAVHq79LK81/zC78hfRWFn+aL0SPcY= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.19.0 h1:AdzDvwH6dWuVARCl3RTLGRc4Ogy+N7yLFxVxXe1ClQ0= | ||||
| github.com/aws/aws-sdk-go-v2/config v1.19.0/go.mod h1:ZwDUgFnQgsazQTnWfeLWk5GjeqTQTL8lMkoE1UXzxdE= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.43 h1:LU8vo40zBlo3R7bAvBVy/ku4nxGEyZe9N8MqAeFTzF8= | ||||
| github.com/aws/aws-sdk-go-v2/credentials v1.13.43/go.mod h1:zWJBz1Yf1ZtX5NGax9ZdNjhhI4rgjfgsyk6vTY1yfVg= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13 h1:PIktER+hwIG286DqXyvVENjgLTAwGgoeriLDD5C+YlQ= | ||||
| github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.13/go.mod h1:f/Ib/qYjhV2/qdsf79H3QP/eRE4AkVyEf6sk7XfZ1tg= | ||||
| github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.91 h1:haAyxKHwoE+y/TJt+qHcPQf1dCViyyGbWcKjjYUllTE= | ||||
| github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.91/go.mod h1:ACQ6ta5YFlfSOz2c9A+EVYawLxFMZ0rI3Q0A0tGieKo= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43 h1:nFBQlGtkbPzp/NjZLuFxRqmT91rLJkgvsEQs68h962Y= | ||||
| github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.43/go.mod h1:auo+PiyLl0n1l8A0e8RIeR8tOzYPfZZH/JNlrJ8igTQ= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37 h1:JRVhO25+r3ar2mKGP7E0LDl8K9/G36gjlqca5iQbaqc= | ||||
| github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.37/go.mod h1:Qe+2KtKml+FEsQF/DHmDV+xjtche/hwoF75EG4UlHW8= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45 h1:hze8YsjSh8Wl1rYa1CJpRmXP21BvOBuc76YhW0HsuQ4= | ||||
| github.com/aws/aws-sdk-go-v2/internal/ini v1.3.45/go.mod h1:lD5M20o09/LCuQ2mE62Mb/iSdSlCNuj6H5ci7tW7OsE= | ||||
| github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6 h1:wmGLw2i8ZTlHLw7a9ULGfQbuccw8uIiNr6sol5bFzc8= | ||||
| github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.6/go.mod h1:Q0Hq2X/NuL7z8b1Dww8rmOFl+jzusKEcyvkKspwdpyc= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15 h1:7R8uRYyXzdD71KWVCL78lJZltah6VVznXBazvKjfH58= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.15/go.mod h1:26SQUPcTNgV1Tapwdt4a1rOsYRsnBsJHLMPoxK2b0d8= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38 h1:skaFGzv+3kA+v2BPKhuekeb1Hbb105+44r8ASC+q5SE= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.38/go.mod h1:epIZoRSSbRIwLPJU5F+OldHhwZPBdpDeQkRdCeY3+00= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37 h1:WWZA/I2K4ptBS1kg0kV1JbBtG/umed0vwHRrmcr9z7k= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.37/go.mod h1:vBmDnwWXWxNPFRMmG2m/3MKOe+xEcMDo1tanpaWCcck= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6 h1:9ulSU5ClouoPIYhDQdg9tpl83d5Yb91PXTKK+17q+ow= | ||||
| github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.6/go.mod h1:lnc2taBsR9nTlz9meD+lhFZZ9EWY712QHrRflWpTcOA= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2 h1:Ll5/YVCOzRB+gxPqs2uD0R7/MyATC0w85626glSKmp4= | ||||
| github.com/aws/aws-sdk-go-v2/service/s3 v1.40.2/go.mod h1:Zjfqt7KhQK+PO1bbOsFNzKgaq7TcxzmEoDWN8lM0qzQ= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.15.2 h1:JuPGc7IkOP4AaqcZSIcyqLpFSqBWK32rM9+a1g6u73k= | ||||
| github.com/aws/aws-sdk-go-v2/service/sso v1.15.2/go.mod h1:gsL4keucRCgW+xA85ALBpRFfdSLH4kHOVSnLMSuBECo= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3 h1:HFiiRkf1SdaAmV3/BHOFZ9DjFynPHj8G/UIO1lQS+fk= | ||||
| github.com/aws/aws-sdk-go-v2/service/ssooidc v1.17.3/go.mod h1:a7bHA82fyUXOm+ZSWKU6PIoBxrjSprdLoM8xPYvzYVg= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.23.2 h1:0BkLfgeDjfZnZ+MhB3ONb01u9pwFYTCZVhlsSSBvlbU= | ||||
| github.com/aws/aws-sdk-go-v2/service/sts v1.23.2/go.mod h1:Eows6e1uQEsc4ZaHANmsPRzAKcVDrcmjjWiih2+HUUQ= | ||||
| github.com/aws/smithy-go v1.15.0 h1:PS/durmlzvAFpQHDs4wi4sNNP9ExsqZh6IlfdHXgKK8= | ||||
| github.com/aws/smithy-go v1.15.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
|   | ||||
| @@ -19,8 +19,8 @@ func TestMain(m *testing.M) { | ||||
| 			Endpoint: "http://127.0.0.1:9000/", | ||||
| 			Region:   "us-east-1", | ||||
| 			Credentials: Credentials{ | ||||
| 				AccessKey:       "minioadmin", | ||||
| 				SecretAccessKey: "minioadmin", | ||||
| 				AccessKey:       "minio-user", | ||||
| 				SecretAccessKey: "minio-password", | ||||
| 			}, | ||||
| 			RequestTimeout: 3 * time.Second, | ||||
| 		}, | ||||
|   | ||||
| @@ -94,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) | ||||
| } | ||||
|   | ||||
| @@ -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) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user