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) }