github.com/kubeshop/testkube@v1.17.23/pkg/logs/repository/minio_test.go (about) 1 package repository 2 3 import ( 4 "bytes" 5 "context" 6 "encoding/json" 7 "testing" 8 "time" 9 10 "github.com/golang/mock/gomock" 11 "github.com/minio/minio-go/v7" 12 "github.com/stretchr/testify/assert" 13 14 "github.com/kubeshop/testkube/pkg/logs/events" 15 "github.com/kubeshop/testkube/pkg/repository/result" 16 "github.com/kubeshop/testkube/pkg/storage" 17 ) 18 19 func TestRepository_MinioGetLogV2(t *testing.T) { 20 mockCtrl := gomock.NewController(t) 21 defer mockCtrl.Finish() 22 23 storageClient := storage.NewMockClient(mockCtrl) 24 ctx := context.TODO() 25 26 var data []byte 27 28 eventLog1 := events.Log{ 29 Content: "storage logs 1", 30 Source: events.SourceJobPod, 31 Version: string(events.LogVersionV2), 32 } 33 34 b, err := json.Marshal(eventLog1) 35 assert.NoError(t, err) 36 37 data = append(data, b...) 38 data = append(data, []byte("\n")...) 39 40 eventLog2 := events.Log{ 41 Content: "storage logs 2", 42 Source: events.SourceJobPod, 43 Version: string(events.LogVersionV2), 44 } 45 46 b, err = json.Marshal(eventLog2) 47 assert.NoError(t, err) 48 49 data = append(data, b...) 50 data = append(data, []byte("\n")...) 51 52 storageClient.EXPECT().DownloadFileFromBucket(gomock.Any(), "bucket", "", "test-execution-1"). 53 Return(bytes.NewReader(data), minio.ObjectInfo{}, nil) 54 r := NewMinioRepository(storageClient, "bucket") 55 56 tests := []struct { 57 name string 58 eventLogs []events.Log 59 }{ 60 { 61 name: "Test getting logs from minio", 62 eventLogs: []events.Log{eventLog1, eventLog2}, 63 }, 64 } 65 66 var res []events.Log 67 for _, tt := range tests { 68 t.Run(tt.name, func(t *testing.T) { 69 logs, err := r.Get(ctx, "test-execution-1") 70 assert.NoError(t, err) 71 72 for out := range logs { 73 res = append(res, out.Log) 74 } 75 76 assert.Equal(t, tt.eventLogs, res) 77 }) 78 } 79 } 80 81 func TestRepository_MinioGetLogsV1(t *testing.T) { 82 mockCtrl := gomock.NewController(t) 83 defer mockCtrl.Finish() 84 85 storageClient := storage.NewMockClient(mockCtrl) 86 ctx := context.TODO() 87 88 var data []byte 89 90 contentLog1 := "storage logs 1" 91 contentLog2 := "storage logs 2" 92 output := result.ExecutionOutput{ 93 Id: "id", 94 Name: "execution-name", 95 TestName: "test-name", 96 TestSuiteName: "testsuite-name", 97 Output: contentLog1 + "\n" + contentLog2, 98 } 99 100 data, err := json.Marshal(output) 101 assert.NoError(t, err) 102 103 current := time.Now() 104 storageClient.EXPECT().DownloadFileFromBucket(gomock.Any(), "bucket", "", "test-execution-1"). 105 Return(bytes.NewReader(data), minio.ObjectInfo{LastModified: current}, nil) 106 r := NewMinioRepository(storageClient, "bucket") 107 108 tests := []struct { 109 name string 110 eventLogs []events.Log 111 }{ 112 { 113 name: "Test getting logs from minio", 114 eventLogs: []events.Log{ 115 { 116 Time: current, 117 Content: contentLog1, 118 Version: string(events.LogVersionV1), 119 }, 120 { 121 Time: current, 122 Content: contentLog2, 123 Version: string(events.LogVersionV1), 124 }, 125 }, 126 }, 127 } 128 129 var res []events.Log 130 for _, tt := range tests { 131 t.Run(tt.name, func(t *testing.T) { 132 logs, err := r.Get(ctx, "test-execution-1") 133 assert.NoError(t, err) 134 135 for out := range logs { 136 res = append(res, out.Log) 137 } 138 139 assert.Equal(t, tt.eventLogs, res) 140 }) 141 } 142 }