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  }