From 5ed38a48f2dc814fc2032eff4e9c82162d2b5ad6 Mon Sep 17 00:00:00 2001 From: aeolus3000 <50886185+aeolus3000@users.noreply.github.com> Date: Sat, 29 Jul 2023 08:46:06 +0200 Subject: [PATCH] azurite preset based on the localstack preset (#837) --- .circleci/config.yml | 12 ++ .github/workflows/test.yaml | 25 +++ README.md | 2 +- cmd/server/presets.go | 1 + go.mod | 3 + go.sum | 12 ++ internal/gnomockd/azurite_test.go | 95 +++++++++++ internal/gnomockd/testdata/azurite.json | 8 + .../azurite/blobstore/some-bucket/file-1 | 1 + .../azurite/blobstore/some-bucket/file-10 | 1 + .../azurite/blobstore/some-bucket/file-100 | 1 + .../azurite/blobstore/some-bucket/file-11 | 1 + .../azurite/blobstore/some-bucket/file-12 | 1 + .../azurite/blobstore/some-bucket/file-13 | 1 + .../azurite/blobstore/some-bucket/file-14 | 1 + .../azurite/blobstore/some-bucket/file-15 | 1 + .../azurite/blobstore/some-bucket/file-16 | 1 + .../azurite/blobstore/some-bucket/file-17 | 1 + .../azurite/blobstore/some-bucket/file-18 | 1 + .../azurite/blobstore/some-bucket/file-19 | 1 + .../azurite/blobstore/some-bucket/file-2 | 1 + .../azurite/blobstore/some-bucket/file-20 | 1 + .../azurite/blobstore/some-bucket/file-21 | 1 + .../azurite/blobstore/some-bucket/file-22 | 1 + .../azurite/blobstore/some-bucket/file-23 | 1 + .../azurite/blobstore/some-bucket/file-24 | 1 + .../azurite/blobstore/some-bucket/file-25 | 1 + .../azurite/blobstore/some-bucket/file-26 | 1 + .../azurite/blobstore/some-bucket/file-27 | 1 + .../azurite/blobstore/some-bucket/file-28 | 1 + .../azurite/blobstore/some-bucket/file-29 | 1 + .../azurite/blobstore/some-bucket/file-3 | 1 + .../azurite/blobstore/some-bucket/file-30 | 1 + .../azurite/blobstore/some-bucket/file-31 | 1 + .../azurite/blobstore/some-bucket/file-32 | 1 + .../azurite/blobstore/some-bucket/file-33 | 1 + .../azurite/blobstore/some-bucket/file-34 | 1 + .../azurite/blobstore/some-bucket/file-35 | 1 + .../azurite/blobstore/some-bucket/file-36 | 1 + .../azurite/blobstore/some-bucket/file-37 | 1 + .../azurite/blobstore/some-bucket/file-38 | 1 + .../azurite/blobstore/some-bucket/file-39 | 1 + .../azurite/blobstore/some-bucket/file-4 | 1 + .../azurite/blobstore/some-bucket/file-40 | 1 + .../azurite/blobstore/some-bucket/file-41 | 1 + .../azurite/blobstore/some-bucket/file-42 | 1 + .../azurite/blobstore/some-bucket/file-43 | 1 + .../azurite/blobstore/some-bucket/file-44 | 1 + .../azurite/blobstore/some-bucket/file-45 | 1 + .../azurite/blobstore/some-bucket/file-46 | 1 + .../azurite/blobstore/some-bucket/file-47 | 1 + .../azurite/blobstore/some-bucket/file-48 | 1 + .../azurite/blobstore/some-bucket/file-49 | 1 + .../azurite/blobstore/some-bucket/file-5 | 1 + .../azurite/blobstore/some-bucket/file-50 | 1 + .../azurite/blobstore/some-bucket/file-51 | 1 + .../azurite/blobstore/some-bucket/file-52 | 1 + .../azurite/blobstore/some-bucket/file-53 | 1 + .../azurite/blobstore/some-bucket/file-54 | 1 + .../azurite/blobstore/some-bucket/file-55 | 1 + .../azurite/blobstore/some-bucket/file-56 | 1 + .../azurite/blobstore/some-bucket/file-57 | 1 + .../azurite/blobstore/some-bucket/file-58 | 1 + .../azurite/blobstore/some-bucket/file-59 | 1 + .../azurite/blobstore/some-bucket/file-6 | 1 + .../azurite/blobstore/some-bucket/file-60 | 1 + .../azurite/blobstore/some-bucket/file-61 | 1 + .../azurite/blobstore/some-bucket/file-62 | 1 + .../azurite/blobstore/some-bucket/file-63 | 1 + .../azurite/blobstore/some-bucket/file-64 | 1 + .../azurite/blobstore/some-bucket/file-65 | 1 + .../azurite/blobstore/some-bucket/file-66 | 1 + .../azurite/blobstore/some-bucket/file-67 | 1 + .../azurite/blobstore/some-bucket/file-68 | 1 + .../azurite/blobstore/some-bucket/file-69 | 1 + .../azurite/blobstore/some-bucket/file-7 | 1 + .../azurite/blobstore/some-bucket/file-70 | 1 + .../azurite/blobstore/some-bucket/file-71 | 1 + .../azurite/blobstore/some-bucket/file-72 | 1 + .../azurite/blobstore/some-bucket/file-73 | 1 + .../azurite/blobstore/some-bucket/file-74 | 1 + .../azurite/blobstore/some-bucket/file-75 | 1 + .../azurite/blobstore/some-bucket/file-76 | 1 + .../azurite/blobstore/some-bucket/file-77 | 1 + .../azurite/blobstore/some-bucket/file-78 | 1 + .../azurite/blobstore/some-bucket/file-79 | 1 + .../azurite/blobstore/some-bucket/file-8 | 1 + .../azurite/blobstore/some-bucket/file-80 | 1 + .../azurite/blobstore/some-bucket/file-81 | 1 + .../azurite/blobstore/some-bucket/file-82 | 1 + .../azurite/blobstore/some-bucket/file-83 | 1 + .../azurite/blobstore/some-bucket/file-84 | 1 + .../azurite/blobstore/some-bucket/file-85 | 1 + .../azurite/blobstore/some-bucket/file-86 | 1 + .../azurite/blobstore/some-bucket/file-87 | 1 + .../azurite/blobstore/some-bucket/file-88 | 1 + .../azurite/blobstore/some-bucket/file-89 | 1 + .../azurite/blobstore/some-bucket/file-9 | 1 + .../azurite/blobstore/some-bucket/file-90 | 1 + .../azurite/blobstore/some-bucket/file-91 | 1 + .../azurite/blobstore/some-bucket/file-92 | 1 + .../azurite/blobstore/some-bucket/file-93 | 1 + .../azurite/blobstore/some-bucket/file-94 | 1 + .../azurite/blobstore/some-bucket/file-95 | 1 + .../azurite/blobstore/some-bucket/file-96 | 1 + .../azurite/blobstore/some-bucket/file-97 | 1 + .../azurite/blobstore/some-bucket/file-98 | 1 + .../azurite/blobstore/some-bucket/file-99 | 1 + preset/azurite/README.md | 73 ++++++++ preset/azurite/blobstorage_test.go | 68 ++++++++ preset/azurite/options.go | 12 ++ preset/azurite/options_blobstorage.go | 143 ++++++++++++++++ preset/azurite/preset.go | 108 ++++++++++++ preset/azurite/preset_internal_test.go | 50 ++++++ preset/azurite/preset_test.go | 161 ++++++++++++++++++ .../azurite/testdata/blobstorage/ignored-file | 0 .../blobstorage/some-container/dir/f-1 | 1 + .../blobstorage/some-container/dir/f-10 | 1 + .../blobstorage/some-container/dir/f-2 | 1 + .../blobstorage/some-container/dir/f-3 | 1 + .../blobstorage/some-container/dir/f-4 | 1 + .../blobstorage/some-container/dir/f-5 | 1 + .../blobstorage/some-container/dir/f-6 | 1 + .../blobstorage/some-container/dir/f-7 | 1 + .../blobstorage/some-container/dir/f-8 | 1 + .../blobstorage/some-container/dir/f-9 | 1 + swagger/swagger.yaml | 54 +++++- 127 files changed, 932 insertions(+), 5 deletions(-) create mode 100644 internal/gnomockd/azurite_test.go create mode 100644 internal/gnomockd/testdata/azurite.json create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-1 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-10 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-100 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-11 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-12 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-13 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-14 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-15 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-16 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-17 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-18 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-19 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-2 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-20 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-21 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-22 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-23 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-24 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-25 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-26 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-27 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-28 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-29 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-3 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-30 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-31 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-32 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-33 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-34 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-35 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-36 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-37 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-38 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-39 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-4 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-40 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-41 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-42 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-43 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-44 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-45 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-46 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-47 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-48 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-49 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-5 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-50 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-51 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-52 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-53 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-54 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-55 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-56 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-57 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-58 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-59 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-6 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-60 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-61 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-62 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-63 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-64 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-65 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-66 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-67 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-68 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-69 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-7 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-70 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-71 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-72 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-73 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-74 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-75 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-76 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-77 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-78 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-79 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-8 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-80 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-81 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-82 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-83 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-84 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-85 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-86 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-87 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-88 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-89 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-9 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-90 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-91 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-92 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-93 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-94 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-95 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-96 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-97 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-98 create mode 100644 internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-99 create mode 100644 preset/azurite/README.md create mode 100644 preset/azurite/blobstorage_test.go create mode 100644 preset/azurite/options.go create mode 100644 preset/azurite/options_blobstorage.go create mode 100644 preset/azurite/preset.go create mode 100644 preset/azurite/preset_internal_test.go create mode 100644 preset/azurite/preset_test.go create mode 100644 preset/azurite/testdata/blobstorage/ignored-file create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-1 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-10 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-2 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-3 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-4 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-5 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-6 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-7 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-8 create mode 100644 preset/azurite/testdata/blobstorage/some-container/dir/f-9 diff --git a/.circleci/config.yml b/.circleci/config.yml index a4eb4b63..ee3e2e69 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -232,6 +232,18 @@ jobs: name: Test server command: go test -race -cover -v ./internal/gnomockd -run TestVault + test-azurite: + machine: true + resource_class: large + steps: + - setup-for-go-test + - run: + name: Test preset + command: go test -race -cover -v ./preset/azurite/... + - run: + name: Test server + command: go test -race -cover -v ./internal/gnomockd -run TestAzurite + ### preset tests go here workflows: diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 5c44792d..e30947c8 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -473,8 +473,32 @@ jobs: cat preset-cover.txt server-cover.txt > coverage.txt bash <(curl -s https://codecov.io/bash) + test-azurite: + name: "[preset] azurite" + runs-on: ubuntu-latest + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + steps: + - name: Set up Go 1.20 + uses: actions/setup-go@v1 + with: + go-version: 1.20 + - name: Check out code into the Go module directory + uses: actions/checkout@v1 + - name: Get dependencies + run: go get -v -t -d ./... + - name: Test preset + run: go test -race -cover -coverprofile=preset-cover.txt -coverpkg=./... -v ./preset/azurite/... + - name: Test server + run: go test -race -cover -coverprofile=server-cover.txt -coverpkg=./... -v ./internal/gnomockd -run TestAzurite + - name: Report coverage + run: | + cat preset-cover.txt server-cover.txt > coverage.txt + bash <(curl -s https://codecov.io/bash) + test-vault: name: "[preset] vault" + runs-on: ubuntu-latest env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} @@ -495,4 +519,5 @@ jobs: run: | cat preset-cover.txt server-cover.txt > coverage.txt bash <(curl -s https://codecov.io/bash) + ### preset tests go here diff --git a/README.md b/README.md index 8a132a0d..8ed47c9b 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,6 @@ The power of Gnomock is in the Presets. Existing Presets with their supported*\* **Supported** versions are tested as part of CI pipeline. Other versions might work as well.* - | Preset | Go package | Go API | Supported versions | arm64 | |--------|------------|--------|--------------------|-------| [Localstack](https://github.com/localstack/localstack) (AWS) | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/localstack) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/localstack?tab=doc) | `0.12.2`, `0.13.1`, `0.14.0` | ✅ @@ -123,6 +122,7 @@ CockroachDB | [Go package](https://github.com/orlangure/gnomock/tree/master/pres InfluxDB | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/influxdb) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/influxdb?tab=doc) | `2.0.4-alpine` | ✅ Cassandra | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/cassandra) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/cassandra?tab=doc) | `4.0`, `3` | ✅ Vault | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/vault) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/vault?tab=doc) | `1.10.11`, `1.11.8`, `1.12.4`, `1.13` | ✅ +Azurite | [Go package](https://github.com/orlangure/gnomock/tree/master/preset/azurite) | [Reference](https://pkg.go.dev/github.com/orlangure/gnomock/preset/azurite?tab=doc) | `3.22.0` | ✅ It is possible to use Gnomock [directly from Go](https://pkg.go.dev/github.com/orlangure/gnomock#StartCustom) code without any presets. HTTP API only allows to setup containers using presets that exist in this repository. diff --git a/cmd/server/presets.go b/cmd/server/presets.go index c6d5eb72..e51fde21 100644 --- a/cmd/server/presets.go +++ b/cmd/server/presets.go @@ -3,6 +3,7 @@ package main // all known presets should go right here so that they are available when // requested over HTTP. import ( + _ "github.com/orlangure/gnomock/preset/azurite" _ "github.com/orlangure/gnomock/preset/cassandra" _ "github.com/orlangure/gnomock/preset/cockroachdb" _ "github.com/orlangure/gnomock/preset/elastic" diff --git a/go.mod b/go.mod index edf97c8f..a9ebdd49 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/orlangure/gnomock go 1.20 require ( + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0 github.com/Microsoft/go-winio v0.5.2 // indirect github.com/aws/aws-sdk-go v1.44.247 github.com/bradfitz/gomemcache v0.0.0-20230124162541-5f7a7d875746 @@ -40,6 +41,8 @@ require ( require golang.org/x/mod v0.8.0 require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 // indirect github.com/cenkalti/backoff/v3 v3.0.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/deepmap/oapi-codegen v1.10.1 // indirect diff --git a/go.sum b/go.sum index 65084af2..f6ff65ca 100644 --- a/go.sum +++ b/go.sum @@ -32,10 +32,18 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0 h1:VuHAcMq8pU1IWNT/m5yRaGqbK0BiQKHT8X4DTp9CHdI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.3.0/go.mod h1:tZoQYdDZNOiIjdSn0dVWVfl0NEPGOJqVLzSrcFk4Is0= github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1 h1:Oj853U9kG+RLTCQXpjvOnrv0WaZHxgmZz1TlLywgOPY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.1/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0 h1:u/LLAOFgsMv7HmNL4Qufg58y+qElGOt5qv0z1mURkRY= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.0.0/go.mod h1:2e8rMJtl2+2j+HXbTBwnyGpm5Nou7KhvSfxOq8JpTag= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= @@ -72,6 +80,7 @@ github.com/deepmap/oapi-codegen v1.10.1 h1:xybuJUR6D8l7P+LAuxOm5SD7nTlFKHWvOPl31 github.com/deepmap/oapi-codegen v1.10.1/go.mod h1:TvVmDQlUkFli9gFij/gtW1o+tFBr4qCHyv2zG+R0YZY= github.com/denisenkom/go-mssqldb v0.12.3 h1:pBSGx9Tq67pBOTLmxNuirNTeB8Vjmf886Kx+8Y+8shw= github.com/denisenkom/go-mssqldb v0.12.3/go.mod h1:k0mtMFOnU+AihqFxPMiF05rtiDrorD1Vrm1KEz5hxDo= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= @@ -140,6 +149,7 @@ github.com/gocql/gocql v1.3.2 h1:ox3T+R7VFibHSIGxRkuUi1uIvAv8jBHCWxc+9aFQ/LA= github.com/gocql/gocql v1.3.2/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= @@ -276,6 +286,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/labstack/echo/v4 v4.7.2/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= @@ -347,6 +358,7 @@ github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/internal/gnomockd/azurite_test.go b/internal/gnomockd/azurite_test.go new file mode 100644 index 00000000..ae202a2e --- /dev/null +++ b/internal/gnomockd/azurite_test.go @@ -0,0 +1,95 @@ +package gnomockd_test + +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "net/http/httptest" + "os" + "strings" + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" + "github.com/orlangure/gnomock" + "github.com/orlangure/gnomock/internal/gnomockd" + "github.com/orlangure/gnomock/preset/azurite" + "github.com/stretchr/testify/require" +) + +func TestAzurite(t *testing.T) { + t.Parallel() + + h := gnomockd.Handler() + bs, err := os.ReadFile("./testdata/azurite.json") + require.NoError(t, err) + + buf := bytes.NewBuffer(bs) + w, r := httptest.NewRecorder(), httptest.NewRequest(http.MethodPost, "/start/azurite", buf) + h.ServeHTTP(w, r) + + res := w.Result() + + defer func() { require.NoError(t, res.Body.Close()) }() + + body, err := io.ReadAll(res.Body) + require.NoError(t, err) + + require.Equalf(t, http.StatusOK, res.StatusCode, string(body)) + + var c *gnomock.Container + + err = json.Unmarshal(body, &c) + require.NoError(t, err) + + connString := fmt.Sprintf( + azurite.ConnectionStringFormat, + azurite.AccountName, + azurite.AccountKey, + c.Address(azurite.BlobServicePort), + azurite.AccountName) + + ctx := context.Background() + azblobClient, connErr := azblob.NewClientFromConnectionString(connString, nil) + require.NoError(t, connErr) + + var maxResults int32 = 200 + options := azblob.ListBlobsFlatOptions{ + Include: container.ListBlobsInclude{}, + Marker: nil, + MaxResults: &maxResults, + Prefix: nil, + } + pager := azblobClient.NewListBlobsFlatPager("some-bucket", &options) + require.Equal(t, pager.More(), true) + + pagesScanned := 0 + + for pager.More() { + pagesScanned++ + + resp, err := pager.NextPage(ctx) + + require.NoError(t, err) + require.Equal(t, 100, len(resp.Segment.BlobItems)) + + for _, v := range resp.Segment.BlobItems { + require.True(t, strings.HasPrefix(*v.Name, "/file-")) + } + } + + require.Equal(t, 1, pagesScanned) + + bs, err = json.Marshal(c) + require.NoError(t, err) + + buf = bytes.NewBuffer(bs) + w, r = httptest.NewRecorder(), httptest.NewRequest(http.MethodPost, "/stop", buf) + h.ServeHTTP(w, r) + + res = w.Result() + require.Equal(t, http.StatusOK, res.StatusCode) +} diff --git a/internal/gnomockd/testdata/azurite.json b/internal/gnomockd/testdata/azurite.json new file mode 100644 index 00000000..dc53066e --- /dev/null +++ b/internal/gnomockd/testdata/azurite.json @@ -0,0 +1,8 @@ +{ + "preset": { + "blobstore_path": "./testdata/azurite/blobstore", + "version": "3.22.0" + }, + "options": { + } +} diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-1 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-1 new file mode 100644 index 00000000..59509119 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-1 @@ -0,0 +1 @@ +b72ec76436b8a91d7dd090dcda45c415ab29dbf2161675b87eb36dcab3d89a52faf1739a319ed2f8bd09e80823d6ca51fd71486b477ef8eefb1fda86845b63e5 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-10 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-10 new file mode 100644 index 00000000..52542372 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-10 @@ -0,0 +1 @@ +288a3d8cd6db81679c7fe49c9369d4e35f302a8b763a5e88b77a9d7948536d43dc45d6658f44b49ac90ece6562595f8204d1425a40174c5634cbf1c35e5e3bb8 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-100 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-100 new file mode 100644 index 00000000..41d6a8b3 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-100 @@ -0,0 +1 @@ +4f0d13f3f4698ef87a68aaef3d4170edcab46ca9623f805da0fd354eb80def890444d901facac717011d6d9f1b9703c6e559fa28fab3521d965b80ba5b6f2de4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-11 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-11 new file mode 100644 index 00000000..b7c4dc8b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-11 @@ -0,0 +1 @@ +0b02647f28bf44c188a0ab65d67ccbd7a6e6b6625c7760fdc7f492871c1ed69d1d9c2f1911456dabf90282c980683ea5ad04524b6d64d0a7d5340e8500e2cce7 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-12 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-12 new file mode 100644 index 00000000..31d2663b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-12 @@ -0,0 +1 @@ +02f0a852ac7c53ba0d04c34385a1ccfb96d615af89caa066466ed0923a5abcdf0f0ad73a6bd92c655a1eb67ef55b6960d17927cc2fd2f1389f6d3be6be927d91 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-13 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-13 new file mode 100644 index 00000000..56f459d0 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-13 @@ -0,0 +1 @@ +1c9b6194392fcfcea82208553b59f8bdbb50c44ded7037010ad946afa2a8dca2d9125a4b20074134f7ae432cd7a677439e43262ae8568267702580347bfe72c3 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-14 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-14 new file mode 100644 index 00000000..44bfc831 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-14 @@ -0,0 +1 @@ +b05cef2d070695b395aad949d0fb188f749c73998b95bb24bc0d5eb91df82a8b70141c80f8d9fb834d82710c7071221f8e269d31dba312e8e65b380e35bed749 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-15 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-15 new file mode 100644 index 00000000..3a7ccd46 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-15 @@ -0,0 +1 @@ +fdd491662466a8dbd4b8a540df7525b6e648f79c840413f98472ba748c0d388fcb2f148d549f14a15230250461357b4294161c954cdc9e68b1124a147b7933bf diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-16 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-16 new file mode 100644 index 00000000..c93d368d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-16 @@ -0,0 +1 @@ +228387a75e1b50a34e86e88ea692fe7317848e07a21ec8ecf6e56f8e46919ab9efec897b8ce3f9c3976bfbbc41e2e3337b585d53c0b02cc6e4133c08413386bb diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-17 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-17 new file mode 100644 index 00000000..31d4f786 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-17 @@ -0,0 +1 @@ +bf7935459585a5d86d098cb1f705a4ee2260fd745c7c3471d9b2498c94317c2d8c4dbea7ccd59a016583cbfb912ebebe2a0ecb94a21984f06da97f14ac859ddc diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-18 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-18 new file mode 100644 index 00000000..0dc3c4e7 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-18 @@ -0,0 +1 @@ +b9e5b21f78064ed3221eb020bcf5ac1038f204954539001e114f23bcec4ee9b211001dcf89b8ab22ac1296bc864d68c67e8545e98cfdf79fe8e8d929f7a03a30 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-19 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-19 new file mode 100644 index 00000000..46acb5d3 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-19 @@ -0,0 +1 @@ +3647089511907596192e85b6f1aece4bef2a23e410a7453dcf94e87d5dc5ac98f8b0ae6526e44015ac555bdc86181c83ef4428484e3c2b8ab2083e5e6a97abde diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-2 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-2 new file mode 100644 index 00000000..38ed91af --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-2 @@ -0,0 +1 @@ +dbb1d95fa804ae3cb81334b04cc37b45c4a70955c28069079b99d62d25423ba913a1be52224aca3b8cf69e71dba9f3460e86ccbe47e71bdbb8d99c5fe28d8dbf diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-20 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-20 new file mode 100644 index 00000000..d478110e --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-20 @@ -0,0 +1 @@ +f96d7440645428b612a69108edd2fa7f5f05e0993d32f84df6d2574e1beaae74e7f3b0298edeadc2b92a94d73bbe18c49730cfda18c4acc3409d9eb934d8630e diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-21 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-21 new file mode 100644 index 00000000..7159e72d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-21 @@ -0,0 +1 @@ +e1bed71ab9700a7942f6b97813f0d196365f9ab0366b95a1dd00f22e3ba614131c10a757bcc73c1687b9b5922558bceeb20cbf26222911cfb92b7301b7efd838 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-22 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-22 new file mode 100644 index 00000000..6df79542 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-22 @@ -0,0 +1 @@ +d80774e39cb322471aca968a259944ac78c0b8cb755d67f182601b09da4c585bde50e95547c8fcacb30ffd530c121d1152b0c84378d17cab07a17e8247157c05 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-23 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-23 new file mode 100644 index 00000000..b55c7c1b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-23 @@ -0,0 +1 @@ +6d8dec47389adb0a42be012e47df63a75248b61b18e92bdeee52cce9a7ce3358198289ec8b6cc625564c7c35bfa47da8acd3564edce650e072361c8394ebeb86 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-24 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-24 new file mode 100644 index 00000000..bd867399 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-24 @@ -0,0 +1 @@ +50559c51ce97720c0b5c1daa57140c2c3ca715ce51a5328b1e3a0157aad6a4c893a56b4e1a5784a8e0d4d81e6689376acf776d2d720f6b8cd8d14c38ab720dc4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-25 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-25 new file mode 100644 index 00000000..f66a7cb3 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-25 @@ -0,0 +1 @@ +02ab26ece2518e9a813e0447ab63c1a46de881ec7c694b7394ed8f5e7806b26d2a1b1b7d33af9efd5724348d901c71019c05984cda53a95bf743b71ca533c73b diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-26 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-26 new file mode 100644 index 00000000..dacd6407 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-26 @@ -0,0 +1 @@ +7f8d115625d6422441f0fdc30c247640f39a688051e3637ab797a68df790653cd7a5c38d57eb237d0133bf374d3231816dbd3d903e44e92ab211fca0dc247cb3 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-27 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-27 new file mode 100644 index 00000000..bae57ffa --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-27 @@ -0,0 +1 @@ +e95feae17e50290f16b21214996c908e9510a0c1c29168dc0a58af3febb912007fda029ac2abc20da9f53f7a277d973d3a6d5ca4fddd37cf117952de308f9993 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-28 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-28 new file mode 100644 index 00000000..a514a7f3 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-28 @@ -0,0 +1 @@ +0a4aad7fc04e7666f49cd7cbf660ef0db3ca84bc301457973f6574aae8019984bc6ab2e8f969aed3a570bc8c0a937a20f88a3d771775a0d4d42e86c602d5fdbe diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-29 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-29 new file mode 100644 index 00000000..66bb9ec4 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-29 @@ -0,0 +1 @@ +6d89098292d0cad2ef04e1b291f52e5c912da6e7b865aad3a24996774e3a051c88f76e5b5644dd9cb5f2ad61b641baaafd3a21b25b4a0c1aedca13292241fb5c diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-3 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-3 new file mode 100644 index 00000000..be975dfa --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-3 @@ -0,0 +1 @@ +cc896a51322e5a3a506b5bd41e43e1638753a8040e5d5748c8f8164b8a323abba4d5424304d30d08b33aa4a5d4a1eb314efa48debeda09edaacd35078cbdc850 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-30 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-30 new file mode 100644 index 00000000..71726682 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-30 @@ -0,0 +1 @@ +f0a725f71d5383b88862dd0cb7639abe176eae7095df1f2721a67b022e43d14635f3585f352e76284c7a07f59e0a174b4fd1fa677ef2d86bdca4a18c18bc9bef diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-31 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-31 new file mode 100644 index 00000000..dc40d456 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-31 @@ -0,0 +1 @@ +a9007229be777af2cb730ed7ca738a5ddfed0d173c54fbfaf27a9177d22c05f260d08de8373eef34c41119aff5c474302c4c3f625099586adb1f730eb3d405a5 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-32 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-32 new file mode 100644 index 00000000..ee9e580b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-32 @@ -0,0 +1 @@ +41c165b3cdb442092c7be171a9e1ba1eb2dd643f6d213ce387d8283274aa02e13adc07dc7c77a8962985d15f5a5cc1e8e59284513e29ef12781a51bdc6ef8b80 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-33 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-33 new file mode 100644 index 00000000..0aa7aa72 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-33 @@ -0,0 +1 @@ +6fbbc2f46aa2d651c8f0630d1f2adf0f89f7c4dd8247098b87a1c0fc740ade7a200bfd957a43ca4941798d3038e1e0e71650562e92f8ec460eb81be92e6743a7 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-34 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-34 new file mode 100644 index 00000000..aa236ed6 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-34 @@ -0,0 +1 @@ +47dddfbad04b48396b7f76becdf5232ade5603c9059bf00a9ff4deb5bc8f9601506191b367fae5ea15882a266849cef5dafdc0c3b8b08af5feaed87b5788667c diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-35 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-35 new file mode 100644 index 00000000..55dad985 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-35 @@ -0,0 +1 @@ +72e9030e39fc9d68582269fcd7f23b93154617854b3ef6cd02c1074024e333384352e4ae047092ed5c3b773a4ff350e1b21634cd2224b90cbaef3f67b4ed8c3e diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-36 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-36 new file mode 100644 index 00000000..72eb0609 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-36 @@ -0,0 +1 @@ +de08d01a267d1b2fc724b49d7dfecca8da81779546195eee337d2aadda3d1fcb8295e78f5f1de78b9d0de44cf70eafc7057361502b5164fe1fb468bf1c56fd81 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-37 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-37 new file mode 100644 index 00000000..8e9b9439 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-37 @@ -0,0 +1 @@ +cb369a9de31222a52db25b6918b2bbda9e68a4edd6e2a6d1d78320dee05c0987eb12556fdd16520489866f0e139cf4c19eb09931dbba08df80adb3f5e192e16d diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-38 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-38 new file mode 100644 index 00000000..4b0854b8 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-38 @@ -0,0 +1 @@ +e419bb0c522fbc237c507dd24a61a59e5a893631dff96b4e3dd15eea3b7be92261bb90420e31b97c40862ac3e71139a799af41ce90e717ca3ad27f537ba1c39b diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-39 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-39 new file mode 100644 index 00000000..6f31bdf9 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-39 @@ -0,0 +1 @@ +f1f7ca7bbaa97605c1a496c488d8e5fa3a4b3f14c55d03ccdc1e8fffabf2b0edeef784c376a34ff3718a01c0614468334291d7e969884f4d1d684847dd05af2f diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-4 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-4 new file mode 100644 index 00000000..6d4e80db --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-4 @@ -0,0 +1 @@ +e822087fe6d58e3741ecfb26515e2618876d320f8f191b5829e54b1a7e6ca90eda654d91bb4aabb195028dbb0e0418446de450bf17f2db22b75640f9634f7af3 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-40 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-40 new file mode 100644 index 00000000..53b6a706 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-40 @@ -0,0 +1 @@ +93905d1540d5ee806a9120de175455e94bdbb66b9bb6bb76cde771bd1205d6fab5d1b363cfd1a60a5aeea98af31b5853e07882b42c735ffbffb531c6e0d18a12 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-41 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-41 new file mode 100644 index 00000000..b3385ee2 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-41 @@ -0,0 +1 @@ +6fde43af7765155d75b43ef0d50e5bd408787eeacb380424eebde10306d3f467aade28ae520b0c7b4cbdf5c63b5f92533503718d05aaa21f3642054037aba60d diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-42 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-42 new file mode 100644 index 00000000..978a3d18 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-42 @@ -0,0 +1 @@ +74708d0d32981cd92f7486da74cf68e46068aba7d244dc5681c26959abcbeb56abe68cfe0728aea53adc3dc308651e8171fb2f22506c83907561dde6fa8669dd diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-43 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-43 new file mode 100644 index 00000000..017f4eae --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-43 @@ -0,0 +1 @@ +760db25a323a535ee7e584fb209aa739d3ac66684e443bc39686c687ca6d325b5bd7c58f454983c317cb8ccf444a6a6413dcd54ce0fd6dfd2f4fa92ac5c6e3db diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-44 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-44 new file mode 100644 index 00000000..fcd5fa9b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-44 @@ -0,0 +1 @@ +6fce7db5951ed9dfaa2f3b9d625fab289db6c51098fb9324108f2235261fe9478628e24d42307472880277cf949dc4a00a91955616eed4dae1b5797b397e8c61 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-45 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-45 new file mode 100644 index 00000000..0d983d02 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-45 @@ -0,0 +1 @@ +5ef22a53f3a1491903450c1cda2c2cb4d3e660c1f8b377e11d5d4411492e0942c455203e46f35270f56810ec33998a7d5a147817f0a2a84886aad51d25daaedb diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-46 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-46 new file mode 100644 index 00000000..71f31b9a --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-46 @@ -0,0 +1 @@ +9c7860d924f2f5e3943c13bd40f19d250fa450b925b99f57308685ff19e0ded3b98b6ed08219d37f540c1f515e2a3b31060bc3a6c90a3f9733745798b636b048 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-47 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-47 new file mode 100644 index 00000000..2a4df7f5 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-47 @@ -0,0 +1 @@ +899c00541c402583e962a0b6e0e46034a08eae0944f1934823545a32fd436447ef8dabed40aca6951ebe3c18257c9a29e44eac42fee1003438e28071aff0cbd9 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-48 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-48 new file mode 100644 index 00000000..fcebb4d5 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-48 @@ -0,0 +1 @@ +b00e050eb9120f7ab42faf321bbd21cf6663e8320e68d5f113b0e1182a73f13ef28c636f57e76e0f418cc9c3d512da77050b55bf9d5b4f994e6695ddf135390e diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-49 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-49 new file mode 100644 index 00000000..f8079c04 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-49 @@ -0,0 +1 @@ +88a3c8c7371290e0a4d5a5da9697fd294978cc651371c102c83af5795249bfffa3b9dc3ed35b7ad3a0ffec30bb289e8240514adf008963840a9c9abef978d7d9 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-5 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-5 new file mode 100644 index 00000000..5827bb83 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-5 @@ -0,0 +1 @@ +d07c638321adfe3ed251210503be40961bc9d7cd202b03ef489e4184ffcf9de9708bedc88692d8b79312a030a1a9e137723804b408e5c51fbe4dfa33ffd4d7f5 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-50 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-50 new file mode 100644 index 00000000..de776d47 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-50 @@ -0,0 +1 @@ +a27522a00fbf2de703b7c897eda6f35259833c6ebdad34fa5ca06d8f039b59cff1987a77ead15525fc943db22234c54a951c39f21ba04c6cba20e6c38f566892 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-51 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-51 new file mode 100644 index 00000000..b8a96ba9 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-51 @@ -0,0 +1 @@ +5731f3fca15cae7a0778b51fd1fe2eac5384424397665a51e8b259bed52789f5909c4d49fa62c2c672a971c549d156087f7371e736e24c71ee97d6ff8b34fe11 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-52 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-52 new file mode 100644 index 00000000..0ebb2d25 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-52 @@ -0,0 +1 @@ +24d942b642fb31598f456116dcd4c2ef5203640ab4431266deff216bcb5d5b5d7b8c3525b013d397ace924e46df6c09ed2ad675cd7f499152b491e34d0671691 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-53 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-53 new file mode 100644 index 00000000..354a32eb --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-53 @@ -0,0 +1 @@ +e7a7199d72d6f6c3f9127fc9115a201df5700164162f1fba160f513e9a8dfb5d1d4a1ec7235112e6407138f65ea972b327380cc9dacc050e0fe0467ee661ad93 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-54 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-54 new file mode 100644 index 00000000..d862bdc6 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-54 @@ -0,0 +1 @@ +77704e3571dca17670dababaa2fede596605bac5ebf180230c2113bb9d77bc85428c51d6e862ca3225a21165f9ae7d8bb3f143f06fbe91e4ec3b31c25411d406 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-55 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-55 new file mode 100644 index 00000000..f7b2568a --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-55 @@ -0,0 +1 @@ +34de23c7c874eabd8a5a61412710ad7d6924a79ca829be3bcd57cbad8e9eed4b04cc1c21240629e9d1bd07dab03af3c28a2ce7e4e364be3f197b5cd79f3dfdb7 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-56 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-56 new file mode 100644 index 00000000..99c0f4db --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-56 @@ -0,0 +1 @@ +a09dc822a6660ff4701eaac4952ed7e2de29c24e6c6bf297f62c655d24cacf28c213fa0a8c436b4cbf3db7cd91804678037ae2a21cecc11bbf1e56444190e312 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-57 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-57 new file mode 100644 index 00000000..bd157cbd --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-57 @@ -0,0 +1 @@ +8e24754ec0a3166f8402aed38786b7b4a85f55ccbc6cb566b168e071bb2f7fc005075ccb9122e889786fa0be4cf4dc4b176c480b5c247b3f96a76fc0b4c49e5f diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-58 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-58 new file mode 100644 index 00000000..3443c0c7 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-58 @@ -0,0 +1 @@ +59fe66b21d8e8f8c57a38c21165a5e0ea33baa403e6791d89340873818e41376c945c6807cd03bfde19c97ca867e75f38bd5c2b12faa1e2af7332e7b84494e84 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-59 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-59 new file mode 100644 index 00000000..b960ffbb --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-59 @@ -0,0 +1 @@ +ffe65e87d8de873dbfbeba2acada0ea7a5227a5225e89fb254fb61c187ceb9df83fb7aa946d73e683c87223bae7c0ef8f0f011a1e30beb31e066e88a164f240c diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-6 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-6 new file mode 100644 index 00000000..2872bbbc --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-6 @@ -0,0 +1 @@ +f5404950415a1d51601286904ca3b0edf5f4ec2bae9d3ab383f02275aa8d5c105e287e83e561d4dc8fd2ec7b25221993e91327aeae252741e4fe2c814e74e1a7 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-60 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-60 new file mode 100644 index 00000000..94eaed57 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-60 @@ -0,0 +1 @@ +dcb9c392f411e05a68992ebac50f2c4853e7251bd81254240821f4097d1a2e793330d0f2c1329b116bd538222299fd02ad3ac4dc068da70eee1eb3d1778f97b1 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-61 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-61 new file mode 100644 index 00000000..04e3473d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-61 @@ -0,0 +1 @@ +2b3e159a9c59af875420c1b5f64a2b46e0ca84f80535464810c66c1f7528ba1267e6c2a099341af73d4c28465903e990ab061abd85bd6b1111fa42cf33714d31 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-62 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-62 new file mode 100644 index 00000000..8da08f81 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-62 @@ -0,0 +1 @@ +696191f758796240b28083efe4e01c565d6f6835140f571e08d2e30073c31d3030366229eaf9a118a3ccc6a477e657ee4a727cc7a2b6ad6c837aa866dc18aa7e diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-63 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-63 new file mode 100644 index 00000000..43cbf56d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-63 @@ -0,0 +1 @@ +d4fd38c5215ad663a808705ce05ccab59c0024cc24c3f7883f89ee21e68964697543f205158fdd5b9567e188fbcf6969b9464cb4e1970269c3ae5097fca96de4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-64 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-64 new file mode 100644 index 00000000..2c73bf58 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-64 @@ -0,0 +1 @@ +337e1a576b7ec095cfa7785fe9d5beb7a7c8b7999f41c12443be24ae122f21a4f6bb43fef18538c9ac77093bf519455de535374948b8b1c6e991e516023cbdff diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-65 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-65 new file mode 100644 index 00000000..375f02f4 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-65 @@ -0,0 +1 @@ +1c7a5fb0ca890e2a29a4e4f1e4f47696fc7f9687119445d5b168bad76b337a4df1d1a1ead07bc85840d58ad2cf3896348a83e2ee0d7741cd1c4644e1be62753d diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-66 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-66 new file mode 100644 index 00000000..d3699609 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-66 @@ -0,0 +1 @@ +f6012f16fd6bee94268e6cef5d5ab41a83eb39897c5b3c189ebbd8a14f2559975dd5fb3ab2411a09797afcd5f942f1d198a49a0841f4b4af9b431e964398f186 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-67 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-67 new file mode 100644 index 00000000..a479199f --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-67 @@ -0,0 +1 @@ +6ec0a4e45fe1475f81e1dc61ae7cbf138083fa4fc3fb5e453dc754aa698127273701170874b7524c84b1a7baff92fff0b3c7dc35f57de36e0d23ac572232be90 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-68 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-68 new file mode 100644 index 00000000..6fb34870 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-68 @@ -0,0 +1 @@ +3a1ff6752202745268a9ff4dbc67d63c702a1ece27783279656db844265ac9275b53caf27954a93882e180154cc45f761c904263887be62c9912f89feb240235 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-69 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-69 new file mode 100644 index 00000000..a7563dbc --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-69 @@ -0,0 +1 @@ +2cfffc006e4b1fb683c9351d1006e2c3a11124d7fefdfb80ce3e071b55fb39264603db3441cf20ba7f2ea4865006a5b06cc313792bc716df725dd270b1ec0cc8 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-7 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-7 new file mode 100644 index 00000000..dee22a93 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-7 @@ -0,0 +1 @@ +71b0656836e2f217bd142629a6d186e13d03817c21b395769de7c7713374c0bf9ce8e47ca781c339d9770a7cf81e9c6ad5ea1e5804ce8156da7a2fbea5043ef7 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-70 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-70 new file mode 100644 index 00000000..f35694f4 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-70 @@ -0,0 +1 @@ +a0038a17d814ed93cae25d5ecdc2f05de980905bf991c03763d720c5b86e3a1b7768cfbae9f630307caf3707f0f073a7ab0ed7f369f54723fa11615591c167b9 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-71 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-71 new file mode 100644 index 00000000..2335bdaf --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-71 @@ -0,0 +1 @@ +097252f28f1f807358d67c57f5c4f3740ba82584d58062e6e06d383d50152a34c4d1625e1897b96e16207b110ca04392fdbdbbcab00a067ce42359ed5b856345 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-72 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-72 new file mode 100644 index 00000000..ce759bae --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-72 @@ -0,0 +1 @@ +8058c2bb0d83237e7cd6518cc4e49669cfe65882d3545791ab0241c1ac033bdb93ac4c450d28ded825d64521645cf07fda8781983b6af6cf5f5e27260149b853 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-73 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-73 new file mode 100644 index 00000000..02b46ec0 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-73 @@ -0,0 +1 @@ +3c129e1c381bcfa2d297190704eea87d2660dcfa1a5ad8739b2218e86f906513f118d1f4d7eb7ac9c5b0aa46c7a88eddd7927ee2e4d5c0d4f1be72b015dcd0c4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-74 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-74 new file mode 100644 index 00000000..336e4091 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-74 @@ -0,0 +1 @@ +8d4e483d365990722bc7cf189f82f02312e4b7403631f00df8d4f4ef7e1d0db79c19bc7643c24a49307113616855b78c582af23c582749e45d45e6631acbc95d diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-75 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-75 new file mode 100644 index 00000000..080aa21c --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-75 @@ -0,0 +1 @@ +8e6b6f95e994fc25ccb832f6a6f936757a2881b5108dd374e7907e938e3a60b741c13e656a6f07d181fa4f1f504ede921fd145e159d6755456402fbe9f763c99 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-76 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-76 new file mode 100644 index 00000000..15511ad6 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-76 @@ -0,0 +1 @@ +4bfb71fe21c4d827be31eb126a265e7b3e8a19d1bd733e0a79b986c1742b879cc2bd5a4048bd9a22963e6460316b9217461deb92098a6f8f2d65b16e9776eef8 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-77 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-77 new file mode 100644 index 00000000..932e542f --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-77 @@ -0,0 +1 @@ +4199a06b79652c896d3270392c84d5b69afbdd2745ac929d601c7d98a3fc709fcb3d6eb597162e9d3f049e59f016b939952ceedd948ab5a444c26a8f6b1a231a diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-78 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-78 new file mode 100644 index 00000000..5e1d3f1f --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-78 @@ -0,0 +1 @@ +73f8534c71372f89a0257fdedb1272bd280ffe8f5501c7e7845faeb7e1ee364cee409f300eca943adad066a5c67b97d41db6a46dd4628688a9bd1cf3677315c4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-79 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-79 new file mode 100644 index 00000000..91c0a6c0 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-79 @@ -0,0 +1 @@ +28d32168cba392930b8b9474b15c5c2d1e16bf2934a42a679b30b6881cb6225c96248f02caa07ea0da92fa9cdb5f8b6d757223fcd79e13ad71217c8ada74df54 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-8 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-8 new file mode 100644 index 00000000..8e4b0bd7 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-8 @@ -0,0 +1 @@ +fc652785aaf66f0b51cd6f2e84f6a9ffbf3ee4d3f6ca3d3ecd6ea74a46c62c428c690c2be09093f084b5ef2045a48e8e7dd5c58a19844154c223cbf6b2e51f64 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-80 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-80 new file mode 100644 index 00000000..3f3d96bb --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-80 @@ -0,0 +1 @@ +840fc7b0f84b58efc59fd2ce9fd20c24612731f2f7c0224784c69f835f8f8784b2195e760130c3359ae573bd7a87e4a6775272da99843f3518ec11be38fd2540 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-81 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-81 new file mode 100644 index 00000000..9e7d930f --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-81 @@ -0,0 +1 @@ +21f9495c52ab2f9f852d6bfcc169f7f58a610369acdaf68a76543c4a2ed8d9b056811e83d1c79ec73b4e97c0fdc9848f6bb6926e973efddeb4b67543a4228ac2 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-82 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-82 new file mode 100644 index 00000000..50f6987a --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-82 @@ -0,0 +1 @@ +25ae41d4b3fb3c2fe272027fcff0f2e7152271201138175176b330562f64fda91d18d0a3188399279bbf6dd38b05c50ef5ca25500bfea902fce54d49c8ba56f6 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-83 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-83 new file mode 100644 index 00000000..ac90fa25 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-83 @@ -0,0 +1 @@ +7af4d7f8f0c024f3519d04deb10d971355d3d21a566b336382c553023f657262d3300986effd78d001eb7c9153caaa843443b399ee6904253bb993236415a969 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-84 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-84 new file mode 100644 index 00000000..e8aad379 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-84 @@ -0,0 +1 @@ +903208c0b52b8fd27c2d7297608bdbbbaf4fdb84031d915b86f50b2453debb540ca669344ea3237ed22214a6e3fa3c79f37ebfd4389f22607d501004a9875c6d diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-85 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-85 new file mode 100644 index 00000000..fc213448 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-85 @@ -0,0 +1 @@ +f0c071e00fc14ddf5d57cb72447fcdd3eb227653839dbd7eed7f5489254aedd3bd4c878ea0f896c668a3be53b05d4b4a8874d60a95bb1b58e7d2e572c2499746 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-86 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-86 new file mode 100644 index 00000000..4ca8dd4d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-86 @@ -0,0 +1 @@ +81fd86426e718ce48901ea422204bda898f1f27816307f138e50df71b5a3dfcedff419228db2e0db233438bcdb4b145e21b101cc3e63dfeb7e84b42e60710674 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-87 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-87 new file mode 100644 index 00000000..c63f1772 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-87 @@ -0,0 +1 @@ +730c5e8eae189f5f1be87b87a6054c81097094fa4e3c493e2f6b8f12b5b7a956c51a427682723b36f0b5ceba6ea709eb6d6db6fb2d2d3f642494203703ce9121 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-88 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-88 new file mode 100644 index 00000000..8d81e227 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-88 @@ -0,0 +1 @@ +7500346b47c8981727ce1adc04009399d5fe9167d852b910a1e57b430f9eee595b1560f5afcb16af1a6c162668131496397427f93767cdf5b18103143ca89a65 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-89 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-89 new file mode 100644 index 00000000..b8ad7295 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-89 @@ -0,0 +1 @@ +5b62a2bda19e7ddca4f2a6ffca0d3f90f0e5be42e8b5c7ca6efabad118534242deeac2360b9bda778547617f48deccaf1c4c114144e4643ba9105d421fb21c41 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-9 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-9 new file mode 100644 index 00000000..dc9f6929 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-9 @@ -0,0 +1 @@ +f87eef6294a89cd8c016d16a48f18a4b38d97f6bcba923240cbe8746b2138ffd78cc386c676d4b1e531c8acfd48ef991f36b5323986202a83a59df777a11f367 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-90 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-90 new file mode 100644 index 00000000..a1bb70d6 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-90 @@ -0,0 +1 @@ +44a11d637c9f2adc53552114c519dbec246637897c67d1d5a2b3a106ef64aed8358a7cf7f33d979eadad80ffee23d3ede8c1e4263c387e8f22e92469ecf21f7c diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-91 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-91 new file mode 100644 index 00000000..de893610 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-91 @@ -0,0 +1 @@ +4d8515c1914f7c0b8364c1b145f76023a8d2b015cc9ca6e9772ce7b1756304cc96104d1f85148f63a9e9d7a47e5f508068c3b6a915a77ff608837c9e231d2d9e diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-92 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-92 new file mode 100644 index 00000000..3ff0ac5b --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-92 @@ -0,0 +1 @@ +09602c5825222aa0080acd56d44ba93f64b83b3aa4f91a75770e47913a8e83aa0735b248183af5c1cf2eff10397362e6b5f7b9f82751f65a7c81a6aa1dcd8f46 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-93 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-93 new file mode 100644 index 00000000..e61a0d3d --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-93 @@ -0,0 +1 @@ +a75cf9b8ce4cd9b909dc79ea2a1ec4ac1327fb4d7f8e9ec3781b4f38669f9d8057bca347bec6a9103ac2c42983d46f92e6066ea397cd0132912d954d4ace2638 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-94 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-94 new file mode 100644 index 00000000..4090da77 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-94 @@ -0,0 +1 @@ +a0cc16423f2f09dd8385bc5490679751f897cfacab59ffc490d62a79353b585773fa1aec5622eddb2dd94d6ccadee8e81f3ccd1b9a7c711ec8c1d1e5bb24dab4 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-95 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-95 new file mode 100644 index 00000000..8ce3d648 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-95 @@ -0,0 +1 @@ +0c13b0799e1376e0a298578696dbff4c1b373428f519820fa4002e89deb27ffa1d5db9754252fcccf35a24c7ead6c8e765d9c4e767fa97acb8e436d27ce080f2 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-96 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-96 new file mode 100644 index 00000000..10059069 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-96 @@ -0,0 +1 @@ +d72f01b5b2696f5884abcd159de8a617c8f11794088b3dd8272a294570f17b4700a15c38aee8a5deac69d4bfa19ff25c264563c106097db7adf28fd01315a844 diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-97 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-97 new file mode 100644 index 00000000..a098237e --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-97 @@ -0,0 +1 @@ +3a0937501e8470fd64e25b3921880cf63e9a6f087cb57449e87e7fed06697c089c6d802108c6260a242fb01cc15cc4e9d265c2dd4891d41d676fe92559883a5a diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-98 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-98 new file mode 100644 index 00000000..8d130d21 --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-98 @@ -0,0 +1 @@ +bf86c2646e33960f7fc8dd252cef4255ca69266a6b595abdc79397d31c8b0844797cf3f75c54d0c97203c6495ddfbc31e317863ded18fa89f7222c3f047965bb diff --git a/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-99 b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-99 new file mode 100644 index 00000000..c1cfa67e --- /dev/null +++ b/internal/gnomockd/testdata/azurite/blobstore/some-bucket/file-99 @@ -0,0 +1 @@ +2ca923cce6c18a100666e4270e7a696133a920fcf0ea55fce94d7308d5bb09014bdf3392551de10af530fabfa13dd6419d0eb7d676f4332ca6db56b8d7f1c0e6 diff --git a/preset/azurite/README.md b/preset/azurite/README.md new file mode 100644 index 00000000..df5fd4e1 --- /dev/null +++ b/preset/azurite/README.md @@ -0,0 +1,73 @@ +# Gnomock Azurite + +Gnomock Blobstorage is a [Gnomock](https://github.com/orlangure/gnomock) preset +for running tests against Azure Blobstorage locally, powered by +[Azurite](https://github.com/Azure/Azurite) project. It allows +to setup a number of supported Azure services locally, run tests against +them, and tear them down easily. + +See [Azurite](https://github.com/Azure/Azurite) documentation for +more details. + +### Testing against local Azurite + +```go +package azurite_test + +import ( +"context" +"fmt" +"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" +"github.com/orlangure/gnomock" +) + +func ExamplePresetBlobStorage() { + p := azurite.Preset( + azurite.WithVersion(azurite.DefaultVersion), + ) + c, _ := gnomock.Start(p) + + defer func() { _ = gnomock.Stop(c) }() + + connString := fmt.Sprintf(azurite.ConnectionStringFormat, azurite.AccountName, azurite.AccountKey, c.Address(azurite.BlobServicePort), azurite.AccountName) + ctx := context.Background() + + azblobClient, _ := azblob.NewClientFromConnectionString(connString, nil) + + containerName := "foo" + _, _ = azblobClient.CreateContainer(ctx, containerName, nil) + + pager := azblobClient.NewListBlobsFlatPager(containerName, nil) + pages := 0 + for pager.More() { + resp, _ := pager.NextPage(context.TODO()) + fmt.Println("keys before:", len(resp.Segment.BlobItems)) + pages = pages + 1 + } + fmt.Println("pages before:", pages) + + blobName := "bar" + _, _ = azblobClient.UploadBuffer(ctx, containerName, blobName, []byte{15, 16, 17}, nil) + + pager = azblobClient.NewListBlobsFlatPager(containerName, nil) + + pages = 0 + for pager.More() { + resp, _ := pager.NextPage(context.TODO()) + + fmt.Println("keys after:", len(resp.Segment.BlobItems)) + for _, v := range resp.Segment.BlobItems { + fmt.Println("filename:", *v.Name) + } + pages = pages + 1 + } + fmt.Println("pages after:", 1) + + //Output: + //keys before: 0 + //pages before: 1 + //keys after: 1 + //filename: bar + //pages after: 1 +} +``` \ No newline at end of file diff --git a/preset/azurite/blobstorage_test.go b/preset/azurite/blobstorage_test.go new file mode 100644 index 00000000..fc5fd6bf --- /dev/null +++ b/preset/azurite/blobstorage_test.go @@ -0,0 +1,68 @@ +package azurite_test + +import ( + "context" + "fmt" + "strings" + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob/container" + "github.com/orlangure/gnomock" + "github.com/orlangure/gnomock/preset/azurite" + "github.com/stretchr/testify/require" +) + +func TestWithBlobstorageFiles(t *testing.T) { + // testdata/blobstorage includes 10 files in some-container/dir folder + p := azurite.Preset( + azurite.WithBlobstorageFiles("./testdata/blobstorage"), + azurite.WithVersion(azurite.DefaultVersion), + ) + c, err := gnomock.Start(p) + + defer func() { require.NoError(t, gnomock.Stop(c)) }() + + require.NoError(t, err) + + connString := fmt.Sprintf( + azurite.ConnectionStringFormat, + azurite.AccountName, + azurite.AccountKey, + c.Address(azurite.BlobServicePort), + azurite.AccountName) + + azblobClient, err := azblob.NewClientFromConnectionString(connString, nil) + require.NoError(t, err) + + // some-container is automatically created, and now includes 10 files + containerName := "some-container" + + nextMarker := listAndCheckFiles(t, azblobClient, containerName, 4, 4, nil) + nextMarker = listAndCheckFiles(t, azblobClient, containerName, 5, 5, nextMarker) + _ = listAndCheckFiles(t, azblobClient, containerName, 10, 1, nextMarker) +} + +func listAndCheckFiles( + t *testing.T, azblobClient *azblob.Client, containerName string, + maxResults int32, maxResultsExpected int, marker *string, +) (nextMarker *string) { + pager := azblobClient.NewListBlobsFlatPager(containerName, &azblob.ListBlobsFlatOptions{ + MaxResults: &maxResults, + Marker: marker, + }) + require.Equal(t, pager.More(), true) + resp, err := pager.NextPage(context.Background()) + require.NoError(t, err) + require.Equal(t, maxResultsExpected, len(resp.Segment.BlobItems)) + nextMarker = resp.NextMarker + checkFiles(t, resp.Segment.BlobItems) + + return +} + +func checkFiles(t *testing.T, blobItems []*container.BlobItem) { + for _, f := range blobItems { + require.True(t, strings.HasPrefix(*f.Name, "/dir/f-") || strings.HasPrefix(*f.Name, "dir/f-")) + } +} diff --git a/preset/azurite/options.go b/preset/azurite/options.go new file mode 100644 index 00000000..435896b8 --- /dev/null +++ b/preset/azurite/options.go @@ -0,0 +1,12 @@ +package azurite + +// Option is an optional configuration of this Gnomock preset. Use available +// Options to configure the container. +type Option func(*P) + +// WithVersion sets image version. +func WithVersion(version string) Option { + return func(o *P) { + o.Version = version + } +} diff --git a/preset/azurite/options_blobstorage.go b/preset/azurite/options_blobstorage.go new file mode 100644 index 00000000..043b492a --- /dev/null +++ b/preset/azurite/options_blobstorage.go @@ -0,0 +1,143 @@ +package azurite + +import ( + "context" + "fmt" + "os" + "path" + "path/filepath" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/orlangure/gnomock" +) + +// WithBlobstorageFiles sets up Blobstorage service running in azurite with the contents of +// `path` directory. The first level children of `path` must be directories, +// their names will be used to create containers. Below them, all the files in any +// other directories, these files will be uploaded as-is. +// +// For example, if you put your test files in testdata/my-container/dir/, Gnomock +// will create "my-container" for you, and pull "dir" with all its contents into +// this container. +func WithBlobstorageFiles(path string) Option { + return func(p *P) { + p.BlobstorePath = path + } +} + +func (p *P) initBlobstorage(c *gnomock.Container) error { + if p.BlobstorePath == "" { + return nil + } + + ctx := context.Background() + + connString := fmt.Sprintf(ConnectionStringFormat, AccountName, AccountKey, c.Address(BlobServicePort), AccountName) + + azblobClient, err := azblob.NewClientFromConnectionString(connString, nil) + if err != nil { + return err + } + + containerNames, err := p.createContainer(ctx, azblobClient) + if err != nil { + return fmt.Errorf("can't create containerNames: %w", err) + } + + err = p.uploadFiles(ctx, azblobClient, containerNames) + if err != nil { + return err + } + + return nil +} + +func (p *P) createContainer(ctx context.Context, azblobClient *azblob.Client) ([]string, error) { + files, err := os.ReadDir(p.BlobstorePath) + if err != nil { + return nil, fmt.Errorf("can't read blobstorage initial files: %w", err) + } + + containers := []string{} + + // create containers from top-level folders under `path` + for _, f := range files { + if !f.IsDir() { + continue + } + + container := f.Name() + + err := p.createContainers(ctx, azblobClient, container) + if err != nil { + return nil, fmt.Errorf("can't create container '%s': %w", container, err) + } + + containers = append(containers, container) + } + + return containers, nil +} + +func (p *P) createContainers(ctx context.Context, azblobClient *azblob.Client, containerName string) error { + if _, err := azblobClient.CreateContainer(ctx, containerName, nil); err != nil { + return fmt.Errorf("can't create containerName '%s': %w", containerName, err) + } + + return nil +} + +func (p *P) uploadFiles(ctx context.Context, azblobClient *azblob.Client, containerNames []string) error { + for _, containerName := range containerNames { + containerName := containerName + + err := filepath.Walk( + path.Join(p.BlobstorePath, containerName), + func(fPath string, file os.FileInfo, err error) error { + if err != nil { + return fmt.Errorf("error reading input file '%s': %w", fPath, err) + } + + if file.IsDir() { + return nil + } + + err = p.uploadFile(ctx, azblobClient, containerName, fPath) + if err != nil { + return err + } + + return nil + }, + ) + if err != nil { + return fmt.Errorf("error uploading input dir: %w", err) + } + } + + return nil +} + +func (p *P) uploadFile(ctx context.Context, azblobClient *azblob.Client, containerName, file string) (err error) { + inputFile, err := os.Open(file) //nolint:gosec + if err != nil { + return fmt.Errorf("can't open file '%s': %w", file, err) + } + + defer func() { + closeErr := inputFile.Close() + if err == nil && closeErr != nil { + err = closeErr + } + }() + + localPath := path.Join(p.BlobstorePath, containerName) + key := file[len(localPath):] + + _, err = azblobClient.UploadFile(ctx, containerName, key, inputFile, nil) + if err != nil { + return fmt.Errorf("can't upload file '%s' to containerName '%s': %w", file, containerName, err) + } + + return nil +} diff --git a/preset/azurite/preset.go b/preset/azurite/preset.go new file mode 100644 index 00000000..01d19bc8 --- /dev/null +++ b/preset/azurite/preset.go @@ -0,0 +1,108 @@ +// Package azurite provides a Gnomock Preset for azurite project +// It allows to easily setup local +// Blobstorage for testing +package azurite + +import ( + "context" + "fmt" + + "github.com/orlangure/gnomock" + "github.com/orlangure/gnomock/internal/registry" +) + +const ( + BlobServicePort = "blob" + QueueServicePort = "queue" + TableServicePort = "table" +) + +const ( + ConnectionStringFormat = "DefaultEndpointsProtocol=http;AccountName=%s;AccountKey=%s;BlobEndpoint=http://%s/%s;" + AccountName = "devstoreaccount1" + AccountKey = "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==" + DefaultVersion = "3.22.0" +) + +func init() { + registry.Register("azurite", func() gnomock.Preset { return &P{} }) +} + +// Preset creates a new azurite preset to use with gnomock.Start. See +// package docs for a list of exposed ports. +func Preset(opts ...Option) gnomock.Preset { + p := &P{} + + for _, opt := range opts { + opt(p) + } + + return p +} + +// P is a Gnomock Preset blobstorage implementation. +type P struct { + BlobstorePath string `json:"blobstore_path"` + Version string `json:"version"` +} + +// Image returns an image that should be pulled to create this container. +func (p *P) Image() string { + return fmt.Sprintf("mcr.microsoft.com/azure-storage/azurite:%s", p.Version) +} + +// Ports returns ports that should be used to access this container. +func (p *P) Ports() gnomock.NamedPorts { + return gnomock.NamedPorts{ + BlobServicePort: {Protocol: "tcp", Port: 10000}, + QueueServicePort: {Protocol: "tcp", Port: 10001}, + TableServicePort: {Protocol: "tcp", Port: 10002}, + } +} + +// Options returns a list of options to configure this container. +func (p *P) Options() []gnomock.Option { + p.setDefaults() + + opts := []gnomock.Option{ + gnomock.WithHealthCheck(p.healthcheck()), + gnomock.WithEnv(fmt.Sprintf("AZURITE_ACCOUNTS=%s:%s", AccountName, AccountKey)), + gnomock.WithInit(p.initf()), + } + + return opts +} + +func (p *P) setDefaults() { + if p.Version == "" { + p.Version = DefaultVersion + } +} + +func (p *P) healthcheck() gnomock.HealthcheckFunc { + return func(ctx context.Context, c *gnomock.Container) (err error) { + // needs implementation. unfortunately azurite does not offer a health endpoint + // a netcat p.healtCheckAddress(c) -z could help alternatively + _ = p.healthCheckAddress(c) + return nil + } +} + +// healthCheckAddress returns the address of azurite blobstorage endpoint of a running +// azurite container. +func (p *P) healthCheckAddress(c *gnomock.Container) string { + defaultPath := c.Address(BlobServicePort) + + return defaultPath +} + +func (p *P) initf() gnomock.InitFunc { + return func(ctx context.Context, c *gnomock.Container) error { + err := p.initBlobstorage(c) + if err != nil { + return fmt.Errorf("can't init blob storage: %w", err) + } + + return nil + } +} diff --git a/preset/azurite/preset_internal_test.go b/preset/azurite/preset_internal_test.go new file mode 100644 index 00000000..1ec99051 --- /dev/null +++ b/preset/azurite/preset_internal_test.go @@ -0,0 +1,50 @@ +package azurite + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/orlangure/gnomock" +) + +func TestHealthCheckAddress(t *testing.T) { + expectedAddress := "127.0.0.1:10000" + tests := []struct { + version string + expected string + }{ + { + version: DefaultVersion, + expected: expectedAddress, + }, + } + + c := &gnomock.Container{ + Host: "127.0.0.1", + Ports: gnomock.NamedPorts{ + BlobServicePort: gnomock.Port{ + Protocol: "tcp", + Port: 10000, + }, + QueueServicePort: gnomock.Port{ + Protocol: "tcp", + Port: 10001, + }, + TableServicePort: gnomock.Port{ + Protocol: "tcp", + Port: 10002, + }, + }, + } + + for _, test := range tests { + test := test + + t.Run(test.version, func(t *testing.T) { + p := P{Version: test.version} + actual := p.healthCheckAddress(c) + require.Equal(t, test.expected, actual) + }) + } +} diff --git a/preset/azurite/preset_test.go b/preset/azurite/preset_test.go new file mode 100644 index 00000000..c4c9a47f --- /dev/null +++ b/preset/azurite/preset_test.go @@ -0,0 +1,161 @@ +package azurite_test + +import ( + "context" + "fmt" + "testing" + + "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" + "github.com/orlangure/gnomock/preset/azurite" + "github.com/stretchr/testify/require" + + "github.com/orlangure/gnomock" +) + +func TestPreset_Blobstorage(t *testing.T) { + t.Parallel() + + for _, version := range []string{"latest"} { + t.Run(version, testBlobStorage(version)) + } +} + +func testBlobStorage(version string) func(*testing.T) { + return func(t *testing.T) { + p := azurite.Preset( + azurite.WithVersion(version), + ) + c, err := gnomock.Start(p) + + defer func() { require.NoError(t, gnomock.Stop(c)) }() + + require.NoError(t, err) + + connString := fmt.Sprintf( + azurite.ConnectionStringFormat, + azurite.AccountName, + azurite.AccountKey, + c.Address(azurite.BlobServicePort), + azurite.AccountName) + + ctx := context.Background() + + azblobClient, err := azblob.NewClientFromConnectionString(connString, nil) + require.NoError(t, err) + + containerName := "foo" + _, err = azblobClient.CreateContainer(ctx, containerName, nil) + require.NoError(t, err) + + pager := azblobClient.NewListBlobsFlatPager(containerName, nil) + pages := 0 + + for pager.More() { + resp, err := pager.NextPage(context.Background()) + require.NoError(t, err) + require.Equal(t, 0, len(resp.Segment.BlobItems)) + pages++ + } + require.Equal(t, 1, pages) + + blobName := "bar" + _, err = azblobClient.UploadBuffer(ctx, containerName, blobName, []byte{15, 16, 17}, nil) + require.NoError(t, err) + + pager = azblobClient.NewListBlobsFlatPager(containerName, nil) + require.Equal(t, pager.More(), true) + + for pager.More() { + resp, err := pager.NextPage(context.Background()) + require.NoError(t, err) + require.Equal(t, 1, len(resp.Segment.BlobItems)) + + for _, v := range resp.Segment.BlobItems { + require.Equal(t, blobName, *v.Name) + } + } + } +} + +func TestPreset_wrongBlobstoragePath(t *testing.T) { + t.Parallel() + + p := azurite.Preset( + azurite.WithBlobstorageFiles("./invalid"), + ) + c, err := gnomock.Start(p) + require.Error(t, err) + require.Contains(t, err.Error(), "can't read blobstorage initial files") + require.NoError(t, gnomock.Stop(c)) +} + +func ExamplePreset() { + p := azurite.Preset( + azurite.WithVersion(azurite.DefaultVersion), + ) + + c, startErr := gnomock.Start(p) + if startErr != nil { + fmt.Println("Starting azurite gnomock failed ", startErr) + return + } + + defer func() { _ = gnomock.Stop(c) }() + + connString := fmt.Sprintf( + azurite.ConnectionStringFormat, + azurite.AccountName, + azurite.AccountKey, + c.Address(azurite.BlobServicePort), + azurite.AccountName) + ctx := context.Background() + + azblobClient, connectError := azblob.NewClientFromConnectionString(connString, nil) + if connectError != nil { + fmt.Println("Connecting to azurite failed ", connectError) + return + } + + containerName := "foo" + + _, createContainerError := azblobClient.CreateContainer(ctx, containerName, nil) + if createContainerError != nil { + fmt.Println("Creating azure container failed ", createContainerError) + return + } + + pages := 0 + + pager := azblobClient.NewListBlobsFlatPager(containerName, nil) + for pager.More() { + resp, _ := pager.NextPage(context.Background()) + fmt.Println("keys before:", len(resp.Segment.BlobItems)) + pages++ + } + fmt.Println("pages before:", pages) + + blobName := "bar" + _, _ = azblobClient.UploadBuffer(ctx, containerName, blobName, []byte{15, 16, 17}, nil) + + pages = 0 + + pager = azblobClient.NewListBlobsFlatPager(containerName, nil) + for pager.More() { + resp, _ := pager.NextPage(context.Background()) + + fmt.Println("keys after:", len(resp.Segment.BlobItems)) + + for _, v := range resp.Segment.BlobItems { + fmt.Println("filename:", *v.Name) + } + pages++ + } + fmt.Println("pages after:", 1) + + // Output: + // keys before: 0 + // pages before: 1 + // keys after: 1 + // filename: bar + // pages after: 1 +} diff --git a/preset/azurite/testdata/blobstorage/ignored-file b/preset/azurite/testdata/blobstorage/ignored-file new file mode 100644 index 00000000..e69de29b diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-1 b/preset/azurite/testdata/blobstorage/some-container/dir/f-1 new file mode 100644 index 00000000..d030dfa5 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-1 @@ -0,0 +1 @@ +461e7d925c7bd85bfa508db9d0da6111 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-10 b/preset/azurite/testdata/blobstorage/some-container/dir/f-10 new file mode 100644 index 00000000..966d94d6 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-10 @@ -0,0 +1 @@ +436d464c5d64a5ffafe2f2284824aafd diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-2 b/preset/azurite/testdata/blobstorage/some-container/dir/f-2 new file mode 100644 index 00000000..5601edc0 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-2 @@ -0,0 +1 @@ +0c2d05e012aa3c333c5cde804e3aeb83 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-3 b/preset/azurite/testdata/blobstorage/some-container/dir/f-3 new file mode 100644 index 00000000..e663e92f --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-3 @@ -0,0 +1 @@ +610f06a16aee8e7699bcd53dc1cea5f9 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-4 b/preset/azurite/testdata/blobstorage/some-container/dir/f-4 new file mode 100644 index 00000000..fecab2f0 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-4 @@ -0,0 +1 @@ +e161f136af01795ace93d182ab7b8e7f diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-5 b/preset/azurite/testdata/blobstorage/some-container/dir/f-5 new file mode 100644 index 00000000..2bff0988 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-5 @@ -0,0 +1 @@ +48aa836dd7c3debcb1f1e2e5fe713d59 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-6 b/preset/azurite/testdata/blobstorage/some-container/dir/f-6 new file mode 100644 index 00000000..c9fc3618 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-6 @@ -0,0 +1 @@ +9f5d5b5d5a178b1ca4f8319fcdaac8e4 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-7 b/preset/azurite/testdata/blobstorage/some-container/dir/f-7 new file mode 100644 index 00000000..6580f629 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-7 @@ -0,0 +1 @@ +fd5dd436eb140d329dc7dfe89d5ab637 diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-8 b/preset/azurite/testdata/blobstorage/some-container/dir/f-8 new file mode 100644 index 00000000..a0885849 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-8 @@ -0,0 +1 @@ +28e39326e8fe506e656dd66bcf42b58e diff --git a/preset/azurite/testdata/blobstorage/some-container/dir/f-9 b/preset/azurite/testdata/blobstorage/some-container/dir/f-9 new file mode 100644 index 00000000..9ceea419 --- /dev/null +++ b/preset/azurite/testdata/blobstorage/some-container/dir/f-9 @@ -0,0 +1 @@ +b8f4c036a89b55dec5bb6f620522d090 diff --git a/swagger/swagger.yaml b/swagger/swagger.yaml index 99b284c9..080dad22 100644 --- a/swagger/swagger.yaml +++ b/swagger/swagger.yaml @@ -329,6 +329,26 @@ paths: $ref: '#/components/responses/start-failed' tags: - presets + - + /start/azurite: + post: + summary: Start a new Gnomock Azurite container + operationId: startAzurite + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/azurite-request' + responses: + '200': + $ref: '#/components/responses/container-created' + '400': + $ref: '#/components/responses/invalid-configuration' + '500': + $ref: '#/components/responses/start-failed' + tags: + - presets /start/vault: post: @@ -1197,23 +1217,45 @@ components: description: > This object describes Cassandra container. - vault-request: + azurite-request: type: object properties: preset: - $ref: '#/components/schemas/vault' + $ref: '#/components/schemas/azurite' options: $ref: '#/components/schemas/options' description: > - This request includes Vault and general configuration. + This request includes Azurite and general configuration. - vault: + azurite: type: object properties: + blobstore_path: + type: string + description: > + Path to folder to setup initial blobstore state. Top level folders are + used as buckets; all child folders and files are uploaded as-is + example: /home/gnomock/project/testdata/azurite version: type: string description: Docker image tag (version) default: latest + description: > + This object describes Azurite container. + + vault-request: + type: object + properties: + preset: + $ref: '#/components/schemas/vault' + options: + $ref: '#/components/schemas/options' + description: > + This request includes Vault and general configuration. + + vault: + type: object + properties: auth_token: type: string description: Sets authentication (root) token to be used to connect to this container @@ -1230,6 +1272,10 @@ components: type: type: string description: 'Represents the auth type (i.e: kubernetes)' + version: + type: string + description: Docker image tag (version) + default: latest policies: type: array description: Adds additional policies.