lego/providers/http/frostfs/client_test.go
Vitaliy Potyarkin 23e60f1e98 Read test connection credentials from env vars
Signed-off-by: Vitaliy Potyarkin <v.potyarkin@yadro.com>
2024-10-15 13:53:08 +03:00

100 lines
2.2 KiB
Go

package frostfs
// Tests for our FrostFS client code
import (
"testing"
"context"
"crypto/ecdsa"
"crypto/elliptic"
"crypto/rand"
"os"
"sync"
)
// Initialize storage backend for tests
func openStorage(t *testing.T) *Storage {
cid := os.Getenv("FROSTFS_CID") // example: 348WWfBKbS79Wbmm38MRE3oBoEDM5Ga1XXbGKGNyisDM
endpoint := os.Getenv("FROSTFS_ENDPOINT") // example: grpc://localhost:8802
if cid == "" || endpoint == "" {
t.Skipf("one or more environment variables not set: FROSTFS_ENDPOINT, FROSTFS_CID")
}
key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) // TODO: using ephemeral keys for now, later read from env vars
if err != nil {
t.Fatal(err)
}
storage, err := Open(endpoint, cid, key)
if err != nil {
t.Fatal(err)
}
return storage
}
// Save some bytes to FrostFS and clean up after
func TestObjectPutDelete(t *testing.T) {
var payload = []byte("Hello FrostFS!\n")
storage := openStorage(t)
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)
oid, err := storage.Save(ctx, payload, "FileName", "hello_from_sdk.txt", "Tag", "foobar")
if err != nil {
t.Fatal(err)
}
t.Logf("saved object: %s", oid)
err = storage.Delete(ctx, oid)
if err != nil {
t.Fatal(err)
}
t.Logf("deleted object: %s", oid)
}
// Check that FrostFS is in fact a content addressable storage
func TestMulipleObjects(t *testing.T) {
var payload = []byte("Multiple objects with same content should get the same object ID")
ctx, cancel := context.WithCancel(context.Background())
t.Cleanup(cancel)
var wg sync.WaitGroup
objects := make(chan string)
go func() {
baseline := ""
for {
select {
case <-ctx.Done():
return
case obj, ok := <-objects:
if !ok {
return
}
if baseline == "" {
baseline = obj
continue
}
if obj != baseline {
t.Fatalf("non-identical object id: %s != %s", baseline, obj)
}
}
}
}()
const testCount = 5
storage := openStorage(t)
for i := 0; i < testCount; i++ {
wg.Add(1)
go func() {
defer wg.Done()
oid, err := storage.Save(ctx, payload, "FileName", "CAS.txt", "Tag", "test")
if err != nil {
t.Fatal(err)
}
err = storage.Delete(ctx, oid)
if err != nil {
t.Fatal(err)
}
t.Log(oid)
}()
}
wg.Wait()
}