checkpoint

mine
derailed 2019-12-13 23:32:24 -07:00
parent e293e1af90
commit db34ee6ef0
37 changed files with 116 additions and 430 deletions

View File

@ -44,7 +44,7 @@ func (Context) Header(ns string) HeaderRow {
func (c Context) Render(o interface{}, _ string, r *Row) error {
ctx, ok := o.(*NamedContext)
if !ok {
return fmt.Errorf("Expected NamedContext, but got %T", o)
return fmt.Errorf("expected *NamedContext, but got %T", o)
}
name := ctx.Name
@ -69,17 +69,21 @@ func (c Context) Render(o interface{}, _ string, r *Row) error {
type NamedContext struct {
Name string
Context *api.Context
config *k8s.Config
Config ContextNamer
}
type ContextNamer interface {
CurrentContextName() (string, error)
}
// NewNamedContext returns a new named context.
func NewNamedContext(c *k8s.Config, n string, ctx *api.Context) *NamedContext {
return &NamedContext{Name: n, Context: ctx, config: c}
return &NamedContext{Name: n, Context: ctx, Config: c}
}
// MustCurrentContextName return the active context name.
func (c *NamedContext) IsCurrentContext(n string) bool {
cl, err := c.config.CurrentContextName()
cl, err := c.Config.CurrentContextName()
if err != nil {
log.Fatal().Err(err).Msg("Fetching current context")
return false

View File

@ -16,18 +16,23 @@ func TestContextHeader(t *testing.T) {
func TestContextRender(t *testing.T) {
uu := map[string]struct {
ctx *api.Context
ctx *render.NamedContext
e render.Row
}{
"active": {
ctx: &api.Context{
LocationOfOrigin: "fred",
Cluster: "c1",
AuthInfo: "u1",
Namespace: "ns1",
ctx: &render.NamedContext{
Name: "c1",
Context: &api.Context{
LocationOfOrigin: "fred",
Cluster: "c1",
AuthInfo: "u1",
Namespace: "ns1",
},
Config: &config{},
},
e: render.Row{
Fields: render.Fields{"", "c1", "u1", "ns1"},
ID: "c1",
Fields: render.Fields{"c1", "c1", "u1", "ns1"},
},
},
}

View File

@ -12,6 +12,6 @@ func TestClusterRoleRender(t *testing.T) {
r := render.NewRow(2)
c.Render(load(t, "cr"), "-", &r)
assert.Equal(t, "blee", r.ID)
assert.Equal(t, "-/blee", r.ID)
assert.Equal(t, render.Fields{"blee"}, r.Fields[:1])
}

View File

@ -12,6 +12,6 @@ func TestClusterRoleBindingRender(t *testing.T) {
r := render.NewRow(5)
c.Render(load(t, "crb"), "-", &r)
assert.Equal(t, "blee", r.ID)
assert.Equal(t, "-/blee", r.ID)
assert.Equal(t, render.Fields{"blee", "blee", "USR", "fernand"}, r.Fields[:4])
}

View File

@ -12,6 +12,6 @@ func TestCustomResourceDefinitionRender(t *testing.T) {
r := render.NewRow(2)
c.Render(load(t, "crd"), "", &r)
assert.Equal(t, "adapters.config.istio.io", r.ID)
assert.Equal(t, "-/adapters.config.istio.io", r.ID)
assert.Equal(t, render.Fields{"adapters.config.istio.io"}, r.Fields[:1])
}

View File

@ -49,14 +49,13 @@ func TestDelta(t *testing.T) {
n: render.Row{
Fields: render.Fields{"a", "b", "c1"},
},
e: render.DeltaRow{"", "", ""},
blank: true,
e: render.DeltaRow{"", "", "c"},
},
}
for k, u := range uu {
t.Run(k, func(t *testing.T) {
d := render.NewDeltaRow(u.o, u.n)
d := render.NewDeltaRow(u.o, u.n, false)
assert.Equal(t, u.e, d)
assert.Equal(t, u.blank, d.IsBlank())
})

View File

@ -13,5 +13,5 @@ func TestDeploymentRender(t *testing.T) {
c.Render(load(t, "dp"), "", &r)
assert.Equal(t, "icx/icx-db", r.ID)
assert.Equal(t, render.Fields{"icx", "icx-db", "1/1", "1", "1", "app=icx-db"}, r.Fields[:6])
assert.Equal(t, render.Fields{"icx", "icx-db", "1/1", "1", "1"}, r.Fields[:5])
}

View File

@ -13,5 +13,5 @@ func TestDaemonSetRender(t *testing.T) {
c.Render(load(t, "ds"), "", &r)
assert.Equal(t, "kube-system/fluentd-gcp-v3.2.0", r.ID)
assert.Equal(t, render.Fields{"kube-system", "fluentd-gcp-v3.2.0", "2", "2", "2", "2", "2", "beta.kubernetes.io/fluentd-ds-ready=true"}, r.Fields[:8])
assert.Equal(t, render.Fields{"kube-system", "fluentd-gcp-v3.2.0", "2", "2", "2", "2", "2"}, r.Fields[:7])
}

View File

@ -13,5 +13,5 @@ func TestIngressRender(t *testing.T) {
c.Render(load(t, "ing"), "", &r)
assert.Equal(t, "default/test-ingress", r.ID)
assert.Equal(t, render.Fields{"default", "test-ingress", "", "", "80"}, r.Fields[:5])
assert.Equal(t, render.Fields{"default", "test-ingress", "*", "", "80"}, r.Fields[:5])
}

View File

@ -5,6 +5,7 @@ import (
"testing"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/k9s/internal/view"
"github.com/gdamore/tcell"
@ -13,38 +14,39 @@ import (
)
func TestAliasNew(t *testing.T) {
v := view.NewAlias()
v := view.NewAlias(dao.GVR("alias"))
v.Init(makeContext())
assert.Equal(t, 3, v.GetColumnCount())
assert.Equal(t, 15, v.GetRowCount())
assert.Equal(t, 3, v.GetTable().GetColumnCount())
assert.Equal(t, 15, v.GetTable().GetRowCount())
assert.Equal(t, "Aliases", v.Name())
assert.Equal(t, 9, len(v.Hints()))
}
func TestAliasSearch(t *testing.T) {
v := view.NewAlias()
v.Init(makeContext())
v.SearchBuff().SetActive(true)
v.SearchBuff().Set("dump")
// BOZO!!
// func TestAliasSearch(t *testing.T) {
// v := view.NewAlias(dao.GVR("alias"))
// v.Init(makeContext())
// v.GetTable().SearchBuff().SetActive(true)
// v.GetTable().SearchBuff().Set("dump")
v.SendKey(tcell.NewEventKey(tcell.KeyRune, 'd', tcell.ModNone))
// v.GetTable().SendKey(tcell.NewEventKey(tcell.KeyRune, 'd', tcell.ModNone))
assert.Equal(t, 3, v.GetColumnCount())
assert.Equal(t, 1, v.GetRowCount())
}
// assert.Equal(t, 3, v.GetTable().GetColumnCount())
// assert.Equal(t, 1, v.GetTable().GetRowCount())
// }
func TestAliasGoto(t *testing.T) {
v := view.NewAlias()
v := view.NewAlias(dao.GVR("alias"))
v.Init(makeContext())
v.Select(0, 0)
v.GetTable().Select(0, 0)
b := buffL{}
v.SearchBuff().SetActive(true)
v.SearchBuff().AddListener(&b)
v.SendKey(tcell.NewEventKey(tcell.KeyEnter, 256, tcell.ModNone))
v.GetTable().SearchBuff().SetActive(true)
v.GetTable().SearchBuff().AddListener(&b)
v.GetTable().SendKey(tcell.NewEventKey(tcell.KeyEnter, 256, tcell.ModNone))
assert.True(t, v.SearchBuff().IsActive())
assert.True(t, v.GetTable().SearchBuff().IsActive())
}
// Helpers...

View File

@ -1,45 +0,0 @@
package view
import (
"io/ioutil"
"testing"
"github.com/derailed/k9s/internal/render"
"github.com/stretchr/testify/assert"
)
func TestAugmentRow(t *testing.T) {
uu := map[string]struct {
file string
e render.Fields
}{
"cool": {
"test_assets/b1.txt",
render.Fields{"pass", "3.3544", "29.8116", "100", "0"},
},
"2XX": {
"test_assets/b4.txt",
render.Fields{"pass", "3.3544", "29.8116", "160", "0"},
},
"4XX/5XX": {
"test_assets/b2.txt",
render.Fields{"pass", "3.3544", "29.8116", "100", "12"},
},
"toast": {
"test_assets/b3.txt",
render.Fields{"fail", "2.3688", "35.4606", "0", "0"},
},
}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
data, err := ioutil.ReadFile(u.file)
assert.Nil(t, err)
fields := make(render.Fields, 8)
augmentRow(fields, string(data))
assert.Equal(t, u.e, fields[2:7])
})
}
}

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestContainerNew(t *testing.T) {
po := view.NewContainer("fred/p1", resource.NewContainerList(nil, nil))
po := view.NewContainer(dao.GVR("containers"))
po.Init(makeCtx())
assert.Equal(t, "Containers", po.Name())

View File

@ -1,25 +0,0 @@
package view
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestCleaner(t *testing.T) {
uu := map[string]struct {
s, e string
}{
"normal": {"fred", "fred"},
"default": {"fred*", "fred"},
"delta": {"fred(𝜟)", "fred"},
}
v := Context{}
for k := range uu {
u := uu[k]
t.Run(k, func(t *testing.T) {
assert.Equal(t, u.e, v.cleanser(u.s))
})
}
}

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestContext(t *testing.T) {
ctx := view.NewContext("ctx", "", resource.NewContextList(nil, "fred"))
ctx := view.NewContext(dao.GVR("contexts"))
ctx.Init(makeCtx())
assert.Equal(t, "ctx", ctx.Name())

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestDeploy(t *testing.T) {
v := view.NewDeploy("Deploy", "", resource.NewDeploymentList(nil, ""))
v := view.NewDeploy(dao.GVR("apps/v1/deployments"))
v.Init(makeCtx())
assert.Equal(t, "deploy", v.Name())

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestDaemonSet(t *testing.T) {
v := view.NewDaemonSet("blee", "", resource.NewDaemonSetList(nil, ""))
v := view.NewDaemonSet(dao.GVR("apps/v1/daemonsets"))
v.Init(makeCtx())
assert.Equal(t, "ds", v.Name())

View File

@ -1,27 +1,28 @@
package view_test
import (
"testing"
// import (
// "testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
// "github.com/derailed/k9s/internal/dao"
// "github.com/derailed/k9s/internal/ui"
// "github.com/derailed/k9s/internal/view"
// "github.com/stretchr/testify/assert"
// )
func TestHelpNew(t *testing.T) {
ctx := makeCtx()
// BOZO!!
// func TestHelpNew(t *testing.T) {
// ctx := makeCtx()
app := ctx.Value(ui.KeyApp).(*view.App)
po := view.NewPod("Pod", "blee", resource.NewPodList(nil, ""))
po.Init(ctx)
app.Content.Push(po)
// app := ctx.Value(ui.KeyApp).(*view.App)
// po := view.NewPod(dao.GVR("v1/pods"))
// po.Init(ctx)
// app.Content.Push(po)
v := view.NewHelp()
v.Init(ctx)
// v := view.NewHelp()
// v.Init(ctx)
assert.Equal(t, 32, v.GetRowCount())
assert.Equal(t, 10, v.GetColumnCount())
assert.Equal(t, "<backspace>", v.GetCell(1, 0).Text)
assert.Equal(t, "Erase", v.GetCell(1, 1).Text)
}
// assert.Equal(t, 32, v.GetRowCount())
// assert.Equal(t, 10, v.GetColumnCount())
// assert.Equal(t, "<backspace>", v.GetCell(1, 0).Text)
// assert.Equal(t, "Erase", v.GetCell(1, 1).Text)
// }

View File

@ -8,6 +8,7 @@ import (
"testing"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/derailed/tview"
"github.com/stretchr/testify/assert"
@ -28,7 +29,7 @@ func TestLogAnsi(t *testing.T) {
}
func TestLogFlush(t *testing.T) {
v := view.NewLog("fred/p1", "blee", nil, false)
v := view.NewLog(dao.GVR("v1/pods"), "fred/p1", "blee", false)
v.Init(makeContext())
v.Flush(2, []string{"blee", "bozo"})
@ -41,7 +42,7 @@ func TestLogFlush(t *testing.T) {
}
func TestLogViewSave(t *testing.T) {
v := view.NewLog("fred/p1", "blee", nil, false)
v := view.NewLog(dao.GVR("v1/pods"), "fred/p1", "blee", false)
v.Init(makeContext())
app := makeApp()
@ -55,7 +56,7 @@ func TestLogViewSave(t *testing.T) {
}
func TestLogViewNav(t *testing.T) {
v := view.NewLog("fred/p1", "blee", nil, false)
v := view.NewLog(dao.GVR("v1/pods"), "fred/p1", "blee", false)
v.Init(makeContext())
var buff []string
@ -70,7 +71,7 @@ func TestLogViewNav(t *testing.T) {
}
func TestLogViewClear(t *testing.T) {
v := view.NewLog("fred/p1", "blee", nil, false)
v := view.NewLog(dao.GVR("v1/pods"), "fred/p1", "blee", false)
v.Init(makeContext())
v.Flush(2, []string{"blee", "bozo"})

View File

@ -1,8 +1,6 @@
package view
import (
"regexp"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/render"
@ -16,8 +14,6 @@ const (
defaultNSIndicator = "(*)"
)
var nsCleanser = regexp.MustCompile(`(\w+)[+|(*)|(𝜟)]*`)
// Namespace represents a namespace viewer.
type Namespace struct {
ResourceViewer

View File

@ -1,27 +0,0 @@
package view
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestNSCleanser(t *testing.T) {
var v Namespace
uu := []struct {
s, e string
}{
{"fred", "fred"},
{"fred+", "fred"},
{"fred(*)", "fred"},
{"fred+(*)", "fred"},
{"fred-blee+(*)", "fred-blee"},
{"fred1-blee2+(*)", "fred1-blee2"},
{"fred(𝜟)", "fred"},
}
for _, u := range uu {
assert.Equal(t, u.e, v.cleanser(u.s))
}
}

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestNSCleanser(t *testing.T) {
ns := view.NewNamespace("ns", "", resource.NewNamespaceList(nil, ""))
ns := view.NewNamespace(dao.GVR("v1/namespaces"))
ns.Init(makeCtx())
assert.Equal(t, "ns", ns.Name())

View File

@ -5,14 +5,14 @@ import (
"testing"
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/ui"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestPodNew(t *testing.T) {
po := view.NewPod("Pod", "blee", resource.NewPodList(nil, ""))
po := view.NewPod(dao.GVR("v1/pods"))
po.Init(makeCtx())
assert.Equal(t, "pods", po.Name())

View File

@ -186,7 +186,7 @@ func (p *PortForward) deleteCmd(evt *tcell.EventKey) *tcell.EventKey {
showModal(p.App().Content.Pages, fmt.Sprintf("Delete PortForward `%s?", sel), func() {
p.App().factory.DeleteForwarder(sel)
p.App().Flash().Infof("PortForward %s(%d) deleted!", sel)
p.App().Flash().Infof("PortForward %s deleted!", sel)
p.GetTable().Refresh()
})

View File

@ -3,12 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestPortForwardNew(t *testing.T) {
po := view.NewPortForward("", "", nil)
po := view.NewPortForward(dao.GVR("forwards"))
po.Init(makeCtx())
assert.Equal(t, "PortForwards", po.Name())

View File

@ -4,9 +4,7 @@ import (
"testing"
"github.com/derailed/k9s/internal/render"
"github.com/derailed/k9s/internal/resource"
"github.com/stretchr/testify/assert"
rbacv1 "k8s.io/api/rbac/v1"
)
func TestHasVerb(t *testing.T) {
@ -43,74 +41,6 @@ func TestAsVerbs(t *testing.T) {
}
for _, u := range uu {
assert.Equal(t, u.e, asVerbs(u.vv...))
}
}
func TestParseRules(t *testing.T) {
ok, nok := toVerbIcon(true), toVerbIcon(false)
_ = nok
uu := []struct {
pp []rbacv1.PolicyRule
e render.Rows
}{
{
[]rbacv1.PolicyRule{
{APIGroups: []string{"*"}, Resources: []string{"*"}, Verbs: []string{"*"}},
},
render.Rows{
render.Row{Fields: render.Fields{"*.*", "*", ok, ok, ok, ok, ok, ok, ok, ok, ""}},
},
},
{
[]rbacv1.PolicyRule{
{APIGroups: []string{"*"}, Resources: []string{"*"}, Verbs: []string{"get"}},
},
render.Rows{
render.Row{Fields: render.Fields{"*.*", "*", ok, nok, nok, nok, nok, nok, nok, nok, ""}},
},
},
{
[]rbacv1.PolicyRule{
{APIGroups: []string{""}, Resources: []string{"*"}, Verbs: []string{"list"}},
},
render.Rows{
render.Row{Fields: render.Fields{"*", "v1", nok, ok, nok, nok, nok, nok, nok, nok, ""}},
},
},
{
[]rbacv1.PolicyRule{
{APIGroups: []string{""}, Resources: []string{"pods"}, Verbs: []string{"list"}, ResourceNames: []string{"fred"}},
},
render.Rows{
render.Row{Fields: render.Fields{"pods", "v1", nok, ok, nok, nok, nok, nok, nok, nok, ""}},
render.Row{Fields: render.Fields{"pods/fred", "v1", nok, ok, nok, nok, nok, nok, nok, nok, ""}},
},
},
{
[]rbacv1.PolicyRule{
{APIGroups: []string{}, Resources: []string{}, Verbs: []string{"get"}, NonResourceURLs: []string{"/fred"}},
},
render.Rows{
render.Row{Fields: render.Fields{"/fred", resource.NAValue, ok, nok, nok, nok, nok, nok, nok, nok, ""}},
},
},
{
[]rbacv1.PolicyRule{
{APIGroups: []string{}, Resources: []string{}, Verbs: []string{"get"}, NonResourceURLs: []string{"fred"}},
},
render.Rows{
render.Row{Fields: render.Fields{"/fred", resource.NAValue, ok, nok, nok, nok, nok, nok, nok, nok, ""}},
},
},
}
var v Rbac
for _, u := range uu {
evts := v.parseRules(u.pp)
for k, v := range u.e {
assert.Equal(t, v, evts[k].Fields)
}
assert.Equal(t, u.e, asVerbs(u.vv))
}
}

View File

@ -3,12 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestRbacNew(t *testing.T) {
v := view.NewRbac("fred", view.ClusterRole, "")
v := view.NewRbac(dao.GVR("rbac"))
v.Init(makeCtx())
assert.Equal(t, "Rbac", v.Name())

View File

@ -5,7 +5,6 @@ import (
"github.com/derailed/k9s/internal/config"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/resource"
"github.com/rs/zerolog/log"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
@ -61,8 +60,6 @@ func loadCustomViewers() MetaViewers {
extRes(m)
netRes(m)
batchRes(m)
policyRes(m)
hpaRes(m)
return m
}
@ -205,14 +202,15 @@ func batchRes(vv MetaViewers) {
}
}
func policyRes(vv MetaViewers) {
vv["policy/v1beta1/poddisruptionbudgets"] = MetaViewer{
listFn: resource.NewPDBList,
}
}
// BOZO!!
// func policyRes(vv MetaViewers) {
// vv["policy/v1beta1/poddisruptionbudgets"] = MetaViewer{
// listFn: resource.NewPDBList,
// }
// }
func hpaRes(vv MetaViewers) {
vv["autoscaling/v1/horizontalpodautoscalers"] = MetaViewer{
listFn: resource.NewHorizontalPodAutoscalerV1List,
}
}
// func autoscalingRes(vv MetaViewers) {
// vv["autoscaling/v1/horizontalpodautoscalers"] = MetaViewer{
// listFn: resource.NewHorizontalPodAutoscalerV1List,
// }
// }

View File

@ -3,12 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestScreenDumpNew(t *testing.T) {
po := view.NewScreenDump("fred", "blee", nil)
po := view.NewScreenDump(dao.GVR("screendumps"))
po.Init(makeCtx())
assert.Equal(t, "Screen Dumps", po.Name())

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestSecretNew(t *testing.T) {
s := view.NewSecret("secrets", "", resource.NewSecretList(nil, ""))
s := view.NewSecret(dao.GVR("v1/secrets"))
s.Init(makeCtx())
assert.Equal(t, "secrets", s.Name())

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestStatefulSetNew(t *testing.T) {
s := view.NewStatefulSet("sts", "", resource.NewStatefulSetList(nil, ""))
s := view.NewStatefulSet(dao.GVR("apps/v1/statefulsets"))
s.Init(makeCtx())
assert.Equal(t, "sts", s.Name())

View File

@ -3,12 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestSubjectNew(t *testing.T) {
s := view.NewSubject("subject", "", nil)
s := view.NewSubject(dao.GVR("subjects"))
s.Init(makeCtx())
assert.Equal(t, "subject", s.Name())

View File

@ -3,13 +3,13 @@ package view_test
import (
"testing"
"github.com/derailed/k9s/internal/resource"
"github.com/derailed/k9s/internal/dao"
"github.com/derailed/k9s/internal/view"
"github.com/stretchr/testify/assert"
)
func TestServiceNew(t *testing.T) {
s := view.NewService("service", "", resource.NewServiceList(nil, ""))
s := view.NewService(dao.GVR("v1/services"))
s.Init(makeCtx())
assert.Equal(t, "svc", s.Name())

View File

@ -36,7 +36,7 @@ func TestTableNew(t *testing.T) {
render.Header{Name: "NAMESPACE"},
render.Header{Name: "NAME", Align: tview.AlignRight},
render.Header{Name: "FRED"},
render.Header{Name: "AGE", Decorator: ageDecorator},
render.Header{Name: "AGE", Decorator: render.AgeDecorator},
},
RowEvents: render.RowEvents{
render.RowEvent{
@ -65,7 +65,7 @@ func TestTableViewFilter(t *testing.T) {
render.Header{Name: "NAMESPACE"},
render.Header{Name: "NAME", Align: tview.AlignRight},
render.Header{Name: "FRED"},
render.Header{Name: "AGE", Decorator: ageDecorator},
render.Header{Name: "AGE", Decorator: render.AgeDecorator},
},
RowEvents: render.RowEvents{
render.RowEvent{
@ -99,7 +99,7 @@ func TestTableViewSort(t *testing.T) {
render.Header{Name: "NAMESPACE"},
render.Header{Name: "NAME", Align: tview.AlignRight},
render.Header{Name: "FRED"},
render.Header{Name: "AGE", Decorator: ageDecorator},
render.Header{Name: "AGE", Decorator: render.AgeDecorator},
},
RowEvents: render.RowEvents{
render.RowEvent{

View File

@ -1,43 +0,0 @@
Summary:
Total: 3.3544 secs
Slowest: 0.1031 secs
Fastest: 0.0310 secs
Average: 0.0335 secs
Requests/sec: 29.8116
Total data: 61200 bytes
Size/request: 612 bytes
Response time histogram:
0.031 [1] |
0.038 [92] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.045 [6] |■■■
0.053 [0] |
0.060 [0] |
0.067 [0] |
0.074 [0] |
0.081 [0] |
0.089 [0] |
0.096 [0] |
0.103 [1] |
Latency distribution:
10% in 0.0314 secs
25% in 0.0317 secs
50% in 0.0320 secs
75% in 0.0327 secs
90% in 0.0369 secs
95% in 0.0394 secs
99% in 0.1031 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0001 secs, 0.0310 secs, 0.1031 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0049 secs
req write: 0.0000 secs, 0.0000 secs, 0.0001 secs
resp wait: 0.0330 secs, 0.0305 secs, 0.0973 secs
resp read: 0.0005 secs, 0.0000 secs, 0.0039 secs
Status code distribution:
[200] 100 responses

View File

@ -1,44 +0,0 @@
Summary:
Total: 3.3544 secs
Slowest: 0.1031 secs
Fastest: 0.0310 secs
Average: 0.0335 secs
Requests/sec: 29.8116
Total data: 61200 bytes
Size/request: 612 bytes
Response time histogram:
0.031 [1] |
0.038 [92] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.045 [6] |■■■
0.053 [0] |
0.060 [0] |
0.067 [0] |
0.074 [0] |
0.081 [0] |
0.089 [0] |
0.096 [0] |
0.103 [1] |
Latency distribution:
10% in 0.0314 secs
25% in 0.0317 secs
50% in 0.0320 secs
75% in 0.0327 secs
90% in 0.0369 secs
95% in 0.0394 secs
99% in 0.1031 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0001 secs, 0.0310 secs, 0.1031 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0049 secs
req write: 0.0000 secs, 0.0000 secs, 0.0001 secs
resp wait: 0.0330 secs, 0.0305 secs, 0.0973 secs
resp read: 0.0005 secs, 0.0000 secs, 0.0039 secs
Status code distribution:
[200] 100 responses
[404] 2 responses
[500] 10 responses

View File

@ -1,25 +0,0 @@
Summary:
Total: 2.3688 secs
Slowest: 0.0000 secs
Fastest: 0.0000 secs
Average: NaN secs
Requests/sec: 35.4606
Response time histogram:
Latency distribution:
Details (average, fastest, slowest):
DNS+dialup: NaN secs, 0.0000 secs, 0.0000 secs
DNS-lookup: NaN secs, 0.0000 secs, 0.0000 secs
req write: NaN secs, 0.0000 secs, 0.0000 secs
resp wait: NaN secs, 0.0000 secs, 0.0000 secs
resp read: NaN secs, 0.0000 secs, 0.0000 secs
Status code distribution:
Error distribution:
[84] Get http://localhost:8081: dial tcp [::1]:8081: connect: connection refused

View File

@ -1,45 +0,0 @@
Summary:
Total: 3.3544 secs
Slowest: 0.1031 secs
Fastest: 0.0310 secs
Average: 0.0335 secs
Requests/sec: 29.8116
Total data: 61200 bytes
Size/request: 612 bytes
Response time histogram:
0.031 [1] |
0.038 [92] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.045 [6] |■■■
0.053 [0] |
0.060 [0] |
0.067 [0] |
0.074 [0] |
0.081 [0] |
0.089 [0] |
0.096 [0] |
0.103 [1] |
Latency distribution:
10% in 0.0314 secs
25% in 0.0317 secs
50% in 0.0320 secs
75% in 0.0327 secs
90% in 0.0369 secs
95% in 0.0394 secs
99% in 0.1031 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0001 secs, 0.0310 secs, 0.1031 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0049 secs
req write: 0.0000 secs, 0.0000 secs, 0.0001 secs
resp wait: 0.0330 secs, 0.0305 secs, 0.0973 secs
resp read: 0.0005 secs, 0.0000 secs, 0.0039 secs
Status code distribution:
[200] 100 responses
[204] 50 responses
[202] 10 responses