github.com/argoproj/argo-cd/v2@v2.10.9/server/application/logs_test.go (about)

     1  package application
     2  
     3  import (
     4  	"io"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  func TestParseLogsStream_Successful(t *testing.T) {
    14  	r := io.NopCloser(strings.NewReader(`2021-02-09T22:13:45.916570818Z hello
    15  2021-02-09T22:13:45.916570818Z world`))
    16  
    17  	res := make(chan logEntry)
    18  	go func() {
    19  		parseLogsStream("test", r, res)
    20  		close(res)
    21  	}()
    22  
    23  	var entries []logEntry
    24  	expectedTimestamp, err := time.Parse(time.RFC3339Nano, "2021-02-09T22:13:45.916570818Z")
    25  	require.NoError(t, err)
    26  
    27  	for entry := range res {
    28  		entries = append(entries, entry)
    29  	}
    30  
    31  	assert.Equal(t, []logEntry{
    32  		{timeStamp: expectedTimestamp, podName: "test", line: "hello"},
    33  		{timeStamp: expectedTimestamp, podName: "test", line: "world"},
    34  	}, entries)
    35  }
    36  
    37  func TestParseLogsStream_ParsingError(t *testing.T) {
    38  	r := io.NopCloser(strings.NewReader(`hello world`))
    39  
    40  	res := make(chan logEntry)
    41  	go func() {
    42  		parseLogsStream("test", r, res)
    43  		close(res)
    44  	}()
    45  
    46  	var entries []logEntry
    47  	for entry := range res {
    48  		entries = append(entries, entry)
    49  	}
    50  
    51  	require.Len(t, entries, 1)
    52  	assert.Error(t, entries[0].err)
    53  }
    54  
    55  func TestMergeLogStreams(t *testing.T) {
    56  
    57  	first := make(chan logEntry)
    58  	go func() {
    59  		parseLogsStream("first", io.NopCloser(strings.NewReader(`2021-02-09T00:00:01Z 1
    60  2021-02-09T00:00:03Z 3`)), first)
    61  		close(first)
    62  	}()
    63  
    64  	second := make(chan logEntry)
    65  	go func() {
    66  		parseLogsStream("second", io.NopCloser(strings.NewReader(`2021-02-09T00:00:02Z 2
    67  2021-02-09T00:00:04Z 4`)), second)
    68  		close(second)
    69  	}()
    70  
    71  	merged := mergeLogStreams([]chan logEntry{first, second}, time.Second)
    72  	var lines []string
    73  	for entry := range merged {
    74  		lines = append(lines, entry.line)
    75  	}
    76  
    77  	assert.Equal(t, []string{"1", "2", "3", "4"}, lines)
    78  }