package blob import ( "bytes" "context" "os" "testing" ) // 真 MinIO 端到端:验证二进制对象(.docx 场景)Put/Get 字节级往返一致。 // 设 BLOB_TEST_ENDPOINT(如 localhost:9000)启用;缺省跳过,不拖累 CI。 // BLOB_TEST_{ACCESS,SECRET,BUCKET} 可覆盖,默认 minioadmin/minioadmin/sundynix-docs。 func TestBlob_BinaryRoundTrip_RealMinIO(t *testing.T) { ep := os.Getenv("BLOB_TEST_ENDPOINT") if ep == "" { t.Skip("设 BLOB_TEST_ENDPOINT 启用真 MinIO 端到端测试") } envOr := func(k, d string) string { if v := os.Getenv(k); v != "" { return v } return d } s := Open(ep, envOr("BLOB_TEST_ACCESS", "minioadmin"), envOr("BLOB_TEST_SECRET", "minioadmin"), envOr("BLOB_TEST_BUCKET", "sundynix-docs")) if !s.Ready() { t.Fatal("MinIO 应连上(Ready)") } ctx := context.Background() key := "reports/blob-e2e-test.docx" defer func() { _ = s.Delete(ctx, key) }() // 含 NUL 与非 UTF8 字节,模拟真实 .docx(zip)二进制。 want := []byte("PK\x03\x04\x00\x01\x02\xff\xfe\x00binary-docx-body") if err := s.PutBytes(ctx, key, want, "application/vnd.openxmlformats-officedocument.wordprocessingml.document"); err != nil { t.Fatalf("PutBytes: %v", err) } got, err := s.GetBytes(ctx, key) if err != nil { t.Fatalf("GetBytes: %v", err) } if !bytes.Equal(got, want) { t.Fatalf("字节不一致:\n got=%q\nwant=%q", got, want) } }