720a84be92
integration of background processor * integration part 1 * feature working * fix mimetype issue
278 lines
11 KiB
Go
278 lines
11 KiB
Go
package objectstore
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetBucketKey(t *testing.T) {
|
|
key := BucketKey{}
|
|
assert.Equal(t, "//00010101/0/0001-01-01T000000Z~~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.CreatedAt = time.Date(2025, time.March, 31, 4, 8, 16, 222, time.UTC)
|
|
assert.Equal(t, "//20250331/0/2025-03-31T040816Z~~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.ClientID = "A_A"
|
|
assert.Equal(t, "A_A//20250331/0/2025-03-31T040816Z~A_A~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.ClientID = "A-A"
|
|
assert.Equal(t, "A-A//20250331/0/2025-03-31T040816Z~A-A~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.ClientID = "A#A"
|
|
assert.Equal(t, "A#A//20250331/0/2025-03-31T040816Z~A#A~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.ClientID = "AAA"
|
|
assert.Equal(t, "AAA//20250331/0/2025-03-31T040816Z~AAA~~00000000-0000-0000-0000-000000000000", key.String())
|
|
key.EntityID = uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.Equal(t, "AAA//20250331/0/2025-03-31T040816Z~AAA~~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
key.Location = Import
|
|
assert.Equal(t, "AAA/import/20250331/0/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
key.Location = Text
|
|
assert.Equal(t, "AAA/text/20250331/0/2025-03-31T040816Z~AAA~text~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
key.Location = Export
|
|
assert.Equal(t, "AAA/export/20250331/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
part := uint16(3)
|
|
key.Part = &part
|
|
key.Location = Import
|
|
assert.Equal(t, "AAA/import/20250331/3/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
key.Location = Text
|
|
assert.Equal(t, "AAA/text/20250331/3/2025-03-31T040816Z~AAA~text~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
key.Location = Export
|
|
assert.Equal(t, "AAA/export/20250331/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40", key.String())
|
|
filetype := "csv"
|
|
key.FileType = &filetype
|
|
assert.Equal(t, "AAA/export/20250331/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40.csv", key.String())
|
|
}
|
|
func TestParseBucketKey(t *testing.T) {
|
|
_, err := ParseBucketKey("")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("AAA")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("//00010101/")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("//20250331/")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("AAA//20250331/")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("AAA//20250331/coolfile")
|
|
assert.Error(t, err)
|
|
|
|
key, err := ParseBucketKey("AAA/import/20250331/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("AAA/text/20250331/2025-03-31T040816Z~AAA~text~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Text,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 2, 31, 0, 0, 0, 0, time.UTC),
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("AAA/export/20250331/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Export,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
}, key)
|
|
|
|
part := uint16(3)
|
|
key, err = ParseBucketKey("AAA/import/20250331/3/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("AAA/text/20250331/3/2025-03-31T040816Z~AAA~text~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Text,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("AAA/export/20250331/3/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "AAA",
|
|
Location: Export,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("A_A/export/20250331/3/2025-03-31T040816Z~A_A~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "A_A",
|
|
Location: Export,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("A-A/export/20250331/3/2025-03-31T040816Z~A-A~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "A-A",
|
|
Location: Export,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
key, err = ParseBucketKey("A#A/export/20250331/3/2025-03-31T040816Z~A#A~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
ClientID: "A#A",
|
|
Location: Export,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
CreatedAt: time.Date(2025, 3, 31, 0, 0, 0, 0, time.UTC),
|
|
Part: &part,
|
|
}, key)
|
|
|
|
_, err = ParseBucketKey("AAA/import/99999999/2025-03-31T990816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("AAA/import/20250331/99999999/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("AAA/import/20250331/999/2025-03-31T040816Z~AAA~import~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.Error(t, err)
|
|
|
|
_, err = ParseBucketKey("*AAA/export/20250331/3/2025-03-31T040816Z~AAA~export~b745910f-f529-43c5-87e1-25629d46ef40")
|
|
assert.Error(t, err)
|
|
}
|
|
|
|
func TestParseFilename(t *testing.T) {
|
|
key := BucketKey{}
|
|
|
|
err := key.parseFilename("")
|
|
assert.EqualError(t, err, "incorrect amount of metadata elements")
|
|
|
|
err = key.parseFilename("a.a")
|
|
assert.EqualError(t, err, "incorrect amount of metadata elements")
|
|
|
|
err = key.parseFilename("a.a.a")
|
|
assert.EqualError(t, err, "incorrect amount of dots")
|
|
|
|
err = key.parseFilename("a~a~a~a.a")
|
|
assert.EqualError(t, err, "failed to parse date: parsing time \"a\" as \"2006-01-02T150405Z\": cannot parse \"a\" as \"2006\"")
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~*~a~a.a")
|
|
assert.EqualError(t, err, "invalid client id")
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a~a~a.a")
|
|
assert.EqualError(t, err, "invalid location")
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a~import~a.a")
|
|
assert.EqualError(t, err, "invalid UUID length: 1")
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a~import~b745910f-f529-43c5-87e1-25629d46ef40.a")
|
|
assert.NoError(t, err)
|
|
filetype := "a"
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
CreatedAt: time.Date(2025, time.March, 32, 4, 8, 16, 0, time.UTC),
|
|
ClientID: "a",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
}, key)
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a_a~import~b745910f-f529-43c5-87e1-25629d46ef40.a")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
CreatedAt: time.Date(2025, time.March, 32, 4, 8, 16, 0, time.UTC),
|
|
ClientID: "a_a",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
}, key)
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a-a~import~b745910f-f529-43c5-87e1-25629d46ef40.a")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
CreatedAt: time.Date(2025, time.March, 32, 4, 8, 16, 0, time.UTC),
|
|
ClientID: "a-a",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
}, key)
|
|
|
|
err = key.parseFilename("2025-03-31T040816Z~a#a~import~b745910f-f529-43c5-87e1-25629d46ef40.a")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
CreatedAt: time.Date(2025, time.March, 32, 4, 8, 16, 0, time.UTC),
|
|
ClientID: "a#a",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
}, key)
|
|
|
|
// Test with batch ID
|
|
batchID := uuid.MustParse("12345678-1234-5678-9012-123456789012")
|
|
err = key.parseFilename("2025-03-31T040816Z~a_a~import~b745910f-f529-43c5-87e1-25629d46ef40~12345678-1234-5678-9012-123456789012.a")
|
|
assert.NoError(t, err)
|
|
assert.EqualExportedValues(t, BucketKey{
|
|
CreatedAt: time.Date(2025, time.March, 32, 4, 8, 16, 0, time.UTC),
|
|
ClientID: "a_a",
|
|
Location: Import,
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
BatchID: &batchID,
|
|
}, key)
|
|
|
|
// Test with wrong number of metadata elements (only 3 instead of 4 or 5)
|
|
err = key.parseFilename("2025-03-31T040816Z~a~import.a")
|
|
assert.EqualError(t, err, "incorrect amount of metadata elements")
|
|
}
|
|
|
|
func TestBucketKeyFilenameWithBatchID(t *testing.T) {
|
|
batchID := uuid.MustParse("12345678-1234-5678-9012-123456789012")
|
|
filetype := "pdf"
|
|
|
|
// Test filename generation with batch ID
|
|
key := BucketKey{
|
|
ClientID: "test_client",
|
|
Location: Import,
|
|
CreatedAt: time.Date(2025, 3, 31, 4, 8, 16, 0, time.UTC),
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
BatchID: &batchID,
|
|
}
|
|
|
|
filename := key.Filename()
|
|
expected := "2025-03-31T040816Z~test_client~import~b745910f-f529-43c5-87e1-25629d46ef40~12345678-1234-5678-9012-123456789012.pdf"
|
|
assert.Equal(t, expected, filename)
|
|
|
|
// Test filename generation without batch ID
|
|
keyNoBatch := BucketKey{
|
|
ClientID: "test_client",
|
|
Location: Import,
|
|
CreatedAt: time.Date(2025, 3, 31, 4, 8, 16, 0, time.UTC),
|
|
EntityID: uuid.MustParse("b745910f-f529-43c5-87e1-25629d46ef40"),
|
|
FileType: &filetype,
|
|
}
|
|
|
|
filenameNoBatch := keyNoBatch.Filename()
|
|
expectedNoBatch := "2025-03-31T040816Z~test_client~import~b745910f-f529-43c5-87e1-25629d46ef40.pdf"
|
|
assert.Equal(t, expectedNoBatch, filenameNoBatch)
|
|
}
|