package api import ( "context" "encoding/json" "net/http" "net/http/httptest" "os" "testing" "crypto-miner-server/internal/erasure" ) type okStore struct{} func (okStore) PutShard(context.Context, string, string, []byte) error { return nil } func (okStore) HeadBucket(context.Context, string) error { return nil } func TestErasureSwarmGetPolicyJSON(t *testing.T) { h := NewErasureSwarmHandler(func() erasure.AWSSwarmSettings { return erasure.AWSSwarmSettings{S3Bucket: "lab-shards", CloudFrontDomain: "d.cf.net"} }, nil) req := httptest.NewRequest(http.MethodGet, "/api/v1/erasure-swarm/policy?bucket=lab-shards", nil) rec := httptest.NewRecorder() h.GetPolicyJSON(rec, req) if rec.Code != http.StatusOK { t.Fatalf("status=%d body=%s", rec.Code, rec.Body.String()) } var body map[string]interface{} if err := json.Unmarshal(rec.Body.Bytes(), &body); err != nil { t.Fatal(err) } if body["iam_policy"] == nil || body["bucket_policy"] == nil { t.Fatalf("body=%v", body) } } func TestErasureSwarmPostTestOK(t *testing.T) { os.Setenv("AF_AWS_ACCESS_KEY_ID", "A") os.Setenv("AF_AWS_SECRET_ACCESS_KEY", "s") defer os.Unsetenv("AF_AWS_ACCESS_KEY_ID") defer os.Unsetenv("AF_AWS_SECRET_ACCESS_KEY") h := NewErasureSwarmHandler(func() erasure.AWSSwarmSettings { return erasure.AWSSwarmSettings{S3Bucket: "b", CloudFrontDomain: "d.cf.net"} }, func() erasure.ShardObjectStore { return okStore{} }) rec := httptest.NewRecorder() h.PostTest(rec, httptest.NewRequest(http.MethodPost, "/", nil)) var body erasureSwarmTestResponse _ = json.NewDecoder(rec.Body).Decode(&body) if !body.OK { t.Fatalf("%+v", body) } }