http-add-on/pkg/routing/table_rpc_test.go

92 lines
1.8 KiB
Go

package routing
import (
"context"
"testing"
"github.com/go-logr/logr"
"github.com/kedacore/http-add-on/pkg/queue"
"github.com/stretchr/testify/require"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes/fake"
)
func newTableFromMap(m map[string]Target) *Table {
table := NewTable()
for host, target := range m {
table.AddTarget(host, target)
}
return table
}
func TestRPCIntegration(t *testing.T) {
const ns = "testns"
ctx := context.Background()
lggr := logr.Discard()
r := require.New(t)
// fetch an empty table
retTable := NewTable()
k8sCl, err := fakeConfigMapClientForTable(
NewTable(),
ns,
ConfigMapRoutingTableName,
)
r.NoError(err)
r.NoError(GetTable(
ctx,
lggr,
k8sCl.CoreV1().ConfigMaps("testns"),
retTable,
queue.NewFakeCounter(),
))
r.Equal(0, len(retTable.m))
// fetch a table with lots of targets in it
targetMap := map[string]Target{
"host1": {
Service: "svc1",
Port: 1234,
Deployment: "depl1",
},
"host2": {
Service: "svc2",
Port: 2345,
Deployment: "depl2",
},
}
retTable = NewTable()
k8sCl, err = fakeConfigMapClientForTable(
newTableFromMap(targetMap),
ns,
ConfigMapRoutingTableName,
)
r.NoError(err)
r.NoError(GetTable(
ctx,
lggr,
k8sCl.CoreV1().ConfigMaps("testns"),
retTable,
queue.NewFakeCounter(),
))
r.Equal(len(targetMap), len(retTable.m))
r.Equal(targetMap, retTable.m)
}
func fakeConfigMapClientForTable(t *Table, ns, name string) (*fake.Clientset, error) {
cm := &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: name,
Namespace: ns,
},
Data: map[string]string{},
}
if err := SaveTableToConfigMap(t, cm); err != nil {
return nil, err
}
return fake.NewSimpleClientset(cm), nil
}