133 lines
3.5 KiB
Go
133 lines
3.5 KiB
Go
// SPDX-License-Identifier: Apache-2.0
|
|
// Copyright Authors of K9s
|
|
|
|
package dao_test
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/derailed/k9s/internal/client"
|
|
"github.com/derailed/k9s/internal/dao"
|
|
"github.com/derailed/tview"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestLogItemEmpty(t *testing.T) {
|
|
uu := map[string]struct {
|
|
s string
|
|
e bool
|
|
}{
|
|
"empty": {s: "", e: true},
|
|
"full": {s: "Testing 1,2,3..."},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
i := dao.NewLogItemFromString(u.s)
|
|
assert.Equal(t, u.e, i.IsEmpty())
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestLogItemRender(t *testing.T) {
|
|
uu := map[string]struct {
|
|
opts dao.LogOptions
|
|
log string
|
|
e string
|
|
}{
|
|
"empty": {
|
|
opts: dao.LogOptions{},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."),
|
|
e: "Testing 1,2,3...\n",
|
|
},
|
|
"container": {
|
|
opts: dao.LogOptions{
|
|
Container: "fred",
|
|
},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."),
|
|
e: "[yellow::b]fred[-::-] Testing 1,2,3...\n",
|
|
},
|
|
"pod": {
|
|
opts: dao.LogOptions{
|
|
Path: "blee/fred",
|
|
Container: "blee",
|
|
SingleContainer: true,
|
|
},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."),
|
|
e: "[yellow::]fred [yellow::b]blee[-::-] Testing 1,2,3...\n",
|
|
},
|
|
"full": {
|
|
opts: dao.LogOptions{
|
|
Path: "blee/fred",
|
|
Container: "blee",
|
|
SingleContainer: true,
|
|
ShowTimestamp: true,
|
|
},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."),
|
|
e: "[gray::b]2018-12-14T10:36:43.326972-07:00 [-::-][yellow::]fred [yellow::b]blee[-::-] Testing 1,2,3...\n",
|
|
},
|
|
"log-level": {
|
|
opts: dao.LogOptions{
|
|
Path: "blee/fred",
|
|
Container: "",
|
|
SingleContainer: false,
|
|
ShowTimestamp: false,
|
|
},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "2021-10-28T13:06:37Z [INFO] [blah-blah] Testing 1,2,3..."),
|
|
e: "[yellow::]fred[-::] 2021-10-28T13:06:37Z [INFO[] [blah-blah[] Testing 1,2,3...\n",
|
|
},
|
|
"escape": {
|
|
opts: dao.LogOptions{
|
|
Path: "blee/fred",
|
|
Container: "",
|
|
SingleContainer: false,
|
|
ShowTimestamp: false,
|
|
},
|
|
log: fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", `{"foo":["bar"]} Server listening on: [::]:5000`),
|
|
e: `[yellow::]fred[-::] {"foo":["bar"[]} Server listening on: [::[]:5000` + "\n",
|
|
},
|
|
}
|
|
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
i := dao.NewLogItem([]byte(tview.Escape(u.log)))
|
|
_, n := client.Namespaced(u.opts.Path)
|
|
i.Pod, i.Container = n, u.opts.Container
|
|
|
|
bb := bytes.NewBuffer(make([]byte, 0, i.Size()))
|
|
i.Render("yellow", u.opts.ShowTimestamp, bb)
|
|
assert.Equal(t, u.e, bb.String())
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogItemRenderTS(b *testing.B) {
|
|
s := []byte(fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."))
|
|
i := dao.NewLogItem(s)
|
|
i.Pod, i.Container = "fred", "blee"
|
|
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
for range b.N {
|
|
bb := bytes.NewBuffer(make([]byte, 0, i.Size()))
|
|
i.Render("yellow", true, bb)
|
|
}
|
|
}
|
|
|
|
func BenchmarkLogItemRenderNoTS(b *testing.B) {
|
|
s := []byte(fmt.Sprintf("%s %s\n", "2018-12-14T10:36:43.326972-07:00", "Testing 1,2,3..."))
|
|
i := dao.NewLogItem(s)
|
|
i.Pod, i.Container = "fred", "blee"
|
|
|
|
b.ResetTimer()
|
|
b.ReportAllocs()
|
|
for range b.N {
|
|
bb := bytes.NewBuffer(make([]byte, 0, i.Size()))
|
|
i.Render("yellow", false, bb)
|
|
}
|
|
}
|