package kubenat

import (
	"context"
	"flag"
	"net"
	"testing"
)

func TestResolvePod(t *testing.T) {
	t.Skip("needs containerd running on host and unhardcoded test data")
	flag.Set("logtostderr", "true")

	ctx, ctxC := context.WithCancel(context.Background())
	defer ctxC()

	r, err := NewResolver(ctx, "/tmp/conntrack", "/tmp/containerd.sock")
	if err != nil {
		t.Fatalf("NewResolver: %v", err)
	}

	pi, err := r.ResolvePod(ctx, &Tuple4{
		RemoteIP:   net.IPv4(185, 191, 225, 10),
		RemotePort: 6697,
		LocalIP:    net.IPv4(185, 236, 240, 36),
		LocalPort:  53449,
	})
	if err != nil {
		t.Fatalf("ResolvePod: %v", err)
	}
	if want, got := net.IPv4(10, 10, 26, 23), pi.PodIP; !want.Equal(got) {
		t.Errorf("Wanted pod IP %v, got %v", want, got)
	}
	if want, got := uint16(54782), pi.PodTranslatedPort; want != got {
		t.Errorf("Wanted pod port %d, got %d", want, got)
	}
	if want, got := "matrix", pi.KubernetesNamespace; want != got {
		t.Errorf("Wanted pod namespace %q, got %q", want, got)
	}
	if want, got := "appservice-irc-freenode-68977cdd5f-kfzl6", pi.Name; want != got {
		t.Errorf("Wanted pod name %q, got %q", want, got)
	}
}
