Files
query-orchestration/internal/serviceconfig/objectstore/bucketkey_test.go
T
Jay Brown 720a84be92 Merged in feature/doc_import (pull request #177)
integration of background processor

* integration part 1

* feature working

* fix mimetype issue
2025-08-20 19:01:13 +00:00

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)
}