Some checks failed
cache-seeder / prune (push) Has been skipped
cache-seeder / frontend (push) Failing after 3s
cache-seeder / python (push) Failing after 3s
cache-seeder / gobuild (push) Failing after 4s
cache-seeder / lint (bindata, lint-backend) (push) Failing after 3s
giteabot backport / giteabot (push) Has been skipped
giteabot / giteabot (push) Has been skipped
cache-prune / prune (push) Has been skipped
release-nightly-snapcraft / build-and-publish (ubuntu-24.04) (push) Has been cancelled
release-nightly-snapcraft / build-and-publish (ubuntu-24.04-arm) (push) Has been cancelled
release-nightly / nightly-binary (push) Has been cancelled
release-nightly / nightly-container (push) Has been cancelled
cron-renovate / cron-renovate (push) Has been skipped
77 lines
2.4 KiB
Go
77 lines
2.4 KiB
Go
// Copyright 2023 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package storage
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.dev/modules/setting"
|
|
"gitea.dev/modules/test"
|
|
"gitea.dev/modules/util"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func prepareAzureStorageConfig(t *testing.T, basePath ...string) *setting.Storage {
|
|
endpoint := test.ExternalServiceHTTP(t, "TEST_AZURESTORAGE_ENDPOINT", "http://devstoreaccount1.azurite.local:10000")
|
|
return &setting.Storage{
|
|
AzureBlobConfig: setting.AzureBlobStorageConfig{
|
|
// https://learn.microsoft.com/azure/storage/common/storage-use-azurite?tabs=visual-studio-code#ip-style-url
|
|
Endpoint: endpoint,
|
|
// https://learn.microsoft.com/azure/storage/common/storage-use-azurite?tabs=visual-studio-code#well-known-storage-account-and-key
|
|
AccountName: "devstoreaccount1",
|
|
AccountKey: "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==",
|
|
Container: "test-container",
|
|
BasePath: util.OptionalArg(basePath),
|
|
},
|
|
}
|
|
}
|
|
|
|
func TestAzureBlobStorage(t *testing.T) {
|
|
t.Run("NoBasePath", func(t *testing.T) {
|
|
config := prepareAzureStorageConfig(t)
|
|
objStore, err := NewStorage(setting.AzureBlobStorageType, config)
|
|
require.NoError(t, err)
|
|
testStorageGeneral(t, objStore)
|
|
})
|
|
t.Run("WithBasePath", func(t *testing.T) {
|
|
config := prepareAzureStorageConfig(t, "test-base-path")
|
|
objStore, err := NewStorage(setting.AzureBlobStorageType, config)
|
|
require.NoError(t, err)
|
|
testStorageGeneral(t, objStore)
|
|
})
|
|
}
|
|
|
|
func Test_azureBlobObject(t *testing.T) {
|
|
s, err := NewStorage(setting.AzureBlobStorageType, prepareAzureStorageConfig(t))
|
|
require.NoError(t, err)
|
|
|
|
data := "Q2xTckt6Y1hDOWh0"
|
|
_, err = s.Save("test.txt", strings.NewReader(data), int64(len(data)))
|
|
assert.NoError(t, err)
|
|
obj, err := s.Open("test.txt")
|
|
assert.NoError(t, err)
|
|
offset, err := obj.Seek(2, io.SeekStart)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 2, offset)
|
|
buf1 := make([]byte, 3)
|
|
read, err := obj.Read(buf1)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 3, read)
|
|
assert.Equal(t, data[2:5], string(buf1))
|
|
offset, err = obj.Seek(-5, io.SeekEnd)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, len(data)-5, offset)
|
|
buf2 := make([]byte, 4)
|
|
read, err = obj.Read(buf2)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, 4, read)
|
|
assert.Equal(t, data[11:15], string(buf2))
|
|
assert.NoError(t, obj.Close())
|
|
assert.NoError(t, s.Delete("test.txt"))
|
|
}
|