247 lines
4.6 KiB
Go
247 lines
4.6 KiB
Go
|
package snmp
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestTableJoin_walk(t *testing.T) {
|
||
|
tbl := Table{
|
||
|
Name: "mytable",
|
||
|
IndexAsTag: true,
|
||
|
Fields: []Field{
|
||
|
{
|
||
|
Name: "myfield1",
|
||
|
Oid: ".1.0.0.3.1.1",
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield2",
|
||
|
Oid: ".1.0.0.3.1.2",
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield3",
|
||
|
Oid: ".1.0.0.3.1.3",
|
||
|
SecondaryIndexTable: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield4",
|
||
|
Oid: ".1.0.0.0.1.1",
|
||
|
SecondaryIndexUse: true,
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield5",
|
||
|
Oid: ".1.0.0.0.1.2",
|
||
|
SecondaryIndexUse: true,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
tb, err := tbl.Build(tsc, true)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
require.Equal(t, "mytable", tb.Name)
|
||
|
rtr1 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance",
|
||
|
"myfield4": "bar",
|
||
|
"index": "10",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 10,
|
||
|
"myfield3": 1,
|
||
|
"myfield5": 2,
|
||
|
},
|
||
|
}
|
||
|
rtr2 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance2",
|
||
|
"index": "11",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 2,
|
||
|
"myfield5": 0,
|
||
|
},
|
||
|
}
|
||
|
rtr3 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance3",
|
||
|
"index": "12",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 3,
|
||
|
},
|
||
|
}
|
||
|
require.Len(t, tb.Rows, 3)
|
||
|
require.Contains(t, tb.Rows, rtr1)
|
||
|
require.Contains(t, tb.Rows, rtr2)
|
||
|
require.Contains(t, tb.Rows, rtr3)
|
||
|
}
|
||
|
|
||
|
func TestTableOuterJoin_walk(t *testing.T) {
|
||
|
tbl := Table{
|
||
|
Name: "mytable",
|
||
|
IndexAsTag: true,
|
||
|
Fields: []Field{
|
||
|
{
|
||
|
Name: "myfield1",
|
||
|
Oid: ".1.0.0.3.1.1",
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield2",
|
||
|
Oid: ".1.0.0.3.1.2",
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield3",
|
||
|
Oid: ".1.0.0.3.1.3",
|
||
|
SecondaryIndexTable: true,
|
||
|
SecondaryOuterJoin: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield4",
|
||
|
Oid: ".1.0.0.0.1.1",
|
||
|
SecondaryIndexUse: true,
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield5",
|
||
|
Oid: ".1.0.0.0.1.2",
|
||
|
SecondaryIndexUse: true,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
tb, err := tbl.Build(tsc, true)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
require.Equal(t, "mytable", tb.Name)
|
||
|
rtr1 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance",
|
||
|
"myfield4": "bar",
|
||
|
"index": "10",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 10,
|
||
|
"myfield3": 1,
|
||
|
"myfield5": 2,
|
||
|
},
|
||
|
}
|
||
|
rtr2 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance2",
|
||
|
"index": "11",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 2,
|
||
|
"myfield5": 0,
|
||
|
},
|
||
|
}
|
||
|
rtr3 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance3",
|
||
|
"index": "12",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 3,
|
||
|
},
|
||
|
}
|
||
|
rtr4 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"index": "Secondary.0",
|
||
|
"myfield4": "foo",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield5": 1,
|
||
|
},
|
||
|
}
|
||
|
require.Len(t, tb.Rows, 4)
|
||
|
require.Contains(t, tb.Rows, rtr1)
|
||
|
require.Contains(t, tb.Rows, rtr2)
|
||
|
require.Contains(t, tb.Rows, rtr3)
|
||
|
require.Contains(t, tb.Rows, rtr4)
|
||
|
}
|
||
|
|
||
|
func TestTableJoinNoIndexAsTag_walk(t *testing.T) {
|
||
|
tbl := Table{
|
||
|
Name: "mytable",
|
||
|
IndexAsTag: false,
|
||
|
Fields: []Field{
|
||
|
{
|
||
|
Name: "myfield1",
|
||
|
Oid: ".1.0.0.3.1.1",
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield2",
|
||
|
Oid: ".1.0.0.3.1.2",
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield3",
|
||
|
Oid: ".1.0.0.3.1.3",
|
||
|
SecondaryIndexTable: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield4",
|
||
|
Oid: ".1.0.0.0.1.1",
|
||
|
SecondaryIndexUse: true,
|
||
|
IsTag: true,
|
||
|
},
|
||
|
{
|
||
|
Name: "myfield5",
|
||
|
Oid: ".1.0.0.0.1.2",
|
||
|
SecondaryIndexUse: true,
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
tb, err := tbl.Build(tsc, true)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
require.Equal(t, "mytable", tb.Name)
|
||
|
rtr1 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance",
|
||
|
"myfield4": "bar",
|
||
|
// "index": "10",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 10,
|
||
|
"myfield3": 1,
|
||
|
"myfield5": 2,
|
||
|
},
|
||
|
}
|
||
|
rtr2 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance2",
|
||
|
// "index": "11",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 2,
|
||
|
"myfield5": 0,
|
||
|
},
|
||
|
}
|
||
|
rtr3 := RTableRow{
|
||
|
Tags: map[string]string{
|
||
|
"myfield1": "instance3",
|
||
|
// "index": "12",
|
||
|
},
|
||
|
Fields: map[string]interface{}{
|
||
|
"myfield2": 20,
|
||
|
"myfield3": 3,
|
||
|
},
|
||
|
}
|
||
|
require.Len(t, tb.Rows, 3)
|
||
|
require.Contains(t, tb.Rows, rtr1)
|
||
|
require.Contains(t, tb.Rows, rtr2)
|
||
|
require.Contains(t, tb.Rows, rtr3)
|
||
|
}
|