github.com/kubeshop/testkube@v1.17.23/pkg/storage/minio/artifacts_storage_integration_test.go (about) 1 package minio 2 3 import ( 4 "bytes" 5 "context" 6 "io" 7 "os" 8 "testing" 9 10 "github.com/kubeshop/testkube/pkg/utils/test" 11 12 "github.com/minio/minio-go/v7" 13 "github.com/minio/minio-go/v7/pkg/credentials" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestArtifactClient(t *testing.T) { 18 test.IntegrationTest(t) 19 t.Parallel() 20 21 directMinioClient, err := minio.New("localhost:9000", &minio.Options{ 22 Creds: credentials.NewStaticV4("minio99", "minio123", ""), 23 Secure: false, 24 }) 25 if err != nil { 26 t.Fatalf("unable to create direct minio client: %v", err) 27 } 28 // Prepare MinIO client 29 minioClient := NewClient("localhost:9000", "minio99", "minio123", "us-east-1", "", "test-bucket-fsdf") 30 if err := minioClient.Connect(); err != nil { 31 t.Fatalf("unable to connect to minio: %v", err) 32 } 33 34 // Create the ArtifactClient 35 artifactClient := NewMinIOArtifactClient(minioClient) 36 37 // Create a context 38 ctx := context.Background() 39 40 // Test ListFiles 41 t.Run("ListFiles", func(t *testing.T) { 42 t.Parallel() 43 // Upload a test file 44 _, err = directMinioClient.PutObject(ctx, "test-bucket-fsdf", "test-execution-id-1/test-file", bytes.NewReader([]byte("test-content")), 12, minio.PutObjectOptions{}) 45 if err != nil { 46 t.Fatalf("unable to upload file: %v", err) 47 } 48 // Call ListFiles 49 files, err := artifactClient.ListFiles(ctx, "test-execution-id-1", "", "", "") 50 assert.NoError(t, err) 51 52 assert.Lenf(t, files, 1, "expected 1 file to be returned") 53 assert.Equal(t, "test-file", files[0].Name, "expected file name to be test-file") 54 assert.Equal(t, int32(12), files[0].Size, "expected file size to be 11") 55 }) 56 57 // Test DownloadFile 58 t.Run("DownloadFile", func(t *testing.T) { 59 t.Parallel() 60 // Upload a test file 61 _, err = directMinioClient.PutObject(ctx, "test-bucket-fsdf", "test-execution-id-2/test-file", bytes.NewReader([]byte("test-content")), 12, minio.PutObjectOptions{}) 62 if err != nil { 63 t.Fatalf("unable to upload file: %v", err) 64 } 65 66 reader, err := artifactClient.DownloadFile(ctx, "test-file", "test-execution-id-2", "", "", "") 67 if err != nil { 68 t.Fatalf("unable to download file: %v", err) 69 } 70 71 content, err := io.ReadAll(reader) 72 assert.NoError(t, err) 73 74 assert.Equalf(t, "test-content", string(content), "downloaded file content does not match expected content") 75 }) 76 77 t.Run("UploadFile", func(t *testing.T) { 78 t.Parallel() 79 80 err = artifactClient.UploadFile(ctx, "test-execution-id-3", "test-file", bytes.NewReader([]byte("test-content")), 12) 81 if err != nil { 82 t.Fatalf("error uploading artifact file: %v", err) 83 } 84 85 // Check if the file is uploaded 86 obj, err := directMinioClient.GetObject(ctx, "test-bucket-fsdf", "test-execution-id-3/test-file", minio.GetObjectOptions{}) 87 if err != nil { 88 t.Fatalf("unable to get object from minio: %v", err) 89 } 90 stat, err := obj.Stat() 91 if err != nil { 92 t.Fatalf("unable to get object stat from minio: %v", err) 93 } 94 assert.Equal(t, int64(12), stat.Size, "expected file size to be 12") 95 }) 96 97 t.Run("PlaceFiles", func(t *testing.T) { 98 t.Parallel() 99 // Create a temporary directory to place files 100 tempDir, err := os.MkdirTemp("", "test-artifactclient") 101 if err != nil { 102 t.Fatalf("unable to create temporary directory: %v", err) 103 } 104 defer os.RemoveAll(tempDir) 105 // Upload test files 106 _, err = directMinioClient.PutObject(ctx, "test-bucket-fsdf", "test-execution-id-4/test-file1", bytes.NewReader([]byte("test-content")), 12, minio.PutObjectOptions{}) 107 if err != nil { 108 t.Fatalf("unable to upload file: %v", err) 109 } 110 _, err = directMinioClient.PutObject(ctx, "test-bucket-fsdf", "test-execution-id-4/test-file2", bytes.NewReader([]byte("test-content")), 12, minio.PutObjectOptions{}) 111 if err != nil { 112 t.Fatalf("unable to upload file: %v", err) 113 } 114 115 err = artifactClient.PlaceFiles(ctx, []string{"test-execution-id-4"}, tempDir) 116 if err != nil { 117 t.Fatalf("error placing files: %v", err) 118 } 119 120 // Check if the files are placed in the temporary directory 121 content, err := os.ReadFile(tempDir + "/" + "test-file1") 122 if err != nil { 123 t.Fatalf("unable to read file: %v", err) 124 } 125 assert.Equal(t, "test-content", string(content), "placed file content does not match expected content") 126 content, err = os.ReadFile(tempDir + "/" + "test-file2") 127 if err != nil { 128 t.Fatalf("unable to read file: %v", err) 129 } 130 assert.Equal(t, "test-content", string(content), "placed file content does not match expected content") 131 }) 132 }