mirror of
https://github.com/percona/percona-toolkit.git
synced 2025-10-14 22:37:03 +00:00
188 lines
5.1 KiB
Go
188 lines
5.1 KiB
Go
package display
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/percona/percona-toolkit/src/go/pt-galera-log-explainer/types"
|
|
"github.com/percona/percona-toolkit/src/go/pt-galera-log-explainer/utils"
|
|
)
|
|
|
|
func TestTransitionSeparator(t *testing.T) {
|
|
t.Parallel()
|
|
tests := []struct {
|
|
keys []string
|
|
oldctxs, ctxs map[string]types.LogCtx
|
|
expectedOut string
|
|
name string
|
|
}{
|
|
{
|
|
name: "no changes",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
|
|
"node0": {},
|
|
"node1": {},
|
|
},
|
|
expectedOut: "",
|
|
},
|
|
{
|
|
name: "filepath changed on node0",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {FilePath: "path1"},
|
|
"node1": {},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
|
|
"node0": {FilePath: "path2"},
|
|
"node1": {},
|
|
},
|
|
/*
|
|
path1
|
|
(file path)
|
|
V
|
|
path2
|
|
*/
|
|
expectedOut: "\tpath1\t\t\n\t(file path)\t\t\n\t V \t\t\n\tpath2\t\t",
|
|
},
|
|
{
|
|
name: "filepath changed on node1",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {FilePath: "path1"},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
|
|
"node0": {},
|
|
"node1": {FilePath: "path2"},
|
|
},
|
|
expectedOut: "\t\tpath1\t\n\t\t(file path)\t\n\t\t V \t\n\t\tpath2\t",
|
|
},
|
|
{
|
|
name: "filepath changed on both",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {FilePath: "path1_0"},
|
|
"node1": {FilePath: "path1_1"},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {FilePath: "path2_0"},
|
|
"node1": {FilePath: "path2_1"},
|
|
},
|
|
expectedOut: "\tpath1_0\tpath1_1\t\n\t(file path)\t(file path)\t\n\t V \t V \t\n\tpath2_0\tpath2_1\t",
|
|
},
|
|
{
|
|
name: "node name changed on node1",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnNames: []string{"name1"}},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnNames: []string{"name1", "name2"}},
|
|
},
|
|
expectedOut: "\t\tname1\t\n\t\t(node name)\t\n\t\t V \t\n\t\tname2\t",
|
|
},
|
|
{
|
|
name: "node ip changed on node1",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnIPs: []string{"ip1"}},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnIPs: []string{"ip1", "ip2"}},
|
|
},
|
|
expectedOut: "\t\tip1\t\n\t\t(node ip)\t\n\t\t V \t\n\t\tip2\t",
|
|
},
|
|
{
|
|
name: "version changed on node1",
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {Version: "8.0.28"},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {Version: "8.0.30"},
|
|
},
|
|
expectedOut: "\t\t8.0.28\t\n\t\t(version)\t\n\t\t V \t\n\t\t8.0.30\t",
|
|
},
|
|
{
|
|
name: "node ip, node name and filepath changed on node1", // very possible with operators
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnIPs: []string{"ip1"}, OwnNames: []string{"name1"}, FilePath: "path1"},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {},
|
|
"node1": {OwnIPs: []string{"ip1", "ip2"}, OwnNames: []string{"name1", "name2"}, FilePath: "path2"},
|
|
},
|
|
/*
|
|
(timestamp) (node0) (node1)
|
|
\t \t path1 \t\n
|
|
\t \t (file path) \t\n
|
|
\t \t V \t\n
|
|
\t \t path2 \t\n
|
|
\t \t name1 \t\n
|
|
\t \t (node name) \t\n
|
|
\t \t V \t\n
|
|
\t \t name2 \t\n
|
|
\t \t ip2 \t\n
|
|
\t \t (node ip) \t\n
|
|
\t \t V \t\n
|
|
\t \t ip2 \t --only one without \n
|
|
|
|
*/
|
|
expectedOut: "\t\tpath1\t\n\t\t(file path)\t\n\t\t V \t\n\t\tpath2\t\n\t\tname1\t\n\t\t(node name)\t\n\t\t V \t\n\t\tname2\t\n\t\tip1\t\n\t\t(node ip)\t\n\t\t V \t\n\t\tip2\t",
|
|
},
|
|
|
|
{
|
|
name: "node ip, node name and filepath changed on node1, nodename changed on node2", // very possible with operators
|
|
keys: []string{"node0", "node1"},
|
|
oldctxs: map[string]types.LogCtx{
|
|
"node0": {OwnNames: []string{"name1_0"}},
|
|
"node1": {OwnIPs: []string{"ip1"}, OwnNames: []string{"name1_1"}, FilePath: "path1"},
|
|
},
|
|
ctxs: map[string]types.LogCtx{
|
|
"node0": {OwnNames: []string{"name1_0", "name2_0"}},
|
|
"node1": {OwnIPs: []string{"ip1", "ip2"}, OwnNames: []string{"name1_1", "name2_1"}, FilePath: "path2"},
|
|
},
|
|
/*
|
|
(timestamp) (node0) (node1)
|
|
\t name1_0\t path1 \t\n
|
|
\t (node name)\t (file path) \t\n
|
|
\t V \t V \t\n
|
|
\t name2_0\t path2 \t\n
|
|
\t \t name1_1 \t\n
|
|
\t \t (node name) \t\n
|
|
\t \t V \t\n
|
|
\t \t name2_1 \t\n
|
|
\t \t ip2 \t\n
|
|
\t \t (node ip) \t\n
|
|
\t \t V \t\n
|
|
\t \t ip2 \t --only one without \n
|
|
|
|
*/
|
|
expectedOut: "\tname1_0\tpath1\t\n\t(node name)\t(file path)\t\n\t V \t V \t\n\tname2_0\tpath2\t\n\t\tname1_1\t\n\t\t(node name)\t\n\t\t V \t\n\t\tname2_1\t\n\t\tip1\t\n\t\t(node ip)\t\n\t\t V \t\n\t\tip2\t",
|
|
},
|
|
}
|
|
|
|
utils.SkipColor = true
|
|
for _, test := range tests {
|
|
out := transitionSeparator(test.keys, test.oldctxs, test.ctxs)
|
|
if out != test.expectedOut {
|
|
t.Errorf("testname: %s, expected: \n%#v\n got: \n%#v", test.name, test.expectedOut, out)
|
|
}
|
|
|
|
}
|
|
}
|